BSDG33KCLUB

sysinfo.pl

Feb 3rd, 2014
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.20 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2. #
  3. # Copyright (c) 2002-2005 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. # Several additions and fixes to this script were contributed by Travis
  28. # Morgan and therefore are Copyright (c) 2003-2006 Travis Morgan
  29. #
  30. # If you notice any bugs including spacing issues, wrong detection of hardware,
  31. # obvious features missing, etc, we both want to hear about them. If you make
  32. # this script work on other operating systems and/or architectures please send
  33. # either of us your patches. My e-mail address is [email protected] and
  34. # Travis Morgan's e-mail address is [email protected]
  35. #
  36. # The latest version can be obtained from either http://www.inexistent.com/ or
  37. # http://imbezol.org/sysinfo/
  38. #
  39. # You can also reach Travis in #crd on efnet.
  40.  
  41. use POSIX qw(floor);
  42. use strict;
  43.  
  44.  
  45. # Set up the arrays and variables first.
  46. use vars qw(
  47. @arr
  48. @arr1
  49. @arr2
  50. $cpu
  51. @cpu
  52. @cpuinfo
  53. $data
  54. $distro
  55. $distrov
  56. @distros
  57. @data
  58. $df
  59. @dmesgboot
  60. @hinv
  61. @meminfo
  62. $mhz
  63. @mhz
  64. $model
  65. @netdev
  66. @netstat
  67. @nic
  68. @nicname
  69. $realdistro
  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. $col1
  87. $col2
  88. );
  89.  
  90.  
  91. # Specify your NIC interface name (eth0, rl0, fxp0, etc) and a name for it.
  92. #
  93. # Example: @nic = ('eth0', 'eth1');
  94. # @nicname = ('External', 'Internal');
  95. #
  96. # NOTE: If you set one then you HAVE to set the other.
  97. @nic = ('');
  98. @nicname = ('');
  99.  
  100. #$col1 = '';
  101. #$col2 = '';
  102.  
  103. # These are the default settings for which information gets displayed.
  104. # 0 = Off; 1 = On
  105. my $useShortHostname = 1;
  106.  
  107. my $showHostname = 1;
  108. my $showOS = 1;
  109. my $showCPU = 1;
  110. my $showProcesses = 1;
  111. my $showUptime = 1;
  112. my $showUsers = 1;
  113. my $showLoadAverage = 1;
  114. my $showBattery = 0; # Requires APM and /proc/apm or /proc/acpi/battery/
  115. my $showMemoryUsage = 1;
  116. my $showDiskUsage = 1;
  117. my $showNetworkTraffic = 0;
  118. my $showDistro = 1;
  119.  
  120. ###############################################
  121. ### Nothing below here should need changed. ###
  122. ###############################################
  123.  
  124. my $sysinfoVer = '2.81.19';
  125. my $sysinfoDate = 'Dec 13, 2011, 08:56 MDT';
  126.  
  127. my $os = `uname -s`; chomp($os);
  128. my $osn = `uname -n`; chomp($osn);
  129. if($useShortHostname) {
  130. $osn =~ s/([^\.]*).*/$1/;
  131. }
  132. my $osv = `uname -r`; chomp($osv);
  133. my $osm = `uname -m`; chomp($osm);
  134. my $uname = "$os $osv/$osm";
  135.  
  136. my $darwin = 1 if $os =~ /^Darwin$/;
  137. my $freebsd = 1 if $os =~ /^FreeBSD$/;
  138. my $dragonfly = 1 if $os =~ /^DragonFly$/;
  139. my $linux = 1 if $os =~ /^Linux$/;
  140. my $netbsd = 1 if $os =~ /^NetBSD$/;
  141. my $openbsd = 1 if $os =~ /^OpenBSD$/;
  142. my $irix = 1 if $os =~ /^IRIX$/;
  143. my $irix64 = 1 if $os =~ /^IRIX64$/;
  144. my $sun = 1 if $os =~ /^SunOS$/;
  145.  
  146.  
  147. my $alpha = 1 if $osm =~ /^alpha$/;
  148. my $arm = 1 if $osm =~ /^arm$/;
  149. my $i586 = 1 if $osm =~ /^i586$/;
  150. my $i686 = 1 if $osm =~ /^i686$/;
  151. my $ia64 = 1 if $osm =~ /^ia64$/;
  152. my $mips = 1 if $osm =~ /^mips$/;
  153. my $parisc = 1 if $osm =~ /^parisc$/;
  154. my $parisc64 = 1 if $osm =~ /^parisc64$/;
  155. my $ppc = 1 if $osm =~ /^ppc$/;
  156. my $ppc64 = 1 if $osm =~ /^ppc64$/;
  157. my $s390 = 1 if $osm =~ /^s390$/;
  158. my $s390x = 1 if $osm=~ /^s390x$/;
  159. my $sh = 1 if $osm=~ /^sh/;
  160. my $sparc = 1 if $osm =~ /^sparc$/;
  161. my $sparc64 = 1 if $osm =~ /^sparc64$/;
  162. my $x86_64 = 1 if $osm =~ /^x86_64$/;
  163.  
  164.  
  165. my $d7 = 1 if $darwin && $osv =~ /^7\.\d+\.\d+/;
  166. my $d8 = 1 if $darwin && $osv =~ /^8\.\d+\.\d+/;
  167. my $d9 = 1 if $darwin && $osv =~ /^9\.\d+\.\d+/;
  168. my $l26 = 1 if $linux && $osv =~ /^2\.6/;
  169. my $l3 = 1 if $linux && $osv =~ /^2\.7/ || $osv =~ /^3\./;
  170. my $f_old = 1 if $freebsd && $osv =~ /^4\.1-/ || $osv =~ /^4\.0-/ || $osv =~ /^3/ || $osv =~ /^2/;
  171.  
  172. my $progArgs = $ARGV[0];
  173. if($progArgs) {
  174. if($progArgs eq '-v' || $progArgs eq '--version') {
  175. print "SysInfo v$sysinfoVer $sysinfoDate\n";
  176. print "Written by David Rudie <d.rudie\@gmail.com> and Travis Morgan <imbezol\@criticaldamage.com>\n";
  177. exit -1;
  178. }
  179. }
  180.  
  181. if($linux) {
  182. @cpuinfo = &openfile("/proc/cpuinfo");
  183. @meminfo = &openfile("/proc/meminfo");
  184. @netdev = &openfile("/proc/net/dev");
  185. @uptime = &openfile("/proc/uptime");
  186.  
  187. $df = 'df -lkP';
  188.  
  189. if($showDistro) {
  190. @distros = (
  191. "Gentoo", "/etc/gentoo-release",
  192. "Fedora Core", "/etc/fedora-release",
  193. "SuSE", "/etc/SuSE-release",
  194. "Slackware", "/etc/slackware-version",
  195. "Cobalt", "/etc/cobalt-release",
  196. "Debian", "/etc/debian_version",
  197. "Mandrake", "/etc/mandrake-release",
  198. "Mandrake", "/etc/mandrakelinux-release",
  199. "Yellow Dog", "/etc/yellowdog-release",
  200. "OpenFiler", "/etc/distro-release",
  201. "Red Hat", "/etc/redhat-release"
  202. );
  203. $distro = "";
  204. $distrov = "";
  205. do {
  206. if (-e $distros[1]) {
  207. $distro = $distros[0];
  208. $distrov = `cat $distros[1] | head -n 1`;
  209. chomp($distrov);
  210. $distrov =~ s/[^0-9]*([0-9.]+)[^0-9.]{0,1}.*/$1/;
  211. }
  212. shift @distros; shift @distros;
  213. } until (scalar @distros == 0) || (length $distro > 0);
  214. if ($distro eq "Debian") {
  215. if (-e "/etc/lsb-release") {
  216. $realdistro = `cat /etc/lsb-release | grep DISTRIB_DESCRIPTION`;
  217. if ($realdistro ne "") {
  218. chomp $realdistro;
  219. $realdistro =~ s/DISTRIB_DESCRIPTION="//;
  220. $realdistro =~ s/"$//;
  221. $distro = $realdistro;
  222. $distrov = $realdistro;
  223. $distro =~ s/ [0-9.]+.*$//;
  224. $distrov =~ s/$distro //;
  225. }
  226. }
  227. }
  228. if ($distro eq "Red Hat") {
  229. $realdistro = `cat /etc/redhat-release`;
  230. if ($realdistro =~ "^CentOS") {
  231. $distro = "CentOS";
  232. }
  233. }
  234. }
  235. } elsif($irix || $irix64) {
  236. @hinv = `hinv`;
  237. } else {
  238. @dmesgboot = &openfile("/var/run/dmesg.boot");
  239. if($sun) {
  240. @netstat = `netstat -in`;
  241. } else {
  242. @netstat = `netstat -ibn`;
  243. }
  244. if($darwin) {
  245. $sysctl = '/usr/sbin/sysctl';
  246. } else {
  247. $sysctl = '/sbin/sysctl';
  248. }
  249. if($arm) {
  250. $df = 'df -k';
  251. } elsif($f_old) {
  252. $df = 'df -k';
  253. } else {
  254. $df = 'df -lk';
  255. }
  256.  
  257. }
  258.  
  259. if($showCPU) {
  260. if($freebsd || $dragonfly) {
  261. if($alpha) {
  262. @cpu = grep(/^COMPAQ/, @dmesgboot);
  263. $cpu = join("\n", $cpu[0]);
  264. } else {
  265. @cpu = grep(/CPU: /, @dmesgboot);
  266. $cpu = join("\n", @cpu);
  267. $cpu =~ s/Warning:.*disabled//;
  268. @cpu = split(/CPU: /, $cpu);
  269. $cpu = $cpu[1];
  270. $cpu =~ s/\s\d\.\d\dGHz//g;
  271. $cpu =~ s/\s*[^\s]*-class CPU//gi;
  272. $cpu =~ s/(\S*)-MHz/$1 MHz/gi;
  273. $cpu =~ s/@\s+//;
  274. chomp($cpu);
  275. $smp = `$sysctl -n hw.ncpu`;
  276. chomp($smp);
  277. if ( $smp eq 1 ) {
  278. $smp = "";
  279. }
  280. }
  281. }
  282. if($netbsd) {
  283. if($alpha) {
  284. @cpu = grep(/^COMPAQ/, @dmesgboot);
  285. $cpu = join("\n", $cpu[0]);
  286. @cpu = split(/, /, $cpu);
  287. $cpu = $cpu[0];
  288. } else {
  289. @cpu = grep(/^v?cpu0.*MHz/, @dmesgboot);
  290. @cpu = grep(!/apic/, @cpu);
  291. @cpu = split(/: /,$cpu[0]);
  292. $cpu = $cpu[1];
  293. $cpu =~ s/, id.*//;
  294. $mhz = $cpu;
  295. $mhz =~ s/.* ([.0-9]+) *MHz.*$/$1/;
  296. $cpu =~ s/,.*//;
  297. $cpu = "$cpu ($mhz MHz)";
  298. $smp = `$sysctl -n hw.ncpu`;
  299. chomp($smp);
  300. if ( $smp eq 1 ) {
  301. $smp = "";
  302. }
  303. }
  304. }
  305. if($openbsd) {
  306. @cpu = grep(/cpu0: /, @dmesgboot);
  307. @cpu = grep(/[M|G]Hz/, @cpu);
  308. $cpu = join("\n", @cpu);
  309. @cpu = split(/: /, $cpu);
  310. $cpu = $cpu[1];
  311. $cpu =~ s/, / /;
  312. $cpu =~ s/([0-9.]* [MG]Hz)$/($1)/;
  313. $smp = `$sysctl -n hw.ncpu`;
  314. chomp($smp);
  315. if ( $smp eq 1 ) {
  316. $smp = "";
  317. }
  318. }
  319. if($irix || $irix64) {
  320. @cpu = grep(/CPU:/, @hinv);
  321. $cpu = join("\n", @cpu);
  322. $cpu =~ s/^.*(R[0-9]*) .*$/$1/;
  323. @mhz = grep(/MHZ/, @hinv);
  324. $mhz = join("\n", @mhz);
  325. $mhz = $mhz[0];
  326. $mhz =~ s/^.* ([0-9]*) MHZ.*$/$1/;
  327. @smp = grep(/ IP/, @hinv);
  328. $smp = $smp[0];
  329. $smp =~ s/^([0-9]*) .*$/$1/;
  330. chomp($smp);
  331. chomp($cpu);
  332. chomp($mhz);
  333. $cpu = "MIPS $cpu ($mhz MHz)";
  334. }
  335. if($linux) {
  336. if($alpha) {
  337. $cpu = &cpuinfo("cpu\\s+: ");
  338. $model = &cpuinfo("cpu model\\s+: ");
  339. $model = "$model (" . &cpuinfo("system type") . ")";
  340. $mhz = &cpuinfo("cycle frequency \\[Hz\\]\\s+: ");
  341. $mhz = ($mhz / 1000000);
  342. $mhz = sprintf("%.2f", $mhz);
  343. $cpu = "$cpu $model ($mhz MHz)";
  344. $smp = &cpuinfo("cpus detected\\s+: ");
  345. }
  346. if($arm) {
  347. $cpu = &cpuinfo("Processor\\s+: ");
  348. }
  349. if($i686 || $i586 || $x86_64) {
  350. $cpu = &cpuinfo("model name\\s+: ");
  351. $cpu =~ s/(.+) CPU family\t+\d+MHz/$1/g;
  352. $cpu =~ s/(.+) CPU .+GHz/$1/g;
  353. $mhz = &cpuinfo("cpu MHz\\s+: ");
  354. $mhz =~ s/^\s*//g;
  355. $cpu = "$cpu ($mhz MHz)";
  356. @smp = grep(/processor\s+: /, @cpuinfo);
  357. $smp = scalar @smp;
  358. }
  359. if($ia64) {
  360. $cpu = &cpuinfo("vendor\\s+: ");
  361. $model = &cpuinfo("family\\s+: ");
  362. $mhz = &cpuinfo("cpu MHz\\s+: ");
  363. $mhz = sprintf("%.2f", $mhz);
  364. $cpu = "$cpu $model ($mhz MHz)";
  365. @smp = grep(/processor\s+: /, @cpuinfo);
  366. $smp = scalar @smp;
  367. }
  368. if($mips) {
  369. $cpu = &cpuinfo("cpu\\s+: ");
  370. $model = &cpuinfo("cpu model\\s+: ");
  371. $cpu = "$cpu $model";
  372. }
  373. if($parisc || $parisc64) {
  374. $cpu = &cpuinfo("cpu\\s+: ");
  375. $model = &cpuinfo("model name\\s+: ");
  376. $mhz = &cpuinfo("cpu MHz\\s+: ");
  377. $mhz = sprintf("%.2f", $mhz);
  378. $cpu = "$model $cpu ($mhz MHz)";
  379. @smp = grep(/processor\s+: /, @cpuinfo);
  380. $smp = scalar @smp;
  381. }
  382. if($ppc || $ppc64) {
  383. $cpu = &cpuinfo("cpu\\s+: ");
  384. $mhz = &cpuinfo("clock\\s+: ");
  385. $mhz =~ s/^(\d+\.\d{3})\d*\s*MHz/$1 MHz/;
  386. $cpu =~ s/, altivec supported//;
  387. if($cpu =~ /^(PPC)*9.+/) {
  388. $model = "IBM PowerPC G5";
  389. } elsif($cpu =~ /^74.+/) {
  390. $model = "Motorola PowerPC G4";
  391. } else {
  392. $model = "IBM PowerPC G3";
  393. }
  394. $cpu = "$model $cpu ($mhz)";
  395. $smp = `/bin/grep -c -e '^processor\\s*:\\s*[0-9]\\+' /proc/cpuinfo`; chomp($smp);
  396. }
  397. if($s390 || $s390x) {
  398. $cpu = &cpuinfo("vendor_id\\s+: ");
  399. $smp = &cpuinfo("processors\\s+: ");
  400. }
  401. if($sh) {
  402. $cpu = &cpuinfo("cpu family\\s+: ");
  403. $model = &cpuinfo("cpu type\\s+: ");
  404. $mhz = &cpuinfo("cpu_clk\\s+: ");
  405. $cpu = "$cpu $model ($mhz MHz)";
  406. }
  407.  
  408. if($sparc || $sparc64) {
  409. $cpu = &cpuinfo("cpu\\s+: ");
  410. $model = &cpuinfo("type\\s+: ");
  411. $cpu = "$model $cpu";
  412. $mhz = &cpuinfo("Cpu0ClkTck\\s+: ");
  413. $mhz = (hex($mhz) / 1000000);
  414. $cpu = "$cpu ($mhz MHz)";
  415. $smp = &cpuinfo("ncpus active\\s+: ");
  416. }
  417. } elsif($sun) {
  418. my $osp = `uname -p`; chomp($osp);
  419. if($osv =~ /^5\.11/ || ($osv =~ /^5\.10/ && $osp =~ "i386")) {
  420. $cpu = `/usr/sbin/psrinfo -vp | tail -1`; chomp($cpu);
  421. $mhz = `/usr/sbin/psrinfo -vp | grep MHz | awk '{ print "(" \$(NF-1) " " \$NF}' | tail -1`; chomp($mhz);
  422. $cpu = "$cpu $mhz";
  423. $smp = `/usr/sbin/psrinfo -p`; chomp($smp);
  424. $cpu =~ s/^\s*//;
  425. }
  426. if($osp =~ "sparc") {
  427. $cpu = `/usr/platform/${osm}/sbin/prtdiag | head -1`; chomp($cpu);
  428. $cpu =~ s/.*${osm} //;
  429. $smp = `/usr/sbin/psrinfo | wc -l`;
  430. }
  431. } elsif($darwin) {
  432. $cpu = `hostinfo | grep 'Processor type' | cut -f2 -d':'`; chomp($cpu);
  433. $cpu =~ s/^\s*(.+)\s*$/$1/g;
  434. if($cpu =~ /^ppc7.+/) {
  435. $cpu = "Motorola PowerPC G4";
  436. }
  437. if($cpu =~ /^ppc970/) {
  438. $cpu = "Motorola PowerPC G5";
  439. }
  440. if ($cpu =~ /^i486/) {
  441. $cpu = `sysctl -n machdep.cpu.brand_string`; chomp($cpu);
  442. }
  443. $mhz = `$sysctl -n hw.cpufrequency`; chomp($mhz);
  444. $mhz = sprintf("%.2f", $mhz / 1000000);
  445. $cpu = "$cpu ($mhz MHz)";
  446. $smp = `hostinfo | grep "physically available" | cut -f1 -d' '`; chomp($smp);
  447. }
  448. if($smp && $smp gt 1) {
  449. $cpu = "$smp x $cpu";
  450. }
  451. $cpu =~ s/\s*@\s*\d*\.\d*\s*GHz//;
  452. $cpu =~ s/^\s+//;
  453. $cpu =~ s/\(R\)//gi;
  454. $cpu =~ s/\(tm\)//gi;
  455. $cpu =~ s/\([^(]*GenuineIntel[^)]*\)//;
  456. $cpu =~ s/\s*processor//gi;
  457. $cpu =~ s/\s*CPU//gi;
  458. $cpu =~ s/ +/ /g;
  459. }
  460.  
  461. sub batteryacpi {
  462. my $data = "";
  463. my ($bfull, $bcur, @dirs, $dir);
  464.  
  465. if (opendir(DIR, '/proc/acpi/battery/')) {
  466. @dirs = grep { !/^\./ } readdir (DIR);
  467. closedir(DIR);
  468. foreach $dir (@dirs) {
  469. $bfull = "";
  470. $bcur = "";
  471. if(open(FD, '/proc/acpi/battery/'.$dir.'/info')) {
  472. while (<FD>) {
  473. if (/^last full capacity:\ +([0-9]+)/) {
  474. $bfull = $1;
  475. }
  476. }
  477. close(FD);
  478. }
  479. if(open(FD, '/proc/acpi/battery/'.$dir.'/state')) {
  480. while (<FD>) {
  481. if (/^remaining capacity:\ +([0-9]+)/) {
  482. $bcur = $1;
  483. }
  484. }
  485. close(FD);
  486. }
  487. if ($bfull ne "") {
  488. if ($data ne "") {
  489. $data = $data." ";
  490. }
  491. $data = $data.sprintf("%.0f",($bcur/$bfull*100));
  492. $data = $data."%";
  493. }
  494. }
  495. }
  496. return $data;
  497. }
  498.  
  499. sub battery {
  500. $data = "";
  501.  
  502. if ( -f '/proc/apm') {
  503. if(open(FD, '/proc/apm')) {
  504. while($stream = <FD>) {
  505. $data .= $stream;
  506. @data = split(/\n/, $data);
  507. }
  508. close(FD);
  509. }
  510. $data = $data[0];
  511. $data =~ s/.+\s(\d+%).+/$1/;
  512. } elsif ( -d '/proc/acpi/battery') {
  513. $data=&batteryacpi;
  514. }
  515. return $data;
  516. }
  517.  
  518. sub cpuinfo {
  519. my $string = shift;
  520. @arr = grep(/$string/, @cpuinfo);
  521. $var = join("\n", $arr[0]);
  522. @arr = split(/: /, $var);
  523. $var = $arr[1];
  524. return $var;
  525. }
  526.  
  527. sub diskusage {
  528. if($irix || $irix64) {
  529. $vara = `$df | grep dev | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vara);
  530. $vard = `$df | grep dev | awk '{ sum+=\$4 / 1024 / 1024}; END { print sum }'`; chomp($vard);
  531. } elsif($sun) {
  532. $vara = `$df | grep -v swap | grep -v libc | awk '{ sum+=\$2 / 1024 / 1024}; END { print sum }'`; chomp($vara);
  533. $vard = `$df | grep -v swap | grep -v libc | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vard);
  534. } else {
  535. $vara = `$df | grep dev | awk '{ sum+=\$2 / 1024 / 1024}; END { print sum }'`; chomp($vara);
  536. $vard = `$df | grep dev | awk '{ sum+=\$3 / 1024 / 1024}; END { print sum }'`; chomp($vard);
  537. }
  538. if ($vara eq "" or $vara == 0 ) {
  539. return "0GB/0GB (0%)";
  540. } else {
  541. $varp = sprintf("%.2f", $vard / $vara * 100);
  542. $vara = sprintf("%.2f", $vara);
  543. $vard = sprintf("%.2f", $vard);
  544. return $vard."GB/".$vara."GB ($varp%)";
  545. }
  546. }
  547.  
  548. sub loadaverage {
  549. $var = `uptime`; chomp($var);
  550. @arr = split(/averages*: /, $var, 2);
  551. if($darwin) {
  552. @arr = split(/ +/, $arr[1], 2);
  553. } else {
  554. @arr = split(/, /, $arr[1], 2);
  555. }
  556. $var = $arr[0];
  557. return $var;
  558. }
  559.  
  560. sub meminfo {
  561. my $string = shift;
  562. @arr = grep(/^$string/, @meminfo);
  563. $var = join("\n", $arr[0]);
  564. @arr = split(/\s+/, $var);
  565. $var = $arr[1];
  566. return $var;
  567. }
  568.  
  569. sub memoryusage {
  570. if($linux) {
  571. if(($l26)||($l3)) {
  572. $vara = &meminfo("MemTotal:") * 1024;
  573. $varb = &meminfo("Buffers:") * 1024;
  574. $varc = &meminfo("Cached:") * 1024;
  575. $vard = &meminfo("MemFree:") * 1024;
  576. } else {
  577. @arr = grep(/Mem:/, @meminfo);
  578. $var = join("\n", @arr);
  579. @arr = split(/\s+/, $var);
  580. $vara = $arr[1];
  581. $varb = $arr[5];
  582. $varc = $arr[6];
  583. $vard = $arr[3];
  584. }
  585. $vard = ($vara - $vard) - $varb - $varc;
  586. } elsif($darwin) {
  587. $vard = `vm_stat | grep 'Pages active' | awk '{print \$3}'` * 4096;
  588. $vara = `$sysctl -n hw.memsize`;
  589. } elsif($sun) {
  590. $vara = `/usr/sbin/prtconf | grep "Mem" | awk '{print \$3}'` * 1024 * 1024;
  591. $vard = `/bin/vmstat 1 2 | tail -1 | awk '{print \$5 * 1024}'`;
  592. $vard = $vara - $vard
  593. } elsif($irix || $irix64) {
  594. $var = `top -d1 | grep Memory`; chomp($var);
  595. $vara = $var;
  596. $vard = $var;
  597. $vara =~ s/^.* ([0-9]*)M max.*$/$1/;
  598. $vara *= 1024 * 1024;
  599. $vard =~ s/^.* ([0-9]*)M free,.*$/$1/;
  600. $vard = $vara - ($vard * 1024 * 1024);
  601. } elsif($netbsd) {
  602. $vard = `vmstat -t | tail -n 1 | awk '{print \$8}'`;
  603. $vard = $vard * 4096;
  604. $vara = `sysctl -n hw.physmem`;
  605. } else {
  606. $vard = `vmstat -s | grep 'pages active' | awk '{print \$1}'` * `vmstat -s | grep 'per page' | awk '{print \$1}'`;
  607. $vara = `$sysctl -n hw.physmem`;
  608. }
  609. $varp = sprintf("%.2f", $vard / $vara * 100);
  610. $vara = sprintf("%.2f", $vara / 1024 / 1024);
  611. $vard = sprintf("%.2f", $vard / 1024 / 1024);
  612. return $vard."MB/".$vara."MB ($varp%)";
  613. }
  614.  
  615. sub networkinfobsd {
  616. $varc = shift;
  617. $vard = shift;
  618. @arr = grep(/$varc/, @netstat);
  619. @arr = grep(/Link/, @arr);
  620. $var = join("\n", @arr);
  621. @arr = split(/\s+/, $var);
  622. $var = $arr[$vard] / 1024 / 1024;
  623. $var = sprintf("%.2f", $var);
  624. return $var;
  625. }
  626.  
  627. sub networkinfolinux {
  628. $varc = shift;
  629. $vard = shift;
  630. @arr = grep(/$varc/, @netdev);
  631. $var = join("\n", @arr);
  632. @arr = split(/:\s*/, $var);
  633. @arr = split(/\s+/, $arr[1]);
  634. $var = $arr[$vard] / 1024 / 1024;
  635. $var = sprintf("%.2f", $var);
  636. return $var;
  637. }
  638.  
  639. sub networktraffic {
  640. $vara = 0;
  641. $varz = "";
  642. $varb = scalar @nic;
  643. if($nic[$vara] ne "") {
  644. while($vara lt $varb) {
  645. if($nic[$vara] ne "") {
  646. if ($varz eq "") {
  647. $varz = $col2." - ".$col1;
  648. }
  649. if($darwin || $freebsd || $dragonfly) {
  650. $varx = &networkinfobsd($nic[$vara], 6);
  651. $vary = &networkinfobsd($nic[$vara], 9);
  652. }
  653. if($netbsd || $openbsd) {
  654. $varx = &networkinfobsd($nic[$vara], 4);
  655. $vary = &networkinfobsd($nic[$vara], 5);
  656. }
  657. if($sun) {
  658. $varx = &networkinfobsd($nic[$vara], 4);
  659. $vary = &networkinfobsd($nic[$vara], 6);
  660. }
  661. if($linux) {
  662. $varx = &networkinfolinux($nic[$vara], 0);
  663. $vary = &networkinfolinux($nic[$vara], 8);
  664. }
  665. $varz .= $nicname[$vara]." Traffic (".$nic[$vara].")".$col2.": ".$col1.$varx."MB In/".$vary."MB Out - ";
  666. }
  667. $vara++;
  668. }
  669. return $varz;
  670. }
  671. }
  672.  
  673. sub openfile {
  674. my $string = shift;
  675. $data = "";
  676. if(open(FD, $string)) {
  677. while($stream = <FD>) {
  678. $data .= $stream;
  679. @data = split(/\n/, $data);
  680. }
  681. close(FD);
  682. }
  683. return @data;
  684. }
  685.  
  686. sub processes {
  687. if($irix || $irix64 || $sun) {
  688. $var = `ps -e | grep -v PID | wc -l`;
  689. } else {
  690. $var = `ps ax | grep -v PID | wc -l`;
  691. }
  692. chomp($var);
  693. $var = $var;
  694. $var =~ s/^\s+//;
  695. $var =~ s/\s+$//;
  696. return $var;
  697. }
  698.  
  699. sub uptime {
  700. if($irix || $irix64 || $d9 || $sun) {
  701. $var = `uptime`; chomp($var);
  702. if($var =~ /day/) {
  703. $var =~ s/^.* ([0-9]*) day.* ([0-9]*):([0-9]*), .*$/$1d $2h $3m/;
  704. } elsif($var =~ /min/) {
  705. $var =~ s/^.* ([0-9]*) min.*$/0d 0h $1m/;
  706. } else {
  707. $var =~ s/^.* ([0-9]*):([0-9]*),.*$/0d $1h $2m/;
  708. }
  709. return $var;
  710. } else {
  711. if($freebsd || $dragonfly) {
  712. $var = `$sysctl -n kern.boottime | awk '{print \$4}'`;
  713. }
  714. if($netbsd || $openbsd || $darwin) {
  715. $var = `$sysctl -n kern.boottime`;
  716. }
  717. if($linux) {
  718. @arr = split(/ /, $uptime[0]);
  719. $varx = $arr[0];
  720. } else {
  721. chomp($var);
  722. $var =~ s/,//g;
  723. $vary = `date +%s`; chomp($vary);
  724. $varx = $vary - $var;
  725. }
  726. $varx = sprintf("%2d", $varx);
  727. $vard = floor($varx / 86400);
  728. $varx %= 86400;
  729. $varh = floor($varx / 3600);
  730. $varx %= 3600;
  731. $varm = floor($varx / 60);
  732. if($vard eq 0) { $vard = ''; } elsif($vard >= 1) { $vard = $vard.'d '; }
  733. if($varh eq 0) { $varh = ''; } elsif($varh >= 1) { $varh = $varh.'h '; }
  734. if($varm eq 0) { $varm = ''; } elsif($varm >= 1) { $varm = $varm.'m'; }
  735. return $vard.$varh.$varm;
  736. }
  737. }
  738.  
  739. sub users {
  740. $var = `uptime`; chomp($var);
  741. $var =~ s/^.* +(.*) user.*$/$1/;
  742. return $var;
  743. }
  744.  
  745. my $output;
  746. if($showHostname) { $output = $col1."Hostname".$col2.": ".$col1.$osn.$col2." - "; }
  747. if($showOS) { $output .= $col1."OS".$col2.": ".$col1.$uname.$col2." - "; }
  748. if($linux && $showDistro && length $distro > 0 ) {
  749. $output .= $col1."Distro".$col2.": ".$col1.$distro;
  750. if (length $distrov > 0) {
  751. $output .= " ".$distrov;
  752. }
  753. $output .= $col2." - ";
  754. }
  755. if($showCPU) { $output .= $col1."CPU".$col2.": ".$col1.$cpu.$col2." - "; }
  756. if($showProcesses) { $output .= $col1."Processes".$col2.": ".$col1.&processes.$col2." - "; }
  757. if($showUptime) { $output .= $col1."Uptime".$col2.": ".$col1.&uptime.$col2." - "; }
  758. if($showUsers) { $output .= $col1."Users".$col2.": ".$col1.&users.$col2." - "; }
  759. if($showLoadAverage) { $output .= $col1."Load Average".$col2.": ".$col1.&loadaverage.$col2." - "; }
  760. if($showBattery) { $output .= $col1."Battery".$col2.": ".$col1.&battery.$col2." - "; }
  761. if($showMemoryUsage) { $output .= $col1."Memory Usage".$col2.": ".$col1.&memoryusage.$col2." - "; }
  762. if($showDiskUsage) { $output .= $col1."Disk Usage".$col2.": ".$col1.&diskusage; }
  763. if($showNetworkTraffic) { $output .= &networktraffic; }
  764. $output =~ s/ - $//g;
  765. print "$output\n";
Advertisement
Add Comment
Please, Sign In to add comment