#!/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); }