Last active
May 8, 2024 22:59
-
-
Save jeffreyroberts/7908023 to your computer and use it in GitHub Desktop.
Eggdrop Sysinfo TCL
This file contains 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-2005 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. | |
# | |
# Several additions and fixes to this script were contributed by Travis | |
# Morgan and therefore are Copyright (c) 2003-2006 Travis Morgan | |
# | |
# If you notice any bugs including spacing issues, wrong detection of hardware, | |
# obvious features missing, etc, we both want to hear about them. If you make | |
# this script work on other operating systems and/or architectures please send | |
# either of us your patches. My e-mail address is [email protected] and | |
# Travis Morgan's e-mail address is [email protected] | |
# | |
# The latest version can be obtained from either http://www.inexistent.com/ or | |
# http://imbezol.org/sysinfo/ | |
# | |
# You can also reach Travis in #crd on efnet. | |
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 | |
$realdistro | |
$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 = '[0m'; | |
$col2 = '[33m'; | |
# These are the default settings for which information gets displayed. | |
# 0 = Off; 1 = On | |
my $useShortHostname = 1; | |
my $showHostname = 1; | |
my $showOS = 1; | |
my $showCPU = 1; | |
my $showProcesses = 1; | |
my $showUptime = 1; | |
my $showUsers = 1; | |
my $showLoadAverage = 1; | |
my $showBattery = 0; # Requires APM and /proc/apm or /proc/acpi/battery/ | |
my $showMemoryUsage = 1; | |
my $showDiskUsage = 1; | |
my $showNetworkTraffic = 0; | |
my $showDistro = 1; | |
############################################### | |
### Nothing below here should need changed. ### | |
############################################### | |
my $sysinfoVer = '2.81.21'; | |
my $sysinfoDate = 'Sep 7, 2012, 21:43 MDT'; | |
my $os = `uname -s`; chomp($os); | |
my $osn = `uname -n`; chomp($osn); | |
if($useShortHostname) { | |
$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 $dragonfly = 1 if $os =~ /^DragonFly$/; | |
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 $sun = 1 if $os =~ /^SunOS$/; | |
my $alpha = 1 if $osm =~ /^alpha$/; | |
my $arm = 1 if $osm =~ /^arm$/; | |
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 $parisc = 1 if $osm =~ /^parisc$/; | |
my $parisc64 = 1 if $osm =~ /^parisc64$/; | |
my $ppc = 1 if $osm =~ /^ppc$/; | |
my $ppc64 = 1 if $osm =~ /^ppc64$/; | |
my $s390 = 1 if $osm =~ /^s390$/; | |
my $s390x = 1 if $osm=~ /^s390x$/; | |
my $sh = 1 if $osm=~ /^sh/; | |
my $sparc = 1 if $osm =~ /^sparc$/; | |
my $sparc64 = 1 if $osm =~ /^sparc64$/; | |
my $x86_64 = 1 if $osm =~ /^x86_64$/; | |
my $d7 = 1 if $darwin && $osv =~ /^7\.\d+\.\d+/; | |
my $d8 = 1 if $darwin && $osv =~ /^8\.\d+\.\d+/; | |
my $d9 = 1 if $darwin && $osv =~ /^9\.\d+\.\d+/; | |
my $l26 = 1 if $linux && $osv =~ /^2\.6/; | |
my $l3 = 1 if $linux && $osv =~ /^2\.7/ || $osv =~ /^3\./; | |
my $f_old = 1 if $freebsd && $osv =~ /^4\.1-/ || $osv =~ /^4\.0-/ || $osv =~ /^3/ || $osv =~ /^2/; | |
my $progArgs = $ARGV[0]; | |
if($progArgs) { | |
if($progArgs eq '-v' || $progArgs eq '--version') { | |
print "SysInfo v$sysinfoVer $sysinfoDate\n"; | |
print "Written by David Rudie <d.rudie\@gmail.com> and Travis Morgan <imbezol\@criticaldamage.com>\n"; | |
exit -1; | |
} | |
} | |
if($linux) { | |
@cpuinfo = &openfile("/proc/cpuinfo"); | |
@meminfo = &openfile("/proc/meminfo"); | |
@netdev = &openfile("/proc/net/dev"); | |
@uptime = &openfile("/proc/uptime"); | |
$df = 'df -lkP'; | |
if($showDistro) { | |
@distros = ( | |
"Arch", "/etc/arch-release", | |
"Gentoo", "/etc/gentoo-release", | |
"Fedora Core", "/etc/fedora-release", | |
"SUSE", "/etc/SuSE-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", | |
"OpenFiler", "/etc/distro-release", | |
"Red Hat", "/etc/redhat-release" | |
); | |
$distro = ""; | |
$distrov = ""; | |
do { | |
if (-e $distros[1]) { | |
$distro = $distros[0]; | |
$distrov = `cat $distros[1] | head -n 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 ($distro eq "Debian") { | |
if (-e "/etc/lsb-release") { | |
$realdistro = `cat /etc/lsb-release | grep DISTRIB_DESCRIPTION`; | |
if ($realdistro ne "") { | |
chomp $realdistro; | |
$realdistro =~ s/DISTRIB_DESCRIPTION="//; | |
$realdistro =~ s/"$//; | |
$distro = $realdistro; | |
$distrov = $realdistro; | |
$distro =~ s/ [0-9.]+.*$//; | |
$distrov =~ s/$distro //; | |
} | |
} | |
} | |
if ($distro eq "Red Hat") { | |
$realdistro = `cat /etc/redhat-release`; | |
if ($realdistro =~ "^CentOS") { | |
$distro = "CentOS"; | |
} | |
} | |
if ($distro eq "SUSE") { | |
$realdistro = `cat /etc/SuSE-release`; | |
if ($realdistro =~ "^openSUSE") { | |
$distro = "openSUSE"; | |
} | |
elsif ($realdistro =~ "^SUSE Linux Enterprise Server") { | |
$distro = "SLES"; | |
} | |
elsif ($realdistro =~ "^SUSE Linux Enterprise Desktop") { | |
$distro = "SLED"; | |
} | |
} | |
} | |
} elsif($irix || $irix64) { | |
@hinv = `hinv`; | |
} else { | |
@dmesgboot = &openfile("/var/run/dmesg.boot"); | |
if($sun) { | |
@netstat = `netstat -in`; | |
} else { | |
@netstat = `netstat -ibn`; | |
} | |
if($darwin) { | |
$sysctl = '/usr/sbin/sysctl'; | |
} else { | |
$sysctl = '/sbin/sysctl'; | |
} | |
if($arm) { | |
$df = 'df -k'; | |
} elsif($f_old) { | |
$df = 'df -k'; | |
} else { | |
$df = 'df -lk'; | |
} | |
} | |
if($showCPU) { | |
if($freebsd || $dragonfly) { | |
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]; | |
$cpu =~ s/\s\d\.\d\dGHz//g; | |
$cpu =~ s/\s*[^\s]*-class CPU//gi; | |
$cpu =~ s/(\S*)-MHz/$1 MHz/gi; | |
$cpu =~ s/@\s+//; | |
chomp($cpu); | |
$smp = `$sysctl -n hw.ncpu`; | |
chomp($smp); | |
if ( $smp eq 1 ) { | |
$smp = ""; | |
} | |
} | |
} | |
if($netbsd) { | |
if($alpha) { | |
@cpu = grep(/^COMPAQ/, @dmesgboot); | |
$cpu = join("\n", $cpu[0]); | |
@cpu = split(/, /, $cpu); | |
$cpu = $cpu[0]; | |
} else { | |
@cpu = grep(/^v?cpu0.*MHz/, @dmesgboot); | |
@cpu = grep(!/apic/, @cpu); | |
@cpu = split(/: /,$cpu[0]); | |
$cpu = $cpu[1]; | |
$cpu =~ s/, id.*//; | |
$mhz = $cpu; | |
$mhz =~ s/.* ([.0-9]+) *MHz.*$/$1/; | |
$cpu =~ s/,.*//; | |
$cpu = "$cpu ($mhz MHz)"; | |
$smp = `$sysctl -n hw.ncpu`; | |
chomp($smp); | |
if ( $smp eq 1 ) { | |
$smp = ""; | |
} | |
} | |
} | |
if($openbsd) { | |
@cpu = grep(/cpu0: /, @dmesgboot); | |
@cpu = grep(/[M|G]Hz/, @cpu); | |
$cpu = join("\n", @cpu); | |
@cpu = split(/: /, $cpu); | |
$cpu = $cpu[1]; | |
$cpu =~ s/, / /; | |
$cpu =~ s/([0-9.]* [MG]Hz)$/($1)/; | |
$smp = `$sysctl -n hw.ncpu`; | |
chomp($smp); | |
if ( $smp eq 1 ) { | |
$smp = ""; | |
} | |
} | |
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+: "); | |
$model = "$model (" . &cpuinfo("system type") . ")"; | |
$mhz = &cpuinfo("cycle frequency \\[Hz\\]\\s+: "); | |
$mhz = ($mhz / 1000000); | |
$mhz = sprintf("%.2f", $mhz); | |
$cpu = "$cpu $model ($mhz MHz)"; | |
$smp = &cpuinfo("cpus detected\\s+: "); | |
} | |
if($arm) { | |
$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+: "); | |
$mhz =~ s/^\s*//g; | |
$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($parisc || $parisc64) { | |
$cpu = &cpuinfo("cpu\\s+: "); | |
$model = &cpuinfo("model name\\s+: "); | |
$mhz = &cpuinfo("cpu MHz\\s+: "); | |
$mhz = sprintf("%.2f", $mhz); | |
$cpu = "$model $cpu ($mhz MHz)"; | |
@smp = grep(/processor\s+: /, @cpuinfo); | |
$smp = scalar @smp; | |
} | |
if($ppc || $ppc64) { | |
$cpu = &cpuinfo("cpu\\s+: "); | |
$mhz = &cpuinfo("clock\\s+: "); | |
$mhz =~ s/^(\d+\.\d{3})\d*\s*MHz/$1 MHz/; | |
$cpu =~ s/, altivec supported//; | |
if($cpu =~ /^(PPC)*9.+/) { | |
$model = "IBM PowerPC G5"; | |
} elsif($cpu =~ /^74.+/) { | |
$model = "Motorola PowerPC G4"; | |
} else { | |
$model = "IBM PowerPC G3"; | |
} | |
$cpu = "$model $cpu ($mhz)"; | |
$smp = `/bin/grep -c -e '^processor\\s*:\\s*[0-9]\\+' /proc/cpuinfo`; chomp($smp); | |
} | |
if($s390 || $s390x) { | |
$cpu = &cpuinfo("vendor_id\\s+: "); | |
$smp = &cpuinfo("processors\\s+: "); | |
} | |
if($sh) { | |
$cpu = &cpuinfo("cpu family\\s+: "); | |
$model = &cpuinfo("cpu type\\s+: "); | |
$mhz = &cpuinfo("cpu_clk\\s+: "); | |
$cpu = "$cpu $model ($mhz MHz)"; | |
} | |
if($sparc || $sparc64) { | |
$cpu = &cpuinfo("cpu\\s+: "); | |
$model = &cpuinfo("type\\s+: "); | |
$cpu = "$model $cpu"; | |
$mhz = &cpuinfo("Cpu0ClkTck\\s+: "); | |
$mhz = (hex($mhz) / 1000000); | |
$cpu = "$cpu ($mhz MHz)"; | |
$smp = &cpuinfo("ncpus active\\s+: "); | |
} | |
} elsif($sun) { | |
my $osp = `uname -p`; chomp($osp); | |
if($osv =~ /^5\.11/ || ($osv =~ /^5\.10/ && $osp =~ "i386")) { | |
$cpu = `/usr/sbin/psrinfo -vp | tail -1`; chomp($cpu); | |
$mhz = `/usr/sbin/psrinfo -vp | grep MHz | awk '{ print "(" \$(NF-1) " " \$NF}' | tail -1`; chomp($mhz); | |
$cpu = "$cpu $mhz"; | |
$smp = `/usr/sbin/psrinfo -p`; chomp($smp); | |
$cpu =~ s/^\s*//; | |
} | |
if($osp =~ "sparc") { | |
$cpu = `/usr/platform/${osm}/sbin/prtdiag | head -1`; chomp($cpu); | |
$cpu =~ s/.*${osm} //; | |
$smp = `/usr/sbin/psrinfo | wc -l`; | |
} | |
} 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"; | |
} | |
if($cpu =~ /^ppc970/) { | |
$cpu = "Motorola PowerPC G5"; | |
} | |
if ($cpu =~ /^i486/) { | |
$cpu = `sysctl -n machdep.cpu.brand_string`; chomp($cpu); | |
} | |
$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); | |
} | |
if($smp && $smp gt 1) { | |
$cpu = "$smp x $cpu"; | |
} | |
$cpu =~ s/\s*@\s*\d*\.\d*\s*GHz//; | |
$cpu =~ s/^\s+//; | |
$cpu =~ s/\(R\)//gi; | |
$cpu =~ s/\(tm\)//gi; | |
$cpu =~ s/\([^(]*GenuineIntel[^)]*\)//; | |
$cpu =~ s/\s*processor//gi; | |
$cpu =~ s/\s*CPU//gi; | |
$cpu =~ s/ +/ /g; | |
} | |
sub batteryacpi { | |
my $data = ""; | |
my ($bfull, $bcur, @dirs, $dir); | |
if (opendir(DIR, '/proc/acpi/battery/')) { | |
@dirs = grep { !/^\./ } readdir (DIR); | |
closedir(DIR); | |
foreach $dir (@dirs) { | |
$bfull = ""; | |
$bcur = ""; | |
if(open(FD, '/proc/acpi/battery/'.$dir.'/info')) { | |
while (<FD>) { | |
if (/^last full capacity:\ +([0-9]+)/) { | |
$bfull = $1; | |
} | |
} | |
close(FD); | |
} | |
if(open(FD, '/proc/acpi/battery/'.$dir.'/state')) { | |
while (<FD>) { | |
if (/^remaining capacity:\ +([0-9]+)/) { | |
$bcur = $1; | |
} | |
} | |
close(FD); | |
} | |
if ($bfull ne "") { | |
if ($data ne "") { | |
$data = $data." "; | |
} | |
$data = $data.sprintf("%.0f",($bcur/$bfull*100)); | |
$data = $data."%"; | |
} | |
} | |
} | |
return $data; | |
} | |
sub battery { | |
$data = ""; | |
if ( -f '/proc/apm') { | |
if(open(FD, '/proc/apm')) { | |
while($stream = <FD>) { | |
$data .= $stream; | |
@data = split(/\n/, $data); | |
} | |
close(FD); | |
} | |
$data = $data[0]; | |
$data =~ s/.+\s(\d+%).+/$1/; | |
} elsif ( -d '/proc/acpi/battery') { | |
$data=&batteryacpi; | |
} | |
return $data; | |
} | |
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); | |
} elsif($sun) { | |
$vara = `$df | grep -v swap | grep -v libc | awk '{ sum+=\$2 / 1024 / 1024}; END { print sum }'`; chomp($vara); | |
$vard = `$df | grep -v swap | grep -v libc | awk '{ sum+=\$3 / 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); | |
} | |
if ($vara eq "" or $vara == 0 ) { | |
return "0GB/0GB (0%)"; | |
} else { | |
$varp = sprintf("%.2f", $vard / $vara * 100); | |
$vara = sprintf("%.2f", $vara); | |
$vard = sprintf("%.2f", $vard); | |
return $vard."GB/".$vara."GB ($varp%)"; | |
} | |
} | |
sub loadaverage { | |
$var = `uptime`; chomp($var); | |
@arr = split(/averages*: /, $var, 2); | |
if($darwin) { | |
@arr = split(/ +/, $arr[1], 2); | |
} else { | |
@arr = split(/, /, $arr[1], 2); | |
} | |
$var = $arr[0]; | |
return $var; | |
} | |
sub meminfo { | |
my $string = shift; | |
@arr = grep(/^$string/, @meminfo); | |
$var = join("\n", $arr[0]); | |
@arr = split(/\s+/, $var); | |
$var = $arr[1]; | |
return $var; | |
} | |
sub memoryusage { | |
if($linux) { | |
if(($l26)||($l3)) { | |
$vara = &meminfo("MemTotal:") * 1024; | |
$varb = &meminfo("Buffers:") * 1024; | |
$varc = &meminfo("Cached:") * 1024; | |
$vard = &meminfo("MemFree:") * 1024; | |
} else { | |
@arr = grep(/Mem:/, @meminfo); | |
$var = join("\n", @arr); | |
@arr = split(/\s+/, $var); | |
$vara = $arr[1]; | |
$varb = $arr[5]; | |
$varc = $arr[6]; | |
$vard = $arr[3]; | |
} | |
$vard = ($vara - $vard) - $varb - $varc; | |
} elsif($darwin) { | |
$vard = `vm_stat | grep 'Pages active' | awk '{print \$3}'` * 4096; | |
$vara = `$sysctl -n hw.memsize`; | |
} elsif($sun) { | |
$vara = `/usr/sbin/prtconf | grep "Mem" | awk '{print \$3}'` * 1024 * 1024; | |
$vard = `/bin/vmstat 1 2 | tail -1 | awk '{print \$5 * 1024}'`; | |
$vard = $vara - $vard | |
} 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); | |
} elsif($netbsd) { | |
$vard = `vmstat -t | tail -n 1 | awk '{print \$8}'`; | |
$vard = $vard * 4096; | |
$vara = `sysctl -n hw.physmem`; | |
} 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 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; | |
$varz = ""; | |
$varb = scalar @nic; | |
if($nic[$vara] ne "") { | |
while($vara lt $varb) { | |
if($nic[$vara] ne "") { | |
if ($varz eq "") { | |
$varz = $col2." - ".$col1; | |
} | |
if($darwin || $freebsd || $dragonfly) { | |
$varx = &networkinfobsd($nic[$vara], 6); | |
$vary = &networkinfobsd($nic[$vara], 9); | |
} | |
if($netbsd || $openbsd) { | |
$varx = &networkinfobsd($nic[$vara], 4); | |
$vary = &networkinfobsd($nic[$vara], 5); | |
} | |
if($sun) { | |
$varx = &networkinfobsd($nic[$vara], 4); | |
$vary = &networkinfobsd($nic[$vara], 6); | |
} | |
if($linux) { | |
$varx = &networkinfolinux($nic[$vara], 0); | |
$vary = &networkinfolinux($nic[$vara], 8); | |
} | |
$varz .= $nicname[$vara]." Traffic (".$nic[$vara].")".$col2.": ".$col1.$varx."MB In/".$vary."MB Out - "; | |
} | |
$vara++; | |
} | |
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 || $sun) { | |
$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 uptime { | |
if($irix || $irix64 || $d9 || $sun) { | |
$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 || $dragonfly) { | |
$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; | |
} | |
} | |
sub users { | |
$var = `uptime`; chomp($var); | |
$var =~ s/^.* +(.*) user.*$/$1/; | |
return $var; | |
} | |
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 .= &networktraffic; } | |
$output =~ s/ - $//g; | |
print "$output\n"; |
This file contains 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
# sysinfo.tcl v1.13 [14 December 2009] | |
# | |
# Latest version can be found from http://www.bluedevil.ca/eggdrop/ | |
# | |
# If you have any suggestions, questions or you want to report | |
# bugs, please feel free to send me an email to [email protected] | |
# | |
# This script shows the system information of the bot's machine. | |
# How much or how little of what the script shows can be changed by | |
# editing the sysinfo281.06.pl perl script included within. | |
# If your IRC network limits the character output and you're getting | |
# an incomplete output, remove some of the output options in the included | |
# perl file under: | |
# "These are the default settings for which information gets displayed." | |
# | |
# Thanks to David Rudie who's perl script does 99% of the work. | |
# Thanks also to imbezol for some modifications to the perl script and some help with tcl. | |
# The perl and bash scripts must both be chmodded executable for it to work, if they aren't | |
# already. | |
# | |
# Current MSG Commands: | |
# !sysinfo [option] | |
# | |
# Current Channel Commands: | |
# !sysinfo [option] | |
# | |
# Currently the only option is -p which will send sysinfo in a private message | |
# | |
# Tested on eggdrop 1.6.13+ with TCL 8.3.4+ | |
# | |
# Version history: | |
# v1.00 - The very first version! | |
# v1.01 - Added little cosmetic things. | |
# v1.03 - Changed sysinfo perl script to better support *BSD | |
# v1.04 - Added colour support to perl script | |
# v1.05 - Fixed the broken colour support | |
# v1.06 - Removed colour support, too many complaints that it was ugly | |
# Cleaned up some of the code, it was ugly. | |
# v1.07 - More cleanup, newer verion of sysinfo perl script | |
# should be more compatible with different OSes | |
# v1.08 - Linux Distro output added to perl script by imbezol | |
# v1.09 - More minor changes, nothing to write home about ;) | |
# v1.10 - sysinfo.pl update | |
# v1.11 - sysinfo.pl updated to sysinfo281.06.pl, put colours back in, included eof to decreease cases of channel spam. | |
# v1.12 - version by >-]~SkG~[--> | |
# v1.13 - updated to use sysinfo281.16.pl | |
# Settings ### | |
# [0/1] Enable Channel Command? (can the sysinfo be displayed in a channel?) | |
set sys_enablepublic 1 | |
# [0/1] Enable MSG Command? (can the sysinfo be private messaged?) | |
set sys_enablemsg 1 | |
# What command prefix do you want to use for channel commands? (example is !sysinfo) | |
set sys_cmdpfix "!" | |
# What users can use the sysinfo command? (use this! this script can get your bot flooded | |
# off of the network, add the S flag to users who can use the command) | |
set sys_flag "o" | |
# On what channels do you want to show the sysinfo? | |
# Note: Set this to "" to make the sysinfo command available on all channels. | |
set sys_chans "" | |
###### You don't need to edit below this ###### | |
# Misc Things | |
set sys_ver "1.13" | |
set sys_method "PRIVMSG" | |
# Bindings | |
# Channel Command | |
if {$sys_enablepublic} { | |
bind pub - ${sys_cmdpfix}sysinfo pub:sys_sysinfo | |
} | |
# MSG Command | |
if {$sys_enablemsg} { | |
bind msg - sysinfo msg:sys_sysinfo | |
} | |
# Channel Command | |
proc pub:sys_sysinfo {nick uhost hand chan arg} { | |
global sys_cmdpfix sys_flag sys_method sys_ver | |
set option [string tolower [lindex [split $arg] 0]] | |
if {[matchattr $hand $sys_flag]} { | |
if {($option != "") && ($option != "-p")} { | |
putserv "PRIVMSG $nick :sysinfo.tcl v$sys_ver commands:" | |
putserv "PRIVMSG $nick : ${sys_cmdpfix}sysinfo - Shows sysinfo in $chan." | |
putserv "PRIVMSG $nick : ${sys_cmdpfix}sysinfo -p - Shows sysinfo to you." | |
} else { | |
if {$option == ""} { | |
putserv "$sys_method $chan :[sys_dosysinfo]" | |
} elseif {$option == "-p"} { | |
putserv "$sys_method $nick :[sys_dosysinfo]" | |
} | |
} | |
} elseif {[matchattr $hand $sys_flag]} { | |
putserv "$sys_method $nick :[sys_dosysinfo]" | |
} | |
return 1 | |
} | |
# MSG Command | |
proc msg:sys_sysinfo {nick uhost hand arg} { | |
global sys_cmdpfix sys_flag sys_method sys_ver | |
set option [string tolower [lindex [split $arg] 0]] | |
if {[matchattr $hand $sys_flag]} { | |
if {($option != "")} { | |
putserv "PRIVMSG $nick :sysinfo.tcl v$sys_ver commands:" | |
putserv "PRIVMSG $nick : sysinfo - Shows sysinfo for you." | |
} else { | |
if {$option == ""} { | |
putserv "$sys_method $nick :[sys_dosysinfo]" | |
} | |
} | |
} elseif {[matchattr $hand $sys_flag]} { | |
putserv "$sys_method $nick :[sys_dosysinfo]" | |
} | |
return 1 | |
} | |
# Other Procs | |
proc sys_dosysinfo { } { | |
if {[catch { exec sysinfo } sysinfo]} { set sysinfo "Perl script is not executable or doesn't exist." } | |
return "$sysinfo" | |
} | |
# End | |
putlog "TCL loaded: sysinfo.tcl v$sys_ver by burn <[email protected]>" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment