All pastes #451766 Raw Edit

pcstats xchat

public text v1 · immutable
·published 2007-04-21 20:34 UTC
rendered paste body
#!/usr/bin/perl

IRC::add_command_handler("pcstats", "pcstats");

sub pcstats
{
        # Generic vars.
        my $buffer;
        my $output;
        my $txtformat = "\002";
        
        # CPU Info vars.
        my $cpumhz;
        my $version = `uname -r`;
        my $kernel = `uname`;
        my $cpumodel;
        my $cpuTemp = `cat /proc/acpi/thermal_zone/THRM/temperature`;
        
        # Inet info vars.
        my @inetconn;
        my @pppifaces = `/sbin/ifconfig |grep ppp`;
        my $bytesul;
        my $bytesdl;
        my $mbytesul;
        my $mbytesdl;
        
        # Disk info vars.
        my @disks = `df -h`;
        my $devname;
        my $devsize;
        my $devuse;
        my $devmount;
        
        # Mem info vars.
        my @meminfo = `free`;
        my $freemem;
        my $usedmem;
        my $freememp;
        my $usedmemp;
        
        # X Resolution.
        my $xres = `xdpyinfo -display :0 |grep dimensions`;
                
        # Proc info vars.
        my $procs = `ps ax |wc -l`;
        
        # Uptime.
        my $uptime = `uptime`;
        my @fuptime;
        my $loadavg = `uptime`;
        
        ### CPU Info function. ################################################
        chomp ( $version, $kernel, $cpuTemp );
        
        open (CPUINFO, "</proc/cpuinfo");
        while ($buffer = <CPUINFO>) {
                if ($buffer =~ /model name/) {
                        (undef, $cpumodel) = split /: /, $buffer;
                        chomp $cpumodel;
                }
                if ($buffer =~ /cpu MHz/) {
                        (undef, $cpumhz) = split /: /, $buffer;
                        chomp $cpumhz;
                }
        } close (CPUINFO);
        
        $output = "CPU$txtformat:$txtformat\ $txtformat\[$txtformat$cpumodel\ $txtformat\@$txtformat\ $cpumhz MHz, $cpuTemp$txtformat\]$txtformat.\ $kernel\ $txtformat\[$tx
tformat$version$txtformat\]$txtformat.\ Disks$txtformat:$txtformat";
        
        ### Internet connections (ppp) function #######################################
        
        foreach $iface (@pppifaces) {
                ($iface) = split / /, $iface;
                @inetconn = `/sbin/ifconfig $iface`;
                foreach $conn (@inetconn) {
                        if ($conn =~ /RX bytes/) {
                                $bytesdl = $1 if $conn =~ /RX bytes:(\d+)/;
                                $bytesul = $1 if $conn =~ /TX bytes:(\d+)/;
                                $mbytesdl = sprintf ("%.2f", $bytesdl/1048576);
                                $mbytesul = sprintf ("%.2f", $bytesul/1048576);
                                $output .= " Internet connection(s)\cB: [\cB$iface\cB:\cB $bytesul bytes up \cB(\cB$mbytesul Mb\cB)\cB,";
                                $output .= " $bytesdl bytes down \cB(\cB$mbytesdl Mb\cB)]\cB.";
                        }
                }
        }
        
        
        foreach $disk (@disks) {
                $disk =~ s/\s+/ /g;
                next if $disk =~ /^none/ or $disk =~ /Filesystem/;
                ($devname, $devsize, undef, undef, $devuse, $devmount) = split / /, $disk;
                $output .= " \cB[\cB$devname\cB:\cB $devsize \cB-\cB $devuse used\cB]\cB.";
        }
        ### Memory and swap information ###############################################
        
        foreach $line (@meminfo) {
                if ($line =~ /cache:/) {
                        $line =~ s/\s+/ /g;
                        (undef, undef, $memused, $memfree) = split / /, $line;
                        $memusedp = sprintf ("%.2f", $memused*100/($memused+$memfree));
                        $memfreep = sprintf ("%.2f", $memfree*100/($memfree+$memused));
                        $output .= " RAM\cB: [\cBUsed: $memused \cB(\cB$memusedp\%\cB)\cB - Free: $memfree \cB(\cB$memfreep\%\cB)]\cB.";
                }
        }       
        
        
        ### X Resolution info. #######################################################
        
        $xres =~ s/dimensions: (.*)pixels.*/$1/;
        $xres =~ s/ //g;
        chomp $xres;
        $output .= " X Resolution\cB: [\cB$xres\cB]\cB.";
        
        
        ### Number of processes function ##############################################
        
        chomp $procs;
        $procs =~ s/\s+//g;
        $output .= " Procs running\cB: [\cB$procs\cB]\cB.";
        
        ### Uptime information. #######################################################
        
        chomp $uptime;
        $uptime =~ s/.*up (.*)/$1/;
        
        @fuptime = split /,/,$uptime;
        
        $output .= " Uptime\cB: [\cB$fuptime[0]";
        
        if ($fuptime[1] !~ /users?/) {
            $fuptime[1] =~ s/ //g;
            $output .= ", $fuptime[1]";
        }
        
        $output .= "\cB]\cB.";
        
        ### Load average information. ################################################
        
        $loadavg =~ s/.*load average: (.*)/$1/;
        chomp $loadavg;
        $output .= " Load average\cB: [\cB$loadavg\cB]\cB.";
        
        ### Print the data to IRC. ####################################################
        
        IRC::register ("PCStats", "0.1", "", "");
        IRC::command ("$output");
        
        
        # Done.
}