#!/usr/local/bin/perl -w 
# -*- perl -*-

# Cricket: a configuration, polling and data display wrapper for RRD files
#
#    Copyright (C) 1998 Jeff R. Allen and WebTV Networks, Inc.
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

BEGIN {
   my $programdir = (($0 =~ m:^(.*/):)[0] || "./") . "..";
   eval "require '$programdir/cricket-conf.pl'";
   eval "require '/usr/local/etc/cricket-conf.pl'"
                 unless $Common::global::gInstallRoot;
   $Common::global::gInstallRoot ||= $programdir;
}

use strict;
use lib "$Common::global::gInstallRoot/lib";
use Common::global;

use HTTP::Date; 
use RRDs;

my $subtree = shift || die "Must provide a subtree.\n";
my @output  = (); 
my $dur     = 0;
my $tnum    = 0;
my $when    = 0;
my $now		= time();

if (! -f "$Common::global::gCricketHome/cricket-logs/$subtree.times") {
	die "Couldn't find $Common::global::gCricketHome/cricket-logs/$subtree.times.\n";
} else {
	@output = `tail -1 $Common::global::gCricketHome/cricket-logs/$subtree.times 2>&1`;
	if ($?) {
		die "Error tailing $Common::global::gCricketHome/cricket-logs/$subtree.times: $?\n"; }
}

if ($output[0] =~ /\[(.*?)\]\s+Processed\s+([0-9]+)\s+targets\s+in\s+(.*)\.$/) {
	my $date = 0;

	$date = str2time($1), $tnum = $2, $dur = $3;
	$dur  = &durationToSeconds($dur);
	$when = $date - $dur;

	# if the log file hasn't been updated, send back the special time "N"
	if ($when < $now - 301) {
		$when = "N";
	}
} else {
	die "Bad line in $subtree.times: $output[0]";
}

if ($when ne 'N') {
printf("%d\@%s\n", $dur, $when);
printf("%d\@%s\n", $tnum, $when);
printf("%.2f\@%s\n", $tnum/$dur, $when);
} else {
printf("%d\n", $dur);
printf("%d\n", $tnum);
printf("%.2f\n", $tnum/$dur);
}

exit(0);

sub durationToSeconds {
	my $durLong = shift;
	my $durSecs = 0;

	$durSecs += $1 * 60 if $durLong =~ m/([0-9]+)\s+minutes/;
	$durSecs += $1 if $durLong =~ m/([0-9]+)\s+seconds/;

	if ($durSecs == 0) {
		warn "Duration $durLong resolved to 0 seconds.\n";
		$durSecs = 1;
	}
		
	return($durSecs);
}
