File: amplot.sh

package info (click to toggle)
amanda 1%3A3.3.1-4
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 22,360 kB
  • sloc: ansic: 214,899; perl: 58,075; sh: 16,954; xml: 13,853; makefile: 2,228; awk: 431; lex: 405; yacc: 343; tcl: 118; sql: 19; sed: 16; php: 2
file content (202 lines) | stat: -rw-r--r-- 6,032 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#!@SHELL@
# Amanda, The Advanced Maryland Automatic Network Disk Archiver
# Copyright (c) 1992-1998 University of Maryland at College Park
# All Rights Reserved.
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of U.M. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission.  U.M. makes no representations about the
# suitability of this software for any purpose.  It is provided "as is"
# without express or implied warranty.
#
# U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# Author: Olafur Gudumundsson, (ogud@tis.com)  Trusted Information Systems
# Formerly at: 		  Systems Design and Analysis Group
#			  Computer Science Department
#			  University of Maryland at College Park
#
#	Amplot: a program to generate postscript plots of each nights amanda 
#	performance 
# 
#	Author: Olafur Gudmundsson (ogud@tis.com) 
#	Creation Date: April 1992 
#	Last modified: April 1995 
#	Input: list of amdumps 
#	Output: Plot of amdump files as either gnuplots on the screen or
#		Postscript files 
#

prefix="@prefix@"
exec_prefix="@exec_prefix@"
sbindir="@sbindir@"
amlibexecdir="@amlibexecdir@"
. "${amlibexecdir}/amanda-sh-lib.sh"
 
confdir=@CONFIG_DIR@
 
# add sbin and ucb dirs
PATH="$PATH:/usr/sbin:/sbin:/usr/ucb"
export PATH

# we use a different version of the compression variable than amanda itself.
COMPRESS=@AMPLOT_COMPRESS@

# Function to check that awk can do command-line variable
# substitution.  If no, then exit; if yes, set $AVARFLAG
# to the commandline switch used to introduce a variable. This
# check used to be performed at build time in configure; it's
# now performed at runtime.
test_awk() {
	local tmpfile result
	tmpfile=`mktemp /tmp/amplot.XXXXXX`
	echo 'BEGIN{print i; exit}' > ${tmpfile}
	result=`$AWK -f ${tmpfile} i=xx | wc -c`
	if test "$result" -le 1; then
		result=`$AWK -f ${tmpfile} -v i=xx | wc -c`
		if test "$result" -le 1; then
			echo "$AWK does not support command-line variable assignment; amplot cannot run" >&2
			rm -fr $tmpfile
			exit 1
		else
			AVARFLAG=-v
		fi
	else
		AVARFLAG=''
	fi

	rm -fr $tmpfile
}

# Function to search for gnuplot and ensure it's working.  This
# first tries the location detected/configured when amanda was built,
# then tries 'gnuplot', assuming it's in the user's path.  If no
# working gnuplot executable is found, it exits with an error.  The
# variable $GNUPLOT is set to the resulting executable.
find_gnuplot() {
	if test "x$GNUPLOT" = "x"; then
		# look for it in the user's PATH
		GNUPLOT=gnuplot
	fi

	if ${GNUPLOT} --version 2>/dev/null | grep '^gnuplot' >/dev/null; then
		: # looks OK
	else
		echo "${GNUPLOT} was not found; amplot cannot run"
		exit 1
	fi
}

# check our environment, using functions from above
test_awk
find_gnuplot

if [ $# -eq 0 ] ; then
	_ 'Usage: %s [-c] [-e] [-g] [-l] [-p] [-t hours] <amdump_files.[gz,z,Z]>\n' $0
	_ '%s generates plot for screen with fixed dimensions\n' $0
	_ '	-c	Compress the input amdump files after plotting\n'
	_ '	-e	Extends x (time) axes if needed\n'
	_ '	-g	Run gnuplot directly no postscript file generated DEFAULT\n'
	_ '	-l	Landscape mode suitable for printing\n'
	_ '	-p	Postscript output (color)\n'
	_ '	-b	The postscipt will be b/w\n'
	_ '	-t T	Set the right edge of the plot to be T hours\n'
	exit 1 
fi

tmp_files="bandw_free disk_alloc dump_idle finished run_queue tape_* title" 

my_plot=$amlibexecdir/amplot.g
paper=0 
gnuplot=1
cmpres=0
para=""
maxtime=4
bw=0

# setting up the parameters to pass to [gn]awk 
while :; do 
   case "$1" in
   -c)  cmpres=1; shift;;
   -e)  para=$para"$AVARFLAG extend=1 "; shift;;
   -g)  gnuplot=1; shift;;
   -l)  paper=1; para=$para"$AVARFLAG paper=1 "; shift;;
   -p)  gnuplot=0; shift;;
   -b)	bw=1; shift;;
   -t)  shift
	if test "$#" -eq 0; then
	    _ '%s: no argument for -t option\n' $0 1>&2
	    exit 5
	fi
	maxtime="$1"; shift;;
   *) break;;
   esac
done
if [ $# -eq 0 ] ; then 
	_ '%s: no input files\n' $0 1>&2
	exit 5
fi
para=$para"$AVARFLAG maxtime=$maxtime"

if [ $gnuplot  -eq 1 ] ; then
	my_plot=$my_plot"p"		# use the plot prog that pauses
	plot=" -geometry 800x700+40+0" 
	para=$para"$AVARFLAG gnuplot=1 "
	_ "Displaying graph on the screen, <CR> for next graph"

	if [ "$paper" -eq 1 ] ; then
		_ '%s: -l requires -p flag at the same time\n' $0 1>&2
		exit 6 
	fi
	if [ "$bw" -eq 1 ] ; then
		_ '%s: -b requires -p flag at the same time\n' $0 1>&2
		exit 6 
	fi
fi

if [ $bw -eq 1 ]; then
	para=$para" bw=1"
fi

list="";		# files to compress at the end

for i in ${1+"$@"}		# for all the input files
do
	f="$i";
	if [ ! -f "$f" ] ; then 
		f=`ls "$i" "$i".*[zZ] 2>/dev/null`
	fi
	if [ -f "$f" ] ; then 		# found file 
                disp=`$AWK -f $amlibexecdir/amcat.awk $AVARFLAG f="$f"`
		if [ -z "$disp" ] ; then 
			_ 'Do not know how to [gz|z]cat this file\n'
		else
			/bin/rm -f $tmp_files 
			$disp "$f" | $AWK -f $amlibexecdir/amplot.awk $para
			$GNUPLOT $plot $my_plot
			if [ $disp = "cat" -a  $cmpres -eq 1 ] ; then
				list=$list" "$f
			fi
		fi
	else 				# check if file has been compressed
		_ 'No such file %s or %s\n' "$i" "$i.*[zZ]"
	fi
done

/bin/rm -f $tmp_files 

if [ "$list" != "" ] ; then		# now compress the files we worked on
# comment out next line if you do not want compression at the end
	_ 'Compressing %s\n' "$list"
	$COMPRESS $list
fi
exit 0