#!/usr/bin/perl

die "Need arguments\n" unless @ARGV>=3;

#  Get path name of gnuplot executable from environment
$GNUPLOT= defined $ENV{GNUPLOT} ? $ENV{GNUPLOT} : "gnuplot";
$GNUDATE= defined $ENV{GNUDATE} ? $ENV{GNUDATE} : "date";

($LOG_NAME, $PLOT_NAME, $DATE, $YMAX) = @ARGV;

#
#  Make Plot
#
&MakePlot;

exit;

#
#  Plot previous week  values from log usin Gnuplot
#
sub MakePlot {
	my ($LastDate, $MaxDateTime, $MinDateTime);
	my ($UpdateDateTime, $Sec, $f);
	#  Determine min and max date/time (use 1 week interval)
	($LastDate, undef) = ($DATE=~ /(\d{4}-\d\d-\d\d)-(\d\d:\d\d)/);
	$MaxDateTime = `$GNUDATE -d "$LastDate + 1 day" "+%Y-%m-%d-%H:%M"`;
	$MinDateTime = `$GNUDATE -d "$LastDate 13 day ago" "+%Y-%m-%d-%H:%M"`;
	$UpdateDateTime = `$GNUDATE "+%Y-%m-%d %H:%M %Z"`;
	chomp $MinDateTime;
	chomp $MaxDateTime;
	chomp $UpdateDateTime;

	#  Number of seconds in a day
	$Sec = 60*60*24;

	#  Factor to convert Bytes/30 min to  KB/s
	$f = 1.0/1000.0/30.0/60.0;

	open (GNUPLOT, "| $GNUPLOT") || die "Cannot run GNUPLOT\n";

	$yrange_statement = "set yrange [0:$YMAX]" if $YMAX;

	#  Make GNUPLOT print immediately
	select (GNUPLOT);
	$| = 1;


print GNUPLOT <<"EOM";
set xdata time
set timefmt "%Y-%m-%d-%H:%M"
set format x "%m-%d"
set xrange [ \"$MinDateTime\" : \"$MaxDateTime\" ]
$yrange_statement
set key left
set title "Internet Traffic (updated $UpdateDateTime)";
set xlabel "Date"
set ylabel "KB/s"
set xtics $Sec
set mxtics 1
set grid xtics
set term gif small size 600,150 xffffff x000000 xdddddd x880000 x008800 x000088 x666666
set output \"$PLOT_NAME\"
plot \\
 "$LOG_NAME" u 1:($f*\$2) t "Internal" w i lt 2, \\
 "$LOG_NAME" u 1:($f*\$3) t "External" w l lt 3, \\
 "$LOG_NAME" u 1:($f*\$4) t "Unknown"  w l lt 4
quit
EOM

}
