mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	git-svn-id: http://www.observium.org/svn/observer/trunk@2361 61d68cd4-352d-0410-923a-c4978735b2b8
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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";
 | 
						|
}
 |