Advertisement
swarley

sysinfo.pl

Jan 29th, 2012
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 6.53 KB | None | 0 0
  1. use warnings;
  2. use strict;
  3. use utf8;
  4. use Xchat ':all';
  5.  
  6. Xchat::hook_command('sysinfo', 'sysinfo');
  7.  
  8. sub sysinfo {
  9.    if(defined $_[0][1]) {
  10.       sysinfo_l();
  11.       return undef;
  12.    }
  13.    #my $format  = "\x0F\x0302os\x03[ %os% ] \x0302distro\x03[ %distro% ] \x0302host\x03[ %machine% ] \x0302cpu\x03[ %cpu% ] \x0302battery\x03[ %battery% ] ";
  14.    my $format  = "\x0F\x0302os\x03[ %os% ] \x0302distro\x03[ %distro% ] \x0302host\x03[ %machine% ] \x0302cpu\x03[ %cpu% ] ";
  15.    $format .= "\x0302mem\x03[ %mem% ] \x0302disk\x03[ %disk% ] \x0302video\x03[ %video% ] \x0302sound\x03[ %sound% ] ";
  16.    $format .= "\x0302network\x03[ %network% ] \x0302temp\x03[ %temp% ] \x0302uptime\x03[ %uptime% ]";
  17.    my $os      = get_os(); $format =~ s/\%os\%/$os/;
  18.    my $distro  = get_distro(); $format =~ s/\%distro\%/$distro/;
  19.    my $cpu     = get_cpu(); $format =~ s/\%cpu\%/$cpu/;
  20.    my $name    = machine_name(); $format =~ s/\%machine\%/$name/;
  21.    # my $battery = batteryinfo(); $format =~ s/\%battery\%/$battery/;
  22.    my $mem     = mem_info(); $format =~ s/\%mem\%/$mem/;
  23.    my $disk    = disk_info(); $format =~ s/\%disk\%/$disk/;
  24.    my $video   = video_info(); $format =~ s/\%video\%/$video/;
  25.    my $audio   = sound_info(); $format =~ s/\%sound\%/$audio/;
  26.    my $net     = network_info(); $format =~ s/\%network\%/$net/;
  27.    my $temper  = temp_info(); ($temper eq 'null') ? $format =~ s/\x0302temp\x03\[\s\%temp\%\s\]// : $format =~ s/\%temp\%/$temper/;
  28.    my $uptime  = uptime(); $format =~ s/\%uptime\%/$uptime/;
  29.    Xchat::command('MSG ' . Xchat::get_info('channel') . ' ' . $format);
  30. }
  31.  
  32. sub get_os {
  33.    my $temp = `uname -srm`;
  34.    chomp($temp);
  35.    return $temp;
  36. }
  37.  
  38. sub get_distro {
  39.    my $temp = `cat /etc/issue`;
  40.    $temp = (split(/\\/, $temp))[0];
  41.    $temp =~ s/\s+$//;
  42.    return $temp;
  43. }
  44.  
  45. sub machine_name() {
  46.    my $temp = `uname -n`;
  47.    chomp($temp);
  48.    return $temp;
  49. }
  50.  
  51. sub get_cpu() {
  52.    my @temp = split(/\n/, `cat /proc/cpuinfo`);
  53.    my $ret = '';
  54.    my $model; my $mhz; my $cores;
  55.    foreach my $i (@temp) {
  56.       my @tmp = split(/:/, $i);
  57.       my $label = $tmp[0];
  58.       next unless defined $label;
  59.       $label =~ s/\s//g;
  60.       $label =~ s/.[^A-z]//g;
  61.       if ($label eq 'modelname') {
  62.         $model = (split(/:\s/, $i))[1];
  63.       }
  64.       elsif($label eq 'cpuMHz') {
  65.         $mhz = (split(/:\s/, $i))[1];
  66.       }
  67.       elsif($label eq 'cpucores') {
  68.         $cores = (split(/:\s/, $i))[1];
  69.       }
  70.    }
  71.    $ret .= $model . ' ';
  72.    $ret .= sprintf("%.1f", $mhz / 1000) . 'GHz ';
  73.    $ret .= $cores . ' cores';
  74.    return $ret;
  75. }
  76.  
  77. sub strmult {
  78.    my $ret = '';
  79.    for(my $i = 0; $i ne $_[1]; $i++) { $ret .= $_[0]; }
  80.    return $ret;
  81. }
  82.  
  83. sub batteryinfo {
  84.    my @battery = split(/\,/, (split(/\s/, `acpi`, 3))[2], 3);
  85.    $battery[1] =~ s/\s//g;
  86.    my @temp = split(//, $battery[1]);
  87.    chomp($battery[-1]);
  88.    my $temp = @temp;
  89.    if($temp eq 2) {
  90.       return "\00307,01[\003\00303,01|\003\00305,01---------\003\00307,01]: \003\00305,01" . $battery[1] . " \003";
  91.    }
  92.    elsif($temp eq 4) {
  93.       if(defined $battery[2]) {
  94.      return "\00300,01[\003\00303,01||||||||||\003\00300,01]: \003\00309,01" . $battery[1] . " \003";
  95.       }
  96.       else {
  97.      return "\00300,01[\003\00303,01||||||||||\003\00300,01]: \003\00309,01" . $battery[1] . " \003";
  98.       }
  99.    }
  100.    else {
  101.       my $prec = int($temp[0]);
  102.       my $red = 10 - $prec;
  103.       my $ret = '';
  104.       $ret .= "\00300,01[\003\00303,01" . strmult('|', $prec) . "\003\00305,01" . strmult('-', $red) . "\003\00300,01]: \003";
  105.       if($prec < 6) {
  106.      if($prec < 3) {
  107.         $ret .= "\00305,01";
  108.      }
  109.      else {
  110.         $ret .= "\00308,01";
  111.      }
  112.       }
  113.       else {
  114.      if($prec < 9) {
  115.         $ret .= "\00303,01";
  116.      }
  117.      else {
  118.         $ret .= "\00309,01";
  119.      }
  120.       }
  121.       $ret .= $battery[1];
  122.       $ret .= " \003\x0F";
  123.       return $ret;
  124.    }
  125. }
  126.  
  127. sub mem_info() {
  128.    my $ret = '';
  129.    my @tmp = split(/\n/, `cat /proc/meminfo`);
  130.    my $total = $tmp[0];
  131.    my $free  = $tmp[1];
  132.    $total =~ m/.+?\s+(\d+)\s/;
  133.    $total = int($1);
  134.    $total /= 1000;
  135.    $free  =~ m/.+?\s+(\d+)\s/;
  136.    $free  = int($1);
  137.    $free  /= 1000;
  138.    $ret .= "Total/Free: " . sprintf("%.0fMB", $total)  . "/" . sprintf("%.0fMB", $free);
  139.    return $ret;
  140. }
  141.  
  142. sub disk_info() {
  143.    my $ret = '';
  144.    my $df = `df -lm --total`;
  145.    my @split_up = split(/\n/, $df);
  146.    foreach my $i (@split_up) {
  147.       chomp($i);
  148.       $i =~ s/(\s+|\t+)/ /g;
  149.       my @sub_split = split(/\s/, $i);
  150.       if($sub_split[0] eq "total")
  151.       {
  152.      $ret .= "Size/Used: " . sprintf("%.1f", int($sub_split[3]) / 1000) . "GB/" . sprintf("%.1f", int($sub_split[2]) / 1000) . "GB";
  153.       }
  154.    }
  155.    return $ret;
  156. }
  157.  
  158. sub video_info() {
  159.    my $vga = `lspci | grep -i vga`;
  160.    $vga = (split(/\n/, $vga))[0];
  161.    $vga = (split(/:/, $vga))[-1];
  162.    $vga =~ s/^\s+//;
  163.    $vga =~ s/\s+$//;
  164.    $vga =~ s/\[/(/;
  165.    $vga =~ s/\]/)/;
  166.    if($vga =~ m/^ATI\s/i) {
  167.       $vga =~ s/^ATI/\x0300,05\x02 ATI \x02\x03/i;
  168.    }
  169.    elsif($vga =~ m/^NVIDIA\s/i) {
  170.       $vga =~ s/^NVIDIA/\x0301,09\x02@\x02\x03\x0300,01\x02NVIDIA \x02\x03/i;
  171.    }
  172.    return $vga;
  173. }
  174.  
  175. sub sound_info() {
  176.    my @sound = split(/\n/, `lspci | grep -i audio`);
  177.    my $audio = $sound[0];
  178.    $audio = (split(' ', $audio, 2))[1];
  179.    $audio =~ s/^\s+//;
  180.    $audio =~ s/\s+$//;
  181.    $audio =~ s/\[/(/g;
  182.    $audio =~ s/\]/)/g;
  183.    return $audio;
  184. }
  185.  
  186. sub network_info() {
  187.    my $ret = '';
  188.    if(`lspci | grep -i network`) {
  189.       my @net = split(/\n/, `ifconfig wlan0`);
  190.       foreach my $line (@net) {
  191.      $line =~ s/^(\s+|\t+)//;
  192.      if($line =~ /^rx bytes:/i) {
  193.         Xchat::print($line);
  194.         $line =~ m/.+?\((.+?)\).+?\((.+?)\)/;
  195.         my $rx = $1;
  196.         my $tx = $2;
  197.         $ret .= 'wlan0 RX/TX Bytes: ' . $rx . '/' . $tx;
  198.      }
  199.      next;
  200.       }
  201.    }
  202.    else {
  203.       my @net = split(/\n/, `ifconfig eth0`);
  204.       foreach my $line (@net) {
  205.      if($line =~ /^rx bytes:/i) {
  206.         Xchat::print($line);
  207.         $line =~ m/.+?\((.+?)\).+?\((.+?)\)/;
  208.         my $rx = $1;
  209.         my $tx = $2;
  210.         $ret .= 'eth0 RX/TX Bytes: ' . $rx . '/' . $tx;
  211.      }
  212.      next;
  213.       }
  214.    }
  215.    return $ret;
  216. }
  217.  
  218. sub temp_info() {
  219.    if(!system('acpi')) {}
  220.    else { return 'null'; }
  221.    return (split(/\s/, `acpi -tf`))[3] . '°F';
  222. }
  223.    
  224. sub uptime() {
  225.    my $up = `uptime`;
  226.    $up =~ s/^\s+//g;
  227.    my @up_a = split(/\s/, $up);
  228.    my $up_a = @up_a;
  229.    if($up_a == 10) {
  230.       my $ret = (split(/\s/, $up))[2];
  231.       $ret =~ s/,//g;
  232.       return $ret . ' hours';
  233.    }
  234.    else {
  235.       my $ret = (split(/\s/, $up))[2] . ' ' . (split(/\s/, $up))[3] . 'hours';
  236.       $ret =~ s/,//g;
  237.       return $ret;
  238.    }
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement