#!/bin/sh
# Amanda, The Advanced Maryland Automatic Network Disk Archiver
# Copyright (c) 1992,1993,1994,1995 University of Maryland
# 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=/usr
exec_prefix=${prefix}
sbindir=${exec_prefix}/sbin
libexecdir=/usr/lib/amanda
 
confdir=/etc/amanda
 
PATH=$libexecdir:${exec_prefix}/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ucb:$PATH
export PATH

AWK=mawk
AVARFLAG=-v
GNUPLOT=/usr/bin/gnuplot
COMPRESS=/bin/gzip

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

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

if [ -r disk_alloc ] ; then	# clean up
	/bin/rm -f $tmp_files 
fi 

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

# setting up the parameters to pass to [gn]awk 
while [	$1 = "-c" -o \
	$1 = "-e" -o \
	$1 = "-g" -o \
	$1 = "-l" -o \
	$1 = "-p" -o \
	$1 = "-t" ] ; do 
	if [ $1 = "-c" ] ; then
		cmpres=1
	fi
	if [ $1 = "-e" ] ; then 
		para=$para"$AVARFLAG extend=1 "
	fi
	if [ $1 = "-g" ] ; then
		gnuplot=1 
	fi
	if [ $1 = "-l" ] ; then 
		paper=1
		para=$para"$AVARFLAG paper=1 "
	fi		
	if [ $1 = "-p" ] ; then 
		gnuplot=0;
	fi
	if [ $1 = "-t" ] ; then
		shift
		if [ $# -eq 0 ] ; then
			echo "amplot: no argument for -t option" 1>&2
			exit 5
		fi
		maxtime=$1
	fi
	shift; 
	if [ $# -eq 0 ] ; then 
		echo "amplot: no input files" 1>&2
		exit 5
	fi
done
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 "
	echo "Displaying graph on the screen, <CR> for next graph"

	if [ $paper -eq 1 ] ; then
		echo "amplot: -l requires -p flag at the same time" 1>&2
		exit 6 
	fi
fi

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

for i in $* 		# 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 $libexecdir/amcat.awk $AVARFLAG f="$f"`
		if [ -z $disp ] ; then 
			echo "Do not know how to [gz|z]cat this file"
		else
			$disp $f | $AWK -f $libexecdir/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
		echo "No such file $i or $i.*[zZ]"
	fi
done

if [ -r disk_alloc ] ; then
	/bin/rm -f $tmp_files 
fi 

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