#!/usr/bin/perl -w -T use RRDs ; my $file = "/var/rrd/cellar.rrd" ; sub SummaryTable { my $cols = (defined $_[0])?$_[0]:1 ; my $days = $cols*11-1; my $step = 3600 ; my $end = int(RRDs::last($file)/$step)*$step ; my ($st,$sp,$nm,$mn,$av,$mx) ; my @tm = localtime($end) ; my $h = $days*24+$tm[2] ; ($st,$sp,$nm,$mn) = RRDs::fetch( $file , "MIN", "-r", $step , "-e" , $end , "-s", "e-".$h."hours" ) ; return unless ( $sp == $step ) ; ($st,$sp,$nm,$mx) = RRDs::fetch( $file , "MAX", "-r", $step , "-e" , $end , "-s", "e-".$h."hours" ) ; return unless ( $sp == $step ) ; ($st,$sp,$nm,$av) = RRDs::fetch( $file , "AVERAGE", "-r", $step , "-e" , $end , "-s", "e-".$h."hours" ) ; return unless ( $sp == $step ) ; print "
" ; print "
" ; for ( my $i = 0 ; $i < $h ; $i += 24 ) { if ($i%264==0) { print "
\n" if ($i!=0) ; print "\n" ; } my $t = localtime($st) ; $t =~ s/\d\d:\d\d:\d\d // ; $st += $sp*24 ; my $e = $i + 23 ; $e = $h - 1 if ( $e >= $h ) ; last if ( $e < $i ) ; my $x = $mx->[$i][0] ; map { $x = $_ if ( !defined($x) || (defined($_) && ($x<$_)) ) } map( $mx->[$_][0] , ($i..$e) ) ; my $n = $mn->[$i][0] ; map { $n = $_ if ( !defined($n) || (defined($_) && ($n>$_)) ) } map( $mn->[$_][0] , ($i..$e) ) ; my $r = 0 ; map { $r += $_*$step if (defined($_)) } map( $av->[$_][10] , ($i..$e) ) ; print "" ; print "\n" ; } print "
DayMaxTempMin TempAvg Humid
$t" ; print $x if defined($x) ; print "" ; print $n if defined($n) ; print "" ; printf '%.2f',$r if defined($r) ; print "
" ; } my @Periods = ( "DAY" , "WEEK" , "MONTH" , "YEAR" , # "DECADE" , # "CENTURY" , ) ; my %Times = ( "DAY" => 1 , "WEEK" => 7 , "MONTH" => 31 , "YEAR" => 366, "DECADE" => 3653 , "CENTURY" => 36525 , ) ; my %Columns = ( "DAY" => 1 , "WEEK" => 2 , "MONTH" => 3 , "YEAR" => 3, "DECADE" => 3 , "CENTURY" => 3 , ) ; #my $q = $ENV{'QUERY_STRING'} ; my $q = (exists $ENV{'QUERY_STRING'})? $ENV{'QUERY_STRING'} : $ARGV[0] ; my $period = $Periods[0] ; # default foreach my $k (@Periods) { if ($q =~ /$k/ ) { $period = $k ; last ; } } print "Content-type: text/html\n" ; #print "Expires: ".gmtime(600+time())."\n" #print "Cache-Control: max-age=600\n" ; #print "Pragma: content=no-cache" ; print "\n" ; print "\n" ; print "" ; print "Cellar Temperature -- ".localtime(RRDs::last($file)).""; print "" ; print "" ; my $rrderr = RRDs::error ; print "
" ; print "
" ; print join("",map ("" , @Periods )); print "
\n" ; print "
" ; print RRDs::error."
" if $rrderr ; print "
\n" ; print "
\n" ; SummaryTable ($Columns{$period}) ; print "" ; print "" ;