librenms/scripts/apache-stats
Adam Amstrong b9e5995b0a replace default with perl
git-svn-id: http://www.observium.org/svn/observer/trunk@2361 61d68cd4-352d-0410-923a-c4978735b2b8
2011-05-25 13:07:13 +00:00

90 lines
2.8 KiB
Perl
Executable File

#!/usr/bin/env perl
# Original python script Copyright (C) 2009 Glen Pitt-Pladdy
#
# 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.
use LWP::Simple;
$CACHETIME = 30;
$CACHEFILE = '/tmp/snmp-cache-apache';
# check for cache file newer CACHETIME seconds ago
if ( -f $CACHEFILE && time - (stat( $CACHEFILE ))[9] < $CACHETIME) {
# use cached data
#print "Using cached data from file $CACHEFILE.\n";
open (INFILE, "<$CACHEFILE" )
or die "File open failure: $CACHEFILE\n";
@data = <INFILE>;
close INFILE;
} else {
# grab the status URL (fresh data)
@data = split /(\n)/, LWP::Simple::get( 'http://localhost/server-status?auto' )
or die "Data fetch failure.\n";
# write file
$tmpfile = "$CACHEFILE.TMP.$PID";
open (OUTFILE, ">$tmpfile")
or die "File open failure: $tmpfile\n";
print OUTFILE @data;
close OUTFILE;
rename ( $tmpfile, $CACHEFILE );
}
# dice up the data
@scoreboardkey = ( '_', 'S', 'R', 'W', 'K', 'D', 'C', 'L', 'G', 'I', '.' );
%params = {};
foreach $line (@data) {
chomp $line;
@fields = split( /: /, $line);
if ($fields[0] eq 'Scoreboard') {
# count up the scoreboard into states
%states = {};
foreach $state (@scoreboardkey) {
$states{$state} = 0;
}
foreach $state ( split(//, $fields[1]) ) {
$states{$state}++;
}
} elsif ($fields[0] eq 'Total kBytes') {
# turn into base (byte) value
$params{$fields[0]} = int($fields[1])*1024;
} else {
# just store everything else
$params{$fields[0]} = $fields[1];
}
}
# output the data in order (this is because some platforms don't have them all)
@dataorder = (
'Total Accesses',
'Total kBytes',
'CPULoad',
'Uptime',
'ReqPerSec',
'BytesPerSec',
'BytesPerReq',
'BusyServers',
'IdleServers'
);
foreach $param (@dataorder) {
if (exists $params{$param}) {
print $params{$param}."\n";
} else {
# not all Apache's have all stats
print "U\n";
}
}
# print the scoreboard
foreach $state (@scoreboardkey) {
print $states{$state}."\n";
}