#!/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, ") { 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. }