Created
February 13, 2020 18:52
-
-
Save ablakely/9e96751e24df11153cea6c9ec6c4eb85 to your computer and use it in GitHub Desktop.
Sysinfo for *NIX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl -w | |
# | |
# Copyright (c) 2002, 2003 David Rudie | |
# All rights reserved. | |
# | |
# Redistribution and use in source and binary forms, with or without | |
# modification, are permitted provided that the following conditions | |
# are met: | |
# 1. Redistributions of source code must retain the above copyright | |
# notice, this list of conditions and the following disclaimer. | |
# 2. Redistributions in binary form must reproduce the above copyright | |
# notice, this list of conditions and the following disclaimer in the | |
# documentation and/or other materials provided with the distribution. | |
# | |
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
# SUCH DAMAGE. | |
# | |
# Modifications to this script from version 2.78 on are | |
# Copyright (C) 2003-2005 Travis Morgan | |
# | |
# Modifications to this script from version 3.0+ are | |
# Copyright (C) 2020 Aaron Blakely <[email protected]> | |
# | |
# Changes: | |
# 2/13/20 - Fixed /proc/meminfo parser | |
# | |
use POSIX qw(floor); | |
use strict; | |
# Set up the arrays and variables first. | |
use vars qw( | |
@arr | |
@arr1 | |
@arr2 | |
$cpu | |
@cpu | |
@cpuinfo | |
$data | |
$distro | |
$distrov | |
@distros | |
@data | |
$df | |
@dmesgboot | |
@hinv | |
@meminfo | |
$mhz | |
@mhz | |
$model | |
@netdev | |
@netstat | |
@nic | |
@nicname | |
$smp | |
@smp | |
$stream | |
$sysctl | |
@uptime | |
$var | |
$vara | |
$varb | |
$varc | |
$vard | |
$varh | |
$varm | |
$varp | |
$varx | |
$vary | |
$varz | |
$col1 | |
$col2 | |
); | |
# Specify your NIC interface name (eth0, rl0, fxp0, etc) and a name for it. | |
# | |
# Example: @nic = ('eth0', 'eth1'); | |
# @nicname = ('External', 'Internal'); | |
# | |
# NOTE: If you set one then you HAVE to set the other. | |
@nic = (''); | |
@nicname = (''); | |
$col1 = ''; | |
$col2 = ''; | |
# These are the default settings for which information gets displayed. | |
# 0 = Off; 1 = On | |
my $showConsole = 0; | |
my $showConsoleTopCPU = 1; | |
my $showHostname = 1; | |
my $showOS = 1; | |
my $showCPU = 1; | |
my $showProcesses = 1; | |
my $showUptime = 1; | |
my $showLoadAverage = 1; | |
my $showBattery = 0; # Requires APM and /proc/apm | |
my $showMemoryUsage = 1; | |
my $showDiskUsage = 1; | |
my $showNetworkTraffic = 0; | |
my $showUsers = 1; | |
my $showDistro = 1; | |
# Console output color. | |
# Black = 30 # Red = 31 # Green = 32 # Yellow = 33 | |
# Blue = 34 # Magenta = 35 # Cyan = 36 # Grey = 37 | |
my $normBright = '0'; | |
my $normColour = '32'; | |
my $miscBright = '1'; | |
my $miscColour = '30'; | |
my $warnBright = '1'; | |
my $warnColour = '33'; | |
my $critBright = '1'; | |
my $critColour = '31'; | |
############################################### | |
### Nothing below here should need changed. ### | |
############################################### | |
my $clear = ""; | |
my $crit = "ritBright;$critColour"."m"; | |
my $misc = "iscBright;$miscColour"."m"; | |
my $norm = "ormBright;$normColour"."m"; | |
my $warn = "arnBright;$warnColour"."m"; | |
my $sysinfoVer = '3.0'; | |
my $sysinfoDate = 'Feb 13, 2020'; | |
my $os = `uname -s`; chomp($os); | |
my $osn = `uname -n`; chomp($osn); $osn =~ s/([^\.]*).*/$1/; | |
my $osv = `uname -r`; chomp($osv); | |
my $osm = `uname -m`; chomp($osm); | |
my $uname = "$os $osv/$osm"; | |
my $darwin = 1 if $os =~ /^Darwin$/; | |
my $freebsd = 1 if $os =~ /^FreeBSD$/; | |
my $linux = 1 if $os =~ /^Linux$/; | |
my $netbsd = 1 if $os =~ /^NetBSD$/; | |
my $openbsd = 1 if $os =~ /^OpenBSD$/; | |
my $irix = 1 if $os =~ /^IRIX$/; | |
my $irix64 = 1 if $os =~ /^IRIX64$/; | |
my $alpha = 1 if $osm =~ /^alpha$/; | |
my $armv4l = 1 if $osm =~ /^armv4l$/; | |
my $armv5l = 1 if $osm =~ /^armv5l$/; | |
my $i586 = 1 if $osm =~ /^i586$/; | |
my $i686 = 1 if $osm =~ /^i686$/; | |
my $ia64 = 1 if $osm =~ /^ia64$/; | |
my $mips = 1 if $osm =~ /^mips$/; | |
my $parisc64 = 1 if $osm =~ /^parisc64$/; | |
my $ppc = 1 if $osm =~ /^ppc$/; | |
my $x86_64 = 1 if $osm =~ /^x86_64$/; | |
my $d700 = 1 if $osv =~ /^7\.0\.0/; | |
my $l26 = 1 if $osv =~ /^2\.6/; | |
my $showConsoleTrig = $ARGV[0]; | |
if($showConsoleTrig) { | |
if($showConsoleTrig eq '-c' || $showConsoleTrig eq '--console') { | |
$showConsole = 1; | |
$showConsoleTopCPU = 1; | |
} elsif($showConsoleTrig eq '-v' || $showConsoleTrig eq '--version') { | |
print "sysinfo v$sysinfoVer $sysinfoDate\n\n"; | |
print "original version - Copyright (C) 2002-2003 David Rudie <david\@inexistent.com>\n"; | |
print "Modifcations for v2.78.10 - Copyright (C) 2003-2005 Travis Morgan\n"; | |
print "Modifcations for v3.0 - Copyright (C) 2020 Aaron Blakely (http://github.com/ablakely)\n\n"; | |
exit -1; | |
} | |
} | |
if($linux) { | |
@cpuinfo = &openfile("/proc/cpuinfo"); | |
@meminfo = &openfile("/proc/meminfo"); | |
@netdev = &openfile("/proc/net/dev"); | |
@uptime = &openfile("/proc/uptime"); | |
} elsif($irix || $irix64) { | |
@hinv = `hinv`; | |
} else { | |
@dmesgboot = &openfile("/var/run/dmesg.boot"); | |
@netstat = `netstat -ibn`; | |
if($darwin) { | |
$sysctl = '/usr/sbin/sysctl'; | |
} else { | |
$sysctl = '/sbin/sysctl'; | |
} | |
} | |
if($armv4l || $armv5l) { | |
$df = 'df -k'; | |
$showConsoleTopCPU = 0; | |
} else { | |
if($linux) { | |
$df = 'df -kP'; | |
} else { | |
$df = 'df -k'; | |
} | |
} | |
if($linux && $showDistro) { | |
@distros = ( | |
"Gentoo", "/etc/gentoo-release", | |
"Fedora Core", "/etc/fedora-release", | |
"Slackware", "/etc/slackware-version", | |
"Cobalt", "/etc/cobalt-release", | |
"Debian", "/etc/debian_version", | |
"Mandrake", "/etc/mandrake-release", | |
"Mandrake", "/etc/mandrakelinux-release", | |
"Yellow Dog", "/etc/yellowdog-release", | |
"Red Hat", "/etc/redhat-release" | |
); | |
$distro = ""; | |
$distrov = ""; | |
do { | |
if (-e $distros[1]) { | |
$distro = $distros[0]; | |
$distrov = `cat $distros[1]`; | |
chomp($distrov); | |
$distrov =~ s/[^0-9]*([0-9.]+)[^0-9.]{0,1}.*/$1/; | |
} | |
shift @distros; shift @distros; | |
} until (scalar @distros == 0) || (length $distro > 0); | |
} | |
if($showCPU) { | |
if($freebsd) { | |
if($alpha) { | |
@cpu = grep(/^COMPAQ/, @dmesgboot); | |
$cpu = join("\n", $cpu[0]); | |
} else { | |
@cpu = grep(/CPU: /, @dmesgboot); | |
$cpu = join("\n", @cpu); | |
$cpu =~ s/Warning:.*disabled//; | |
@cpu = split(/CPU: /, $cpu); | |
$cpu = $cpu[1]; | |
chomp($cpu); | |
@smp = grep(/ cpu/, @dmesgboot); | |
$smp = scalar @smp; | |
} | |
} | |
if($netbsd) { | |
if($alpha) { | |
@cpu = grep(/^COMPAQ/, @dmesgboot); | |
$cpu = join("\n", $cpu[0]); | |
@cpu = split(/, /, $cpu); | |
$cpu = $cpu[0]; | |
} else { | |
@cpu = grep(/cpu0: /, @dmesgboot); | |
@cpu = grep(!/apic/, @cpu); | |
$cpu = join("\n", $cpu[0]); | |
@cpu = split(/: /, $cpu); | |
$cpu = $cpu[1]; | |
@smp = grep(/cpu\d+:/, @dmesgboot); | |
@smp = grep(/MHz/, @smp); | |
$smp = scalar @smp; | |
} | |
} | |
if($openbsd) { | |
@cpu = grep(/cpu0: /, @dmesgboot); | |
@cpu = grep(/[M|G]Hz/, @cpu); | |
$cpu = join("\n", @cpu); | |
@cpu = split(/: /, $cpu); | |
$cpu = $cpu[1]; | |
} | |
if($irix || $irix64) { | |
@cpu = grep(/CPU:/, @hinv); | |
$cpu = join("\n", @cpu); | |
$cpu =~ s/^.*(R[0-9]*) .*$/$1/; | |
@mhz = grep(/MHZ/, @hinv); | |
$mhz = join("\n", @mhz); | |
$mhz = $mhz[0]; | |
$mhz =~ s/^.* ([0-9]*) MHZ.*$/$1/; | |
@smp = grep(/ IP/, @hinv); | |
$smp = $smp[0]; | |
$smp =~ s/^([0-9]*) .*$/$1/; | |
chomp($smp); | |
chomp($cpu); | |
chomp($mhz); | |
$cpu = "MIPS $cpu ($mhz MHz)"; | |
} | |
if($linux) { | |
if($alpha) { | |
$cpu = &cpuinfo("cpu\\s+: "); | |
$model = &cpuinfo("cpu model\\s+: "); | |
$cpu = "$cpu $model"; | |
$smp = &cpuinfo("cpus detected\\s+: "); | |
} | |
if($armv4l || $armv5l) { | |
$cpu = &cpuinfo("Processor\\s+: "); | |
} | |
if($i686 || $i586 || $x86_64) { | |
$cpu = &cpuinfo("model name\\s+: "); | |
$cpu =~ s/(.+) CPU family\t+\d+MHz/$1/g; | |
$cpu =~ s/(.+) CPU .+GHz/$1/g; | |
$mhz = &cpuinfo("cpu MHz\\s+: "); | |
$cpu = "$cpu ($mhz MHz)"; | |
@smp = grep(/processor\s+: /, @cpuinfo); | |
$smp = scalar @smp; | |
} | |
if($ia64) { | |
$cpu = &cpuinfo("vendor\\s+: "); | |
$model = &cpuinfo("family\\s+: "); | |
$mhz = &cpuinfo("cpu MHz\\s+: "); | |
$mhz = sprintf("%.2f", $mhz); | |
$cpu = "$cpu $model ($mhz MHz)"; | |
@smp = grep(/processor\s+: /, @cpuinfo); | |
$smp = scalar @smp; | |
} | |
if($mips) { | |
$cpu = &cpuinfo("cpu\\s+: "); | |
$model = &cpuinfo("cpu model\\s+: "); | |
$cpu = "$cpu $model"; | |
} | |
if($parisc64) { | |
$cpu = &cpuinfo("cpu\\s+: "); | |
$model = &cpuinfo("model name\\s+: "); | |
$mhz = &cpuinfo("cpu MHz\\s+: "); | |
$mhz = sprintf("%.2f", $mhz); | |
$cpu = "$model $cpu ($mhz MHz)"; | |
} | |
if($ppc) { | |
$cpu = &cpuinfo("cpu\\s+: "); | |
$mhz = &cpuinfo("clock\\s+: "); | |
if($cpu =~ /^9.+/) { | |
$model = "IBM PowerPC G5"; | |
} elsif($cpu =~ /^74.+/) { | |
$model = "Motorola PowerPC G4"; | |
} else { | |
$model = "IBM PowerPC G3"; | |
} | |
$cpu = "$model $cpu ($mhz)"; | |
} | |
$cpu =~ s/^\s+//; | |
$cpu =~ s/ +/ /g; | |
} elsif($darwin) { | |
$cpu = `hostinfo | grep 'Processor type' | cut -f2 -d':'`; chomp($cpu); | |
$cpu =~ s/^\s*(.+)\s*$/$1/g; | |
if($cpu =~ /^ppc7.+/) { | |
$cpu = "Motorola PowerPC G4"; | |
} | |
$mhz = `$sysctl -n hw.cpufrequency`; chomp($mhz); | |
$mhz = sprintf("%.2f", $mhz / 1000000); | |
$cpu = "$cpu ($mhz MHz)"; | |
$smp = `hostinfo | grep "physically available" | cut -f1 -d' '`; chomp($smp); | |
} | |
$cpu =~ s/ +/ /g; | |
$cpu =~ s/^ //; | |
if($smp && $smp gt 1) { | |
$cpu = "$smp x $cpu"; | |
} | |
} | |
if(!$showConsole) { | |
my $output; | |
if($showHostname) { $output = $col1."Hostname".$col2.": ".$col1.$osn.$col2." - "; } | |
if($showOS) { $output .= $col1."OS".$col2.": ".$col1.$uname.$col2." - "; } | |
if($linux && $showDistro && length $distro > 0 ) { | |
$output .= $col1."Distro".$col2.": ".$col1.$distro; | |
if (length $distrov > 0) { | |
$output .= " ".$distrov; | |
} | |
$output .= $col2." - "; | |
} | |
if($showCPU) { $output .= $col1."CPU".$col2.": ".$col1.$cpu.$col2." - "; } | |
if($showProcesses) { $output .= $col1."Processes".$col2.": ".$col1.&processes.$col2." - "; } | |
if($showUptime) { $output .= $col1."Uptime".$col2.": ".$col1.&uptime.$col2." - "; } | |
if($showUsers) { $output .= $col1."Users".$col2.": ".$col1.&users.$col2." - "; } | |
if($showLoadAverage) { $output .= $col1."Load Average".$col2.": ".$col1.&loadaverage.$col2." - "; } | |
if($showBattery) { $output .= $col1."Battery".$col2.": ".$col1.&battery.$col2." - "; } | |
if($showMemoryUsage) { $output .= $col1."Memory Usage".$col2.": ".$col1.&memoryusage.$col2." - "; } | |
if($showDiskUsage) { $output .= $col1."Disk Usage".$col2.": ".$col1.&diskusage; } | |
if($showNetworkTraffic) { $output .= "\n".&networktraffic; } | |
$output =~ s/ - $//g; | |
print "$output\n"; | |
} elsif($showConsole) { | |
if($showHostname) { | |
print &consoleprint("System Information").$osn."\n"; | |
} else { | |
print "System Information\n"; | |
} | |
print "-----------------------------------------------------------\n"; | |
if($showOS) { | |
print &consoleprint("Operating System").$uname."\n"; | |
} | |
if($showCPU) { | |
print &consoleprint("CPU").$cpu."\n"; | |
} | |
if($linux && $showDistro && length $distro > 0) { | |
print &consoleprint("Distro").$distro." ".$distrov."\n"; | |
} | |
if($showProcesses) { | |
print &consoleprint("Processes").&processes."\n"; | |
} | |
if($showUptime) { | |
print &consoleprint("Uptime").&uptime."\n"; | |
} | |
if($showLoadAverage) { | |
print &consoleprint("Load Average").&loadaverageconsole."\n"; | |
} | |
if($showUsers) { | |
print &consoleprint("Users").&users."\n"; | |
} | |
if($showBattery) { | |
print &consoleprint("Battery").&batteryconsole."\n"; | |
} | |
if($showConsoleTopCPU) { | |
print &consoleprint("Top CPU Process").&topcpuprocess."\n"; | |
} | |
if($showMemoryUsage) { | |
print &consoleprint("Memory Usage").&memoryusageconsole."\n"; | |
} | |
if($showDiskUsage) { | |
print &consoleprint("Disk Usage").&diskusageconsole."\n"; | |
} | |
if($showNetworkTraffic) { | |
print &networktrafficconsole; | |
} | |
print $clear; | |
} else { | |
print 'Invalid option specified.'."\n"; | |
} | |
sub battery { | |
$data = ""; | |
if(open(FD, '/proc/apm')) { | |
while($stream = <FD>) { | |
$data .= $stream; | |
@data = split(/\n/, $data); | |
} | |
close(FD); | |
} | |
$data = $data[0]; | |
$data =~ s/.+\s(\d+%).+/$1/; | |
return $data; | |
} | |
sub batteryconsole { | |
$var = &battery; | |
$var =~ s/(\d+)%/$1/; | |
if($var <= '15') { | |
$var = $crit.$var."%".$clear; | |
} elsif($var <= '30') { | |
$var = $warn.$var."%".$clear; | |
} else { | |
$var = $var."%"; | |
} | |
return $var; | |
} | |
sub consoleprint { | |
my $string = shift; | |
return "$norm$string$clear$misc:$clear "; | |
} | |
sub cpuinfo { | |
my $string = shift; | |
@arr = grep(/$string/, @cpuinfo); | |
$var = join("\n", $arr[0]); | |
@arr = split(/: /, $var); | |
$var = $arr[1]; | |
return $var; | |
} | |
sub diskusage { | |
if($irix || $irix64) { | |
$vara = `$df | grep dev | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vara); | |
$vard = `$df | grep dev | awk '{ sum+=\$4 / 1024 / 1024}; END { print sum }'`; chomp($vard); | |
} else { | |
$vara = `$df | grep dev | awk '{ sum+=\$2 / 1024 / 1024}; END { print sum }'`; chomp($vara); | |
$vard = `$df | grep dev | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vard); | |
} | |
$varp = sprintf("%.2f", $vard / $vara * 100); | |
$vara = sprintf("%.2f", $vara); | |
$vard = sprintf("%.2f", $vard); | |
return $vard."GB/".$vara."GB ($varp%)"; | |
} | |
sub diskusageconsole { | |
$var = &diskusage; | |
$vara = $var; | |
$varp = $var; | |
$vara =~ s/(.+)\(.+%\)/$1/; | |
$varp =~ s/.+\((.+)%\)/$1/; | |
if($varp >= 90) { | |
$var = "$vara$crit($clear$varp\%$crit)$clear"; | |
} elsif($varp >= 75) { | |
$var = "$vara$warn($clear$varp\%$warn)$clear"; | |
} else { | |
$var = "$vara$misc($clear$varp\%$misc)$clear"; | |
} | |
} | |
sub users { | |
$var = `uptime`;chomp($var); | |
$var =~ s/^.* +(.*) user.*$/$1/; | |
return $var; | |
} | |
sub loadaverage { | |
$var = `uptime`; chomp($var); | |
if($irix || $irix64 || $linux) { | |
@arr = split(/average: /, $var, 2); | |
} else { | |
@arr = split(/averages: /, $var, 2); | |
} | |
if($d700 || $darwin) { | |
@arr = split(/ /, $arr[1], 2); | |
} else { | |
@arr = split(/, /, $arr[1], 2); | |
} | |
$var = $arr[0]; | |
return $var; | |
} | |
sub loadaverageconsole { | |
$var = &loadaverage; | |
if($var >= '1.00') { | |
$var = "$crit$var$clear"; | |
} elsif($var >= '0.85') { | |
$var = "$warn$var$clear"; | |
} | |
return $var; | |
} | |
sub meminfo { | |
my $string = shift; | |
foreach my $line (@meminfo) { | |
if ($line =~ /^\Q$string:/) { | |
$var = $line; | |
$var =~ s/\s+//gs; | |
$var =~ s/kB//gs; | |
$var =~ s/^\Q$string://gs; | |
return $var; | |
} | |
} | |
} | |
sub memoryusage { | |
if($linux) { | |
#if($l26) { | |
$vara = &meminfo("MemTotal") * 1024; | |
$varb = &meminfo("Buffers") * 1024; | |
$varc = &meminfo("Cached") * 1024; | |
$vard = &meminfo("MemFree") * 1024; | |
} elsif($darwin) { | |
$vard = `vm_stat | grep 'Pages active' | awk '{print \$3}'` * 4096; | |
$vara = `$sysctl -n hw.physmem`; | |
} elsif($irix || $irix64) { | |
$var = `top -d1 | grep Memory`; chomp($var); | |
$vara = $var; | |
$vard = $var; | |
$vara =~ s/^.* ([0-9]*)M max.*$/$1/; | |
$vara *= 1024 * 1024; | |
$vard =~ s/^.* ([0-9]*)M free,.*$/$1/; | |
$vard = $vara - ($vard * 1024 * 1024); | |
} else { | |
$vard = `vmstat -s | grep 'pages active' | awk '{print \$1}'` * `vmstat -s | grep 'per page' | awk '{print \$1}'`; | |
$vara = `$sysctl -n hw.physmem`; | |
} | |
$varp = sprintf("%.2f", $vard / $vara * 100); | |
$vara = sprintf("%.2f", $vara / 1024 / 1024); | |
$vard = sprintf("%.2f", $vard / 1024 / 1024); | |
return $vard."MB/".$vara."MB ($varp%)"; | |
} | |
sub memoryusageconsole { | |
$var = &memoryusage; | |
$vara = $var; | |
$varp = $var; | |
$vara =~ s/(.+)\(.+%\)/$1/; | |
$varp =~ s/.+\((.+)%\)/$1/; | |
if($varp >= 90) { | |
$var = "$vara$crit($clear$varp\%$crit)$clear"; | |
} elsif($varp >= 75) { | |
$var = "$vara$warn($clear$varp\%$warn)$clear"; | |
} else { | |
$var = "$vara$misc($clear$varp\%$misc)$clear"; | |
} | |
return $var; | |
} | |
sub networkinfobsd { | |
$varc = shift; | |
$vard = shift; | |
@arr = grep(/$varc/, @netstat); | |
@arr = grep(/Link/, @arr); | |
$var = join("\n", @arr); | |
@arr = split(/\s+/, $var); | |
$var = $arr[$vard] / 1024 / 1024; | |
$var = sprintf("%.2f", $var); | |
return $var; | |
} | |
sub networkinfolinux { | |
$varc = shift; | |
$vard = shift; | |
@arr = grep(/$varc/, @netdev); | |
$var = join("\n", @arr); | |
@arr = split(/:\s*/, $var); | |
@arr = split(/\s+/, $arr[1]); | |
$var = $arr[$vard] / 1024 / 1024; | |
$var = sprintf("%.2f", $var); | |
return $var; | |
} | |
sub networktraffic { | |
$vara = 0; | |
$varb = scalar @nic; | |
if($nic[$vara] ne "") { | |
while($vara lt $varb) { | |
if($nic[$vara] ne "") { | |
if($darwin || $freebsd) { | |
$varx = &networkinfobsd($nic[$vara], 6); | |
$vary = &networkinfobsd($nic[$vara], 9); | |
} | |
if($netbsd || $openbsd) { | |
$varx = &networkinfobsd($nic[$vara], 4); | |
$vary = &networkinfobsd($nic[$vara], 5); | |
} | |
if($linux) { | |
$varx = &networkinfolinux($nic[$vara], 0); | |
$vary = &networkinfolinux($nic[$vara], 8); | |
} | |
if ($vara ne 0) | |
{ | |
$varz .= $col2." - "; | |
} | |
$varz .= $col1.$nicname[$vara]." Traffic ".$col2."(".$col1.$nic[$vara].$col2."): ".$col1.$varx.$col1."MB In".$col2."/".$col1.$vary."MB Out "; | |
} | |
$vara++; | |
} | |
return $varz; | |
} | |
} | |
sub networktrafficconsole { | |
$var = &networktraffic; | |
@arr = split(/ - /, $var); | |
$varx = 0; | |
$vary = scalar @arr; | |
$varz = ''; | |
while($varx lt $vary) { | |
$vara = $arr[$varx]; | |
$varb = $arr[$varx]; | |
$varc = $arr[$varx]; | |
$vara =~ s/(.+) Traffic \(.+\): .+/$1/; | |
$varb =~ s/.+ Traffic \((.+)\): .+/$1/; | |
$varc =~ s/.+ Traffic \(.+\): (.+)/$1/; | |
$varc =~ s/(.+)\/(.+)/$1$misc\/$clear$2/; | |
$varz .= "$norm$vara Traffic $clear$misc($clear$varb$misc):$clear $varc\n"; | |
$varx++; | |
} | |
return $varz; | |
} | |
sub openfile { | |
my $string = shift; | |
$data = ""; | |
if(open(FD, $string)) { | |
while($stream = <FD>) { | |
$data .= $stream; | |
@data = split(/\n/, $data); | |
} | |
close(FD); | |
} | |
return @data; | |
} | |
sub processes { | |
if($irix || $irix64) { | |
$var = `ps -e | grep -v PID | wc -l`; | |
} else { | |
$var = `ps ax | grep -v PID | wc -l`; | |
} | |
chomp($var); | |
$var = $var; | |
$var =~ s/^\s+//; | |
$var =~ s/\s+$//; | |
return $var; | |
} | |
sub topcpuprocess { | |
if($irix || $irix64 || $linux) { | |
$var = `ps -eo pcpu,pid,user,args | grep -v '\%CPU' | sort | tail -n 1`; chomp($var); | |
$var =~ s/^\s*//g; | |
@arr = split(/\s+/, $var); | |
$vara = $arr[0]; | |
$varb = $arr[1]; | |
$varc = $arr[2]; | |
$vard = $arr[3]; | |
} else { | |
$var = `ps auxwwwr | head -n 2 | tail -n 1`; chomp($var); | |
@arr = split(/\s+/, $var); | |
$vara = $arr[2]; | |
$varb = $arr[1]; | |
$varc = $arr[0]; | |
$vard = $arr[10]; | |
} | |
if($vara >= 90) { | |
$var = "$vard $misc($clear$varb$misc/$clear$varc$misc)$clear = $crit$vara$clear%"; | |
} elsif($vara >= 75) { | |
$var = "$vard $misc($clear$varb$misc/$clear$varc$misc)$clear = $warn$vara$clear%"; | |
} else { | |
$var = "$vard $misc($clear$varb$misc/$clear$varc$misc)$clear = $vara%"; | |
} | |
} | |
sub uptime { | |
if($irix || $irix64) { | |
$var = `uptime`; chomp($var); | |
if($var =~ /day/) { | |
$var =~ s/^.* ([0-9]*) day.* ([0-9]*):([0-9]*), .*$/$1d $2h $3m/; | |
} elsif($var =~/min/) { | |
$var =~ s/^.* ([0-9]*) min.*$/0d 0h $1m/; | |
} else { | |
$var =~ s/^.* ([0-9]*):([0-9]*),.*$/0d $1h $2m/; | |
} | |
return $var; | |
} else { | |
if($freebsd) { | |
$var = `$sysctl -n kern.boottime | awk '{print \$4}'`; | |
} | |
if($netbsd || $openbsd || $darwin) { | |
$var = `$sysctl -n kern.boottime`; | |
} | |
if($linux) { | |
@arr = split(/ /, $uptime[0]); | |
$varx = $arr[0]; | |
} else { | |
chomp($var); | |
$var =~ s/,//g; | |
$vary = `date +%s`; chomp($vary); | |
$varx = $vary - $var; | |
} | |
$varx = sprintf("%2d", $varx); | |
$vard = floor($varx / 86400); | |
$varx %= 86400; | |
$varh = floor($varx / 3600); | |
$varx %= 3600; | |
$varm = floor($varx / 60); | |
if($vard eq 0) { $vard = ''; } elsif($vard >= 1) { $vard = $vard.'d '; } | |
if($varh eq 0) { $varh = ''; } elsif($varh >= 1) { $varh = $varh.'h '; } | |
if($varm eq 0) { $varm = ''; } elsif($varm >= 1) { $varm = $varm.'m'; } | |
return $vard.$varh.$varm; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment