--- projects/cms/source/host/generic/statgrab.pl 2001/01/28 19:53:39 1.15 +++ projects/cms/source/host/generic/statgrab.pl 2001/02/05 08:27:38 1.23 @@ -3,7 +3,7 @@ #----------------------------------------------------------------- # Machine statistics grabber # $Author: pjm2 $ -# $Id: statgrab.pl,v 1.15 2001/01/28 19:53:39 pjm2 Exp $ +# $Id: statgrab.pl,v 1.23 2001/02/05 08:27:38 pjm2 Exp $ # # A Perl script to return various information about a host machine # by examining the output of some common Unix/Linux commands. @@ -21,15 +21,17 @@ $| = 1; # You'd be silly not to use this ;) use strict; -# Path's +# Paths my($topbin) = "/usr/local/sbin/top"; my($dfbin) = "/usr/bin/df"; my($usersbin) = "/usr/ucb/users"; my($unamebin) = "/usr/bin/uname"; +my($uptimebin) = "/usr/bin/uptime"; # Run the following components: - &print_ident(); &include_osver(); +&include_uptime(); &include_users(); &include_top(); &include_disk(); @@ -48,7 +50,7 @@ exit(0); # the host should check this when reading data # means the host must be checked and updated to work with newer versions. sub print_ident() { - print 'version statgrab.pl $Revision: 1.15 $'; + print 'version statgrab.pl $Revision: 1.23 $'; print "\n"; } @@ -107,11 +109,11 @@ sub include_users() { # Find out all users on this machine. my($users) = `$usersbin`; - chop($users); - $users = "" unless defined $users; + $users = "\n" unless defined $users; + chop $users; my($users_count) = 0; $users_count++ while $users =~ /\w+/g; - my($users_list) = $users; + my($users_list) = $users." "; &print_pair(1, "packet.users.count", $users_count); &print_pair(0, "packet.users.list", $users_list); @@ -129,7 +131,7 @@ sub include_top() { &print_pair(1, "packet.load.load1", $top =~ /load averages:\s*([^\s]+?),/); &print_pair(1, "packet.load.load5", $top =~ /load averages:\s*.+?,\s*([^\s]+?),/); - &print_pair(1, "packet.load.load15", $top =~ /load averages:\s*.+?,\s*.+?,\s*([^\s]+?)\s*/); + &print_pair(1, "packet.load.load15", $top =~ /load averages:\s*.+?,\s*.+?,\s*([^\s]+?)\s+/); &print_pair(1, "packet.processes.total", $top =~ /([^\s]+?) processes:/); &print_pair(1, "packet.processes.sleeping", $top =~ / ([^\s]+?) sleeping/); &print_pair(1, "packet.processes.zombie", $top =~ / ([^\s]+?) zombie/); @@ -185,5 +187,38 @@ sub include_osver() { &print_pair(0, "packet.os.platform", $os_platform); &print_pair(0, "packet.os.sysname", $os_sysname); &print_pair(0, "packet.os.version", $os_version); + +} + +# sub to get system uptime. +sub include_uptime() { + + # grab the uptime + my($uptime) = `$uptimebin`; + + # work out the days, hours, and minutes + if ($uptime =~ /hr/) { + # 0 minutes + $uptime =~ s/up ([0-9]+) .*, ([0-9]+) .*,/$1:$2:0/; + } + elsif ($uptime =~ /min/) { + # 0 hours + $uptime =~ s/up ([0-9]+) .*, ([0-9]+) .*,/$1:0:$2/; + } + elsif ($uptime =~ /day/) { + # normal + $uptime =~ s/up ([0-9]+) .*, ([0-9]+):([0-9]+)/$1:$2:$3/; + } + else { + # 0 days + $uptime =~ s/up ([0-9]+):([0-9]+)/0:$1:$2/; + } + + # turn into minutes + + $uptime =~ /([0-9]+):([0-9]+):([0-9]+)/; + $uptime = $3 + ($2 + $1*24)*60; + + &print_pair(0, "packet.os.uptime", $uptime); }