diff options
Diffstat (limited to 'contrib/mrtgext.pl')
-rw-r--r-- | contrib/mrtgext.pl | 291 |
1 files changed, 0 insertions, 291 deletions
diff --git a/contrib/mrtgext.pl b/contrib/mrtgext.pl deleted file mode 100644 index b9e9f6b9..00000000 --- a/contrib/mrtgext.pl +++ /dev/null @@ -1,291 +0,0 @@ -#!/usr/bin/perl -w -# -# mrtgext.pl v0.3 -# (c)2000 Cliff Woolley, Washington and Lee University -# jwoolley@wlu.edu -# -# A UNIX counterpart to Jim Drews' MRTG Extension for netware servers -# Mimics output of mrtgext.nlm using output of various standard UNIX -# programs (df, uptime, and uname) -# -# Dependencies: I make some assumptions about the output format of -# your df and uptime commands. If you have nonstandard outputs for -# any of these, either pick a different command that gives more -# standard output or modify the script below. Example: use /usr/bin/bdf -# on HP-UX instead of /usr/bin/df, because bdf follows the output format -# I expect while df does not. This was written on Linux and tested on -# HP-UX 10.20 (with changes to the subroutines at the bottom of the -# program to reflect HP's command parameters); similar tweaking could -# well be required to port this to other platforms. If you get it -# working on your platform, please send me any changes you had to -# make so I can try to incorporate them. -# -# -# Following is what I expect the programs' outputs to look like: -# -# ======= df ======== -# Filesystem 1k-blocks Used Available Use% Mounted on -# /dev/sda1 1014696 352708 609612 37% / -# /dev/sda2 2262544 586712 1559048 27% /apps -# /dev/sda3 4062912 566544 3286604 15% /share -# /dev/sr0 651758 651758 0 100% /cdrom -# =================== -# -# ===== uptime ====== -# 3:17pm up 15 days, 4:40, 5 users, load average: 0.12, 0.26, 0.33 -# =================== -# - -############################################################### -# Configuration section -############################################################### - -$dfcmd = "/bin/df 2>/dev/null"; -$uptimecmd = "/usr/bin/uptime"; -%customcmds = ( "PROCS" => "numprocesses", - "ZOMBIES" => "numzombies", - "MEMFREE" => "memfree", - "SWAPUSED" => "swapused", - "TCPCONNS" => "tcpconns", - "CLIENTS" => "ipclients" ); - # These are functions that you can - # define and customize for your system. - # You probably need to change the provided - # subroutines to work on your system (if - # not Linux). - -$rootfsnickname = "root"; # this is necessary as a kludge to - # better match the netware behavior. - # if you already have a _filesystem_ - # mounted as /root, then you'll need - # to change this to something else -$DEBUG = 0; -$recvtimeout = 30; - - -############################################################### -# Program section -############################################################### - -require 5.004; - -use Sys::Hostname; - - -$DEBUG = $ARGV[0] unless ($DEBUG); -$SIG{'ALRM'} = sub { exit 1; }; - -# some things never change -$hostname = hostname; - - -if ( $DEBUG ) { - $| = 1; - print scalar localtime,": mrtgext.pl started\n"; -} - -# timeout period -alarm($recvtimeout); -my $items = <STDIN>; -alarm(0); - -$items =~ s/[\r\n]//g; -( $DEBUG ) && print scalar localtime,": request: \"$items\"\n"; -my @items = split (/\s+/,"$items"); -( $DEBUG ) && print scalar localtime,": ",scalar @items," item(s) to process\n"; - -my $uptime = `$uptimecmd`; -my @df = grep {/^\//} `$dfcmd`; - -my $processed = 1; - -foreach $_ (@items) { - ( $DEBUG ) && print scalar localtime,": processing item #$processed: \"$_\"\n"; - $_ = uc; #convert $_ to upper case - if ( /^UTIL1$/ ) { - $uptime =~ /load average: ([^,]+),/; - print $1 * 100,"\n"; - } - elsif ( /^UTIL5$/ ) { - $uptime =~ /load average: [^,]+, ([^,]+)/; - print $1 * 100,"\n"; - } - elsif ( /^UTIL15$/ ) { - $uptime =~ /load average: [^,]+, [^,]+, ([^,]+)/; - print $1 * 100,"\n"; - } - elsif ( /^CONNECT$/ ) { - $uptime =~ /(\d+) users?,/; - print "$1\n"; - } - elsif ( /^NAME$/ ) { - print "$hostname\n"; - } - elsif ( /^UPTIME$/ ) { - $uptime =~ /up (.*),\s+\d+\s+users?,/; - print "$1\n"; - } - elsif ( /^VOLUMES$/ ) { - foreach $dfline (@df) { - my $volname = (split(/\s+/, "$dfline"))[5]; - $volname =~ s/^\/$/$rootfsnickname/; - $volname =~ s/^\///; - $volname =~ s/\//_/g; - print "$volname\n"; - } - } - elsif ( /^VF(\w*)$/ ) { - my $volname = ("$1" eq uc("$rootfsnickname")) ? "/" : "$1"; - foreach $dfline (@df) { - my @dfline = split(/\s+/, "$dfline"); - if ($dfline[5] =~ /^\/?$volname$/i ) { - print (($dfline[1]-$dfline[2]) * 1024,"\n"); - goto done; - } - } - ( $DEBUG ) && print scalar localtime,": ERROR: volume not found.\n"; - print "-1\n"; - } - elsif ( /^VU(\w*)$/ ) { - my $volname = ("$1" eq uc("$rootfsnickname")) ? "/" : "$1"; - foreach $dfline (@df) { - my @dfline = split(/\s+/, "$dfline"); - if ($dfline[5] =~ /^\/?$volname$/i ) { - print ($dfline[2] * 1024,"\n"); - goto done; - } - } - ( $DEBUG ) && print scalar localtime,": ERROR: volume not found.\n"; - print "-1\n"; - } - elsif ( /^VS(\w*)$/ ) { - my $volname = ("$1" eq uc("$rootfsnickname")) ? "/" : "$1"; - foreach $dfline (@df) { - my @dfline = split(/\s+/, "$dfline"); - if ($dfline[5] =~ /^\/?$volname$/i ) { - print ($dfline[1] * 1024,"\n"); - goto done; - } - } - ( $DEBUG ) && print scalar localtime,": ERROR: volume not found.\n"; - print "-1\n"; - } - elsif ( /^VKF(\w*)$/ ) { - my $volname = ("$1" eq uc("$rootfsnickname")) ? "/" : "$1"; - foreach $dfline (@df) { - my @dfline = split(/\s+/, "$dfline"); - if ($dfline[5] =~ /^\/?$volname$/i ) { - print (($dfline[1]-$dfline[2]),"\n"); - goto done; - } - } - ( $DEBUG ) && print scalar localtime,": ERROR: volume not found.\n"; - print "-1\n"; - } - elsif ( /^VKU(\w*)$/ ) { - my $volname = ("$1" eq uc("$rootfsnickname")) ? "/" : "$1"; - foreach $dfline (@df) { - my @dfline = split(/\s+/, "$dfline"); - if ($dfline[5] =~ /^\/?$volname$/i ) { - print ($dfline[2],"\n"); - goto done; - } - } - ( $DEBUG ) && print scalar localtime,": ERROR: volume not found.\n"; - print "-1\n"; - } - elsif ( /^VKS(\w*)$/ ) { - my $volname = ("$1" eq uc("$rootfsnickname")) ? "/" : "$1"; - foreach $dfline (@df) { - my @dfline = split(/\s+/, "$dfline"); - if ($dfline[5] =~ /^\/?$volname$/i ) { - print ($dfline[1],"\n"); - goto done; - } - } - ( $DEBUG ) && print scalar localtime,": ERROR: volume not found.\n"; - print "-1\n"; - } - elsif ( /^ZERO$/ ) { - print "0\n"; - } - elsif (exists( $customcmds{"$_"} )) { - my $cmdsub = "$customcmds{$_}"; - print &$cmdsub."\n"; - } - else { - print "-1\n"; - } - done: $processed++; -} -( $DEBUG ) && print scalar localtime,": done.\n"; - - -############################################################### -# CUSTOMIZED PROCEDURES -############################################################### - -sub numprocesses { - - my $num = `/bin/ps -eaf | /usr/bin/tail -n +2 | /usr/bin/wc -l`; - chomp ($num); - $num =~ s/\s+//g; - - $num; -} - -sub numzombies { - - my $num = `/bin/ps -afx | /usr/bin/awk '{print \$3}' | /usr/bin/grep Z | /usr/bin/tail -n +2 | /usr/bin/wc -l`; - chomp ($num); - $num =~ s/\s+//g; - - $num; -} - -sub tcpconns { - - my $num = `/bin/netstat -nt | /usr/bin/tail -n +3 | /usr/bin/wc -l`; - chomp ($num); - $num =~ s/\s+//g; - - $num; -} - -sub ipclients { - - my $num = `/bin/netstat -nt | /usr/bin/tail -n +3 | /usr/bin/awk '{print \$5}' | /bin/cut -d : -f 1 | /usr/bin/sort -nu | /usr/bin/wc -l`; - chomp ($num); - $num =~ s/\s+//g; - - $num; -} - -sub memfree { - - open( FP, "/proc/meminfo" ); - my @meminfo = <FP>; - close(FP); - - # total: used: free: shared: buffers: cached: - # Mem: 994615296 592801792 401813504 91193344 423313408 93118464 - # Swap: 204791808 0 204791808 - my ($total,$free,$buffers,$cache) = (split(/ +/,$meminfo[1]))[1,3,5,6]; - - int(($free+$buffers+$cache)/$total*100); -} - -sub swapused { - - open( FP, "/proc/meminfo" ); - my @meminfo = <FP>; - close(FP); - - # total: used: free: shared: buffers: cached: - # Mem: 994615296 592424960 402190336 89821184 423313408 93077504 - # Swap: 204791808 0 204791808 - - my ($total,$used) = (split(/ +/,$meminfo[2]))[1,2]; - - int($used/$total*100); -} |