BSDG33KCLUB

sysinfo277-irssi.pl

Aug 26th, 2013
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.72 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2. #
  3. # Copyright (c) 2002, 2003 David Rudie
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms, with or without
  7. # modification, are permitted provided that the following conditions
  8. # are met:
  9. # 1. Redistributions of source code must retain the above copyright
  10. # notice, this list of conditions and the following disclaimer.
  11. # 2. Redistributions in binary form must reproduce the above copyright
  12. # notice, this list of conditions and the following disclaimer in the
  13. # documentation and/or other materials provided with the distribution.
  14. #
  15. # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  16. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  19. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  20. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  21. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  23. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  24. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  25. # SUCH DAMAGE.
  26. #
  27. # $ident: sysinfo277-irssi.pl,v 2.77 2003/09/01 04:20:02 drudie Exp $
  28. #
  29.  
  30.  
  31. $VERSION = '2.77';
  32. %IRSSI = (
  33. authors => 'David Rudie',
  34. contact => '[email protected]',
  35. name => 'SysInfo',
  36. description => 'Cross-platform/architecture system information script.',
  37. license => 'BSD',
  38. url => 'http://www.inexistent.com/',
  39. changed => 'Mon Sep 01 04:20 PDT 2003',
  40. bugs => 'Probably some if it cannot read /proc.'
  41. );
  42.  
  43.  
  44. use Irssi;
  45. use POSIX qw(floor);
  46. use strict;
  47.  
  48.  
  49. # Set up the arrays and variables first.
  50. use vars qw(
  51. @arr
  52. @arr1
  53. @arr2
  54. $cpu
  55. @cpu
  56. @cpuinfo
  57. $data
  58. @data
  59. $df
  60. @dmesgboot
  61. @hinv
  62. @meminfo
  63. $mhz
  64. @mhz
  65. $model
  66. @netdev
  67. @netstat
  68. @nic
  69. @nicname
  70. $smp
  71. @smp
  72. $stream
  73. $sysctl
  74. @uptime
  75. $var
  76. $vara
  77. $varb
  78. $varc
  79. $vard
  80. $varh
  81. $varm
  82. $varp
  83. $varx
  84. $vary
  85. $varz
  86. );
  87.  
  88.  
  89. my $os = `uname -s`; chop($os);
  90. my $osn = `uname -n`; chop($osn);
  91. my $osv = `uname -r`; chop($osv);
  92. my $osm = `uname -m`; chop($osm);
  93. my $uname = "$os $osv/$osm";
  94.  
  95.  
  96. my $darwin = 1 if $os =~ /^Darwin$/;
  97. my $freebsd = 1 if $os =~ /^FreeBSD$/;
  98. my $linux = 1 if $os =~ /^Linux$/;
  99. my $netbsd = 1 if $os =~ /^NetBSD$/;
  100. my $openbsd = 1 if $os =~ /^OpenBSD$/;
  101. my $irix = 1 if $os =~ /^IRIX$/;
  102. my $irix64 = 1 if $os =~ /^IRIX64$/;
  103.  
  104.  
  105. my $alpha = 1 if $osm =~ /^alpha$/;
  106. my $armv4l = 1 if $osm =~ /^armv4l$/;
  107. my $armv5l = 1 if $osm =~ /^armv5l$/;
  108. my $i586 = 1 if $osm =~ /^i586$/;
  109. my $i686 = 1 if $osm =~ /^i686$/;
  110. my $ia64 = 1 if $osm =~ /^ia64$/;
  111. my $mips = 1 if $osm =~ /^mips$/;
  112. my $parisc64 = 1 if $osm =~ /^parisc64$/;
  113. my $ppc = 1 if $osm =~ /^ppc$/;
  114. my $x86_64 = 1 if $osm =~ /^x86_64$/;
  115.  
  116.  
  117. my $l26 = 1 if $osv =~ /^2\.6/;
  118.  
  119.  
  120. sub cmd_sysinfo {
  121. # Specify your NIC interface name (eth0, rl0, fxp0, etc) and a name for it.
  122. #
  123. # Example: @nic = ('eth0', 'eth1');
  124. # @nicname = ('External', 'Internal');
  125. #
  126. # NOTE: If you set one then you HAVE to set the other.
  127. @nic = split(/;/, Irssi::settings_get_str('sysinfo_nics'));
  128. @nicname = split(/;/, Irssi::settings_get_str('sysinfo_nicnames'));
  129.  
  130.  
  131. # These are the default settings for which information gets displayed.
  132. # 0 = Off; 1 = On
  133. my $showHostname = 1;
  134. my $showOS = 1;
  135. my $showCPU = 1;
  136. my $showProcesses = 1;
  137. my $showUptime = 1;
  138. my $showLoadAverage = 1;
  139. my $showBattery = 0;
  140. my $showMemoryUsage = 1;
  141. my $showDiskUsage = 1;
  142. my $showNetworkTraffic= 1;
  143.  
  144.  
  145. ###############################################
  146. ### Nothing below here should need changed. ###
  147. ###############################################
  148.  
  149.  
  150. if($linux) {
  151. @cpuinfo = &openfile("/proc/cpuinfo");
  152. @meminfo = &openfile("/proc/meminfo");
  153. @netdev = &openfile("/proc/net/dev");
  154. @uptime = &openfile("/proc/uptime");
  155. } elsif($irix || $irix64) {
  156. @hinv = `hinv`;
  157. } else {
  158. @dmesgboot = &openfile("/var/run/dmesg.boot");
  159. @netstat = `netstat -ibn`;
  160. if($darwin) {
  161. $sysctl = '/usr/sbin/sysctl';
  162. } else {
  163. $sysctl = '/sbin/sysctl';
  164. }
  165. }
  166.  
  167.  
  168. if($armv4l || $armv5l) {
  169. $df = 'df -k';
  170. } else {
  171. $df = 'df -lk';
  172. }
  173.  
  174.  
  175. if($showCPU) {
  176. if($freebsd) {
  177. if($alpha) {
  178. @cpu = grep(/^COMPAQ/, @dmesgboot);
  179. $cpu = join("\n", $cpu[0]);
  180. } else {
  181. @cpu = grep(/CPU: /, @dmesgboot);
  182. $cpu = join("\n", @cpu);
  183. @cpu = split(/: /, $cpu);
  184. $cpu = $cpu[1];
  185. @smp = grep(/ cpu/, @dmesgboot);
  186. $smp = scalar @smp;
  187. }
  188. }
  189. if($netbsd) {
  190. if($alpha) {
  191. @cpu = grep(/^COMPAQ/, @dmesgboot);
  192. $cpu = join("\n", $cpu[0]);
  193. @cpu = split(/, /, $cpu);
  194. $cpu = $cpu[0];
  195. } else {
  196. @cpu = grep(/cpu0: /, @dmesgboot);
  197. @cpu = grep(!/apic/, @cpu);
  198. $cpu = join("\n", $cpu[0]);
  199. @cpu = split(/: /, $cpu);
  200. $cpu = $cpu[1];
  201. @smp = grep(/cpu\d+:/, @dmesgboot);
  202. @smp = grep(/MHz/, @smp);
  203. $smp = scalar @smp;
  204. }
  205. }
  206. if($openbsd) {
  207. @cpu = grep(/cpu0: /, @dmesgboot);
  208. @cpu = grep(/[M|G]Hz/, @cpu);
  209. $cpu = join("\n", @cpu);
  210. @cpu = split(/: /, $cpu);
  211. $cpu = $cpu[1];
  212. }
  213. if($irix || $irix64) {
  214. @cpu = grep(/CPU:/, @hinv);
  215. $cpu = join("\n", @cpu);
  216. $cpu =~ s/^.*(R[0-9]*) .*$/$1/;
  217. @mhz = grep(/MHZ/, @hinv);
  218. $mhz = join("\n", @mhz);
  219. $mhz = $mhz[0];
  220. $mhz =~ s/^.* ([0-9]*) MHZ.*$/$1/;
  221. @smp = grep(/ IP/, @hinv);
  222. $smp = scalar @smp;
  223. chop($cpu);
  224. chop($mhz);
  225. $cpu = "MIPS $cpu ($mhz MHz)";
  226. }
  227. if($linux) {
  228. if($alpha) {
  229. $cpu = &cpuinfo("cpu\\s+: ");
  230. $model = &cpuinfo("cpu model\\s+: ");
  231. $cpu = "$cpu $model";
  232. $smp = &cpuinfo("cpus detected\\s+: ");
  233. }
  234. if($armv4l || $armv5l) {
  235. $cpu = &cpuinfo("Processor\\s+: ");
  236. }
  237. if($i686 || $i586 || $x86_64) {
  238. $cpu = &cpuinfo("model name\\s+: ");
  239. $cpu =~ s/(.+) CPU family\t+\d+MHz/$1/g;
  240. $cpu =~ s/(.+) CPU .+GHz/$1/g;
  241. $mhz = &cpuinfo("cpu MHz\\s+: ");
  242. $cpu = "$cpu ($mhz MHz)";
  243. @smp = grep(/processor\s+: /, @cpuinfo);
  244. $smp = scalar @smp;
  245. }
  246. if($ia64) {
  247. $cpu = &cpuinfo("vendor\\s+: ");
  248. $model = &cpuinfo("family\\s+: ");
  249. $mhz = &cpuinfo("cpu MHz\\s+: ");
  250. $mhz = sprintf("%.2f", $mhz);
  251. $cpu = "$cpu $model ($mhz MHz)";
  252. @smp = grep(/processor\s+: /, @cpuinfo);
  253. $smp = scalar @smp;
  254. }
  255. if($mips) {
  256. $cpu = &cpuinfo("cpu\\s+: ");
  257. $model = &cpuinfo("cpu model\\s+: ");
  258. $cpu = "$cpu $model";
  259. }
  260. if($parisc64) {
  261. $cpu = &cpuinfo("cpu\\s+: ");
  262. $model = &cpuinfo("model name\\s+: ");
  263. $mhz = &cpuinfo("cpu MHz\\s+: ");
  264. $mhz = sprintf("%.2f", $mhz);
  265. $cpu = "$model $cpu ($mhz MHz)";
  266. }
  267. if($ppc) {
  268. $cpu = &cpuinfo("cpu\\s+: ");
  269. $mhz = &cpuinfo("clock\\s+: ");
  270. if($cpu =~ /^9.+/) {
  271. $model = "IBM PowerPC G5";
  272. } elsif($cpu =~ /^74.+/) {
  273. $model = "Motorola PowerPC G4";
  274. } else {
  275. $model = "IBM PowerPC G3";
  276. }
  277. $cpu = "$model $cpu ($mhz)";
  278. }
  279. } elsif($darwin) {
  280. $cpu = `hostinfo | grep 'Processor type' | cut -f2 -d':'`; chomp($cpu);
  281. $cpu =~ s/^\s*(.+)\s*$/$1/g;
  282. if($cpu =~ /^ppc7.+/) {
  283. $cpu = "Motorola PowerPC G4";
  284. }
  285. $mhz = `$sysctl -n hw.cpufrequency`; chomp($mhz);
  286. $mhz = sprintf("%.2f", $mhz / 1000000);
  287. $cpu = "$cpu ($mhz MHz)";
  288. $smp = `hostinfo | grep "physically available" | cut -f1 -d' '`; chomp($smp);
  289. }
  290. if($smp && $smp gt 1) {
  291. $cpu = "$smp x $cpu";
  292. }
  293. }
  294.  
  295.  
  296. my $output;
  297. if($showHostname) { $output = "Hostname: $osn - "; }
  298. if($showOS) { $output .= "OS: $uname - "; }
  299. if($showCPU) { $output .= "CPU: $cpu - "; }
  300. if($showProcesses) { $output .= "Processes: ".&processes." - "; }
  301. if($showUptime) { $output .= "Uptime: ".&uptime." - "; }
  302. if($showLoadAverage) { $output .= "Load Average: ".&loadaverage." - "; }
  303. if($showBattery) { $output .= "Battery: ".&battery." - "; }
  304. if($showMemoryUsage) { $output .= "Memory Usage: ".&memoryusage." - "; }
  305. if($showDiskUsage) { $output .= "Disk Usage: ".&diskusage." - "; }
  306. if($showNetworkTraffic) { $output .= &networktraffic; }
  307. $output =~ s/ - $//g;
  308. Irssi::active_win()->command("/ $output");
  309. return 1;
  310. }
  311.  
  312.  
  313. sub battery {
  314. $data = "";
  315. if(open(FD, '/proc/apm')) {
  316. while($stream = <FD>) {
  317. $data .= $stream;
  318. @data = split(/\n/, $data);
  319. }
  320. close(FD);
  321. }
  322. $data = $data[0];
  323. $data =~ s/.+\s(\d+%).+/$1/;
  324. return $data;
  325. }
  326.  
  327.  
  328. sub cpuinfo {
  329. my $string = shift;
  330. @arr = grep(/$string/, @cpuinfo);
  331. $var = join("\n", $arr[0]);
  332. @arr = split(/: /, $var);
  333. $var = $arr[1];
  334. return $var;
  335. }
  336.  
  337.  
  338. sub diskusage {
  339. if($irix || $irix64) {
  340. $vara = `$df | grep -v Filesystem | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vara);
  341. $vard = `$df | grep -v Filesystem | awk '{ sum+=\$4 / 1024 / 1024}; END { print sum }'`; chomp($vard);
  342. } else {
  343. $vara = `$df | grep -v Filesystem | awk '{ sum+=\$2 / 1024 / 1024}; END { print sum }'`; chomp($vara);
  344. $vard = `$df | grep -v Filesystem | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vard);
  345. }
  346. $varp = sprintf("%.2f", $vard / $vara * 100);
  347. $vara = sprintf("%.2f", $vara);
  348. $vard = sprintf("%.2f", $vard);
  349. return $vard."GB/".$vara."GB ($varp%)";
  350. }
  351.  
  352.  
  353. sub loadaverage {
  354. $var = `uptime`; chomp($var);
  355. if($irix || $irix64 || $linux) {
  356. @arr = split(/average: /, $var, 2);
  357. } else {
  358. @arr = split(/averages: /, $var, 2);
  359. }
  360. @arr = split(/, /, $arr[1], 2);
  361. $var = $arr[0];
  362. return $var;
  363. }
  364.  
  365.  
  366. sub meminfo {
  367. my $string = shift;
  368. @arr = grep(/$string/, @meminfo);
  369. $var = join("\n", $arr[0]);
  370. @arr = split(/\s+/, $var);
  371. $var = $arr[1];
  372. return $var;
  373. }
  374.  
  375.  
  376. sub memoryusage {
  377. if($linux) {
  378. if($l26) {
  379. $vara = &meminfo("MemTotal:") * 1024;
  380. $varb = &meminfo("Buffers:") * 1024;
  381. $varc = &meminfo("Cached:") * 1024;
  382. $vard = &meminfo("MemFree:") * 1024;
  383. } else {
  384. @arr = grep(/Mem:/, @meminfo);
  385. $var = join("\n", @arr);
  386. @arr = split(/\s+/, $var);
  387. $vara = $arr[1];
  388. $varb = $arr[5];
  389. $varc = $arr[6];
  390. $vard = $arr[3];
  391. }
  392. $vard = ($vara - $vard) - $varb - $varc;
  393. } elsif($darwin) {
  394. $vard = `vm_stat | grep 'Pages active' | awk '{print \$3}'` * 4096;
  395. $vara = `$sysctl -n hw.physmem`;
  396. } elsif($irix || $irix64) {
  397. $var = `top -d1 | grep Memory`; chomp($var);
  398. $vara = $var;
  399. $vard = $var;
  400. $vara =~ s/^.* ([0-9]*)M max.*$/$1/;
  401. $vara *= 1024 * 1024;
  402. $vard =~ s/^.* ([0-9]*)M free,.*$/$1/;
  403. $vard = $vara - ($vard * 1024 * 1024);
  404. } else {
  405. $vard = `vmstat -s | grep 'pages active' | awk '{print \$1}'` * `vmstat -s | grep 'per page' | awk '{print \$1}'`;
  406. $vara = `$sysctl -n hw.physmem`;
  407. }
  408. $varp = sprintf("%.2f", $vard / $vara * 100);
  409. $vara = sprintf("%.2f", $vara / 1024 / 1024);
  410. $vard = sprintf("%.2f", $vard / 1024 / 1024);
  411. return $vard."MB/".$vara."MB ($varp%)";
  412. }
  413.  
  414.  
  415. sub networkinfobsd {
  416. $varc = shift;
  417. $vard = shift;
  418. @arr = grep(/$varc/, @netstat);
  419. @arr = grep(/Link/, @arr);
  420. $var = join("\n", @arr);
  421. @arr = split(/\s+/, $var);
  422. $var = $arr[$vard] / 1024 / 1024;
  423. $var = sprintf("%.2f", $var);
  424. return $var;
  425. }
  426.  
  427.  
  428. sub networkinfolinux {
  429. $varc = shift;
  430. $vard = shift;
  431. @arr = grep(/$varc/, @netdev);
  432. $var = join("\n", @arr);
  433. @arr = split(/:\s*/, $var);
  434. @arr = split(/\s+/, $arr[1]);
  435. $var = $arr[$vard] / 1024 / 1024;
  436. $var = sprintf("%.2f", $var);
  437. return $var;
  438. }
  439.  
  440.  
  441. sub networktraffic {
  442. $vara = 0;
  443. $varz = "";
  444. $varb = scalar @nic;
  445. if($nic[$vara] ne "") {
  446. while($vara lt $varb) {
  447. if($nic[$vara] ne "") {
  448. if($darwin || $freebsd) {
  449. $varx = &networkinfobsd($nic[$vara], 6);
  450. $vary = &networkinfobsd($nic[$vara], 9);
  451. }
  452. if($netbsd || $openbsd) {
  453. $varx = &networkinfobsd($nic[$vara], 4);
  454. $vary = &networkinfobsd($nic[$vara], 5);
  455. }
  456. if($linux) {
  457. $varx = &networkinfolinux($nic[$vara], 0);
  458. $vary = &networkinfolinux($nic[$vara], 8);
  459. }
  460. $varz .= $nicname[$vara]." Traffic (".$nic[$vara]."): ".$varx."MB In/".$vary."MB Out - ";
  461. }
  462. $vara++;
  463. }
  464. return $varz;
  465. }
  466. }
  467.  
  468.  
  469. sub openfile {
  470. my $string = shift;
  471. $data = "";
  472. if(open(FD, $string)) {
  473. while($stream = <FD>) {
  474. $data .= $stream;
  475. @data = split(/\n/, $data);
  476. }
  477. close(FD);
  478. }
  479. return @data;
  480. }
  481.  
  482.  
  483. sub processes {
  484. if($irix || $irix64) {
  485. $var = `ps -e | grep -v PID | wc -l`;
  486. } else {
  487. $var = `ps ax | grep -v PID | wc -l`;
  488. }
  489. chomp($var);
  490. $var = $var;
  491. $var =~ s/^\s+//;
  492. $var =~ s/\s+$//;
  493. return $var;
  494. }
  495.  
  496.  
  497. sub uptime {
  498. if($irix || $irix64) {
  499. $var = `uptime`; chomp($var);
  500. if($var =~ /day/) {
  501. $var =~ s/^.* ([0-9]*) day.* ([0-9]*):([0-9]*), .*$/$1d $2h $3m/;
  502. } elsif($var =~/min/) {
  503. $var =~ s/^.* ([0-9]*) min.*$/0d 0h $1m/;
  504. } else {
  505. $var =~ s/^.* ([0-9]*):([0-9]*),.*$/0d $1h $2m/;
  506. }
  507. return $var;
  508. } else {
  509. if($freebsd) {
  510. $var = `$sysctl -n kern.boottime | awk '{print \$4}'`;
  511. }
  512. if($netbsd || $openbsd || $darwin) {
  513. $var = `$sysctl -n kern.boottime`;
  514. }
  515. if($linux) {
  516. @arr = split(/ /, $uptime[0]);
  517. $varx = $arr[0];
  518. } else {
  519. chomp($var);
  520. $var =~ s/,//g;
  521. $vary = `date +%s`; chomp($vary);
  522. $varx = $vary - $var;
  523. }
  524. $varx = sprintf("%2d", $varx);
  525. $vard = floor($varx / 86400);
  526. $varx %= 86400;
  527. $varh = floor($varx / 3600);
  528. $varx %= 3600;
  529. $varm = floor($varx / 60);
  530. if($vard eq 0) { $vard = ''; } elsif($vard >= 1) { $vard = $vard.'d '; }
  531. if($varh eq 0) { $varh = ''; } elsif($varh >= 1) { $varh = $varh.'h '; }
  532. if($varm eq 0) { $varm = ''; } elsif($varm >= 1) { $varm = $varm.'m'; }
  533. return $vard.$varh.$varm;
  534. }
  535. }
  536.  
  537. Irssi::settings_add_str("sysinfo", "sysinfo_nics", "");
  538. Irssi::settings_add_str("sysinfo", "sysinfo_nicnames", "");
  539.  
  540. Irssi::command_bind("sysinfo", "cmd_sysinfo");
Advertisement
Add Comment
Please, Sign In to add comment