diff options
Diffstat (limited to '')
-rw-r--r-- | scripts/sysinfo277-irssi.pl | 546 |
1 files changed, 546 insertions, 0 deletions
diff --git a/scripts/sysinfo277-irssi.pl b/scripts/sysinfo277-irssi.pl new file mode 100644 index 0000000..ae8c3e4 --- /dev/null +++ b/scripts/sysinfo277-irssi.pl @@ -0,0 +1,546 @@ +#!/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. +# +# $ident: sysinfo277-irssi.pl,v 2.77 2003/09/01 04:20:02 drudie Exp $ +# + +use strict; +use vars qw($VERSION %IRSSI); +$VERSION = '2.79'; +%IRSSI = ( + authors => 'David Rudie', + contact => 'david@inexistent.com', + name => 'SysInfo', + description => 'Cross-platform/architecture system information script.', + license => 'BSD', + url => 'http://www.inexistent.com/', + changed => '2019-11-08', + bugs => 'Probably some if it cannot read /proc.' +); + + +use Irssi; +use POSIX qw(floor); + + +# Set up the arrays and variables first. +use vars qw( + @arr + @arr1 + @arr2 + $cpu + @cpu + @cpuinfo + $data + @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 +); + + +my $os = `uname -s`; chop($os); +my $osn = `uname -n`; chop($osn); +my $osv = `uname -r`; chop($osv); +my $osm = `uname -m`; chop($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 $armv7l = 1 if $osm =~ /^armv7l$/; +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$/; + + +# linux => 2.6 +$osv =~ m/^(\d+\.\d+)/; +my $l26 = 1 if 2.6 <=$1; + + +sub cmd_sysinfo { + # 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 = split(/;/, Irssi::settings_get_str('sysinfo_nics')); + @nicname = split(/;/, Irssi::settings_get_str('sysinfo_nicnames')); + + + # These are the default settings for which information gets displayed. + # 0 = Off; 1 = On + my $showHostname = 1; + my $showOS = 1; + my $showCPU = 1; + my $showProcesses = 1; + my $showUptime = 1; + my $showLoadAverage = 1; + my $showBattery = 0; + my $showMemoryUsage = 1; + my $showDiskUsage = 1; + my $showNetworkTraffic= 1; + + + ############################################### + ### Nothing below here should need changed. ### + ############################################### + + + 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 || $armv7l) { + $df = 'df -k'; + } else { + $df = 'df -lk'; + } + + + 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 = split(/: /, $cpu); + $cpu = $cpu[1]; + @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 = scalar @smp; + chop($cpu); + chop($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($armv7l) { + $cpu = &cpuinfo("model name\\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)"; + } + } 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); + } + if($smp && $smp gt 1) { + $cpu = "$smp x $cpu"; + } + } + + + my $output; + if($showHostname) { $output = "Hostname: $osn - "; } + if($showOS) { $output .= "OS: $uname - "; } + if($showCPU) { $output .= "CPU: $cpu - "; } + if($showProcesses) { $output .= "Processes: ".&processes." - "; } + if($showUptime) { $output .= "Uptime: ".&uptime." - "; } + if($showLoadAverage) { $output .= "Load Average: ".&loadaverage." - "; } + if($showBattery) { $output .= "Battery: ".&battery." - "; } + if($showMemoryUsage) { $output .= "Memory Usage: ".&memoryusage." - "; } + if($showDiskUsage) { $output .= "Disk Usage: ".&diskusage." - "; } + if($showNetworkTraffic) { $output .= &networktraffic; } + $output =~ s/ - $//g; + Irssi::active_win()->command("/ $output"); + return 1; +} + + +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 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 -v Filesystem | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vara); + $vard = `$df | grep -v Filesystem | awk '{ sum+=\$4 / 1024 / 1024}; END { print sum }'`; chomp($vard); + } else { + $vara = `$df | grep -v Filesystem | awk '{ sum+=\$2 / 1024 / 1024}; END { print sum }'`; chomp($vara); + $vard = `$df | grep -v Filesystem | 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 loadaverage { + $var = `uptime`; chomp($var); + if($irix || $irix64 || $linux) { + @arr = split(/average: /, $var, 2); + } else { + @arr = split(/averages: /, $var, 2); + } + @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) { + $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.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 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($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); + } + $varz .= $nicname[$vara]." Traffic (".$nic[$vara]."): ".$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) { + $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) { + $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; + } +} + +Irssi::settings_add_str("sysinfo", "sysinfo_nics", ""); +Irssi::settings_add_str("sysinfo", "sysinfo_nicnames", ""); + +Irssi::command_bind("sysinfo", "cmd_sysinfo"); |