#! /usr/bin/perl use Tk; my $sysWIDTH = 400; my $sysFATNESS = 1; my $sysHEIGHT = 200; my $sysM = $sysWIDTH / 2; my $sysWARN = 0.4 * $sysHEIGHT; my $sysXHEIGHT = $sysHEIGHT / 4; my $sysi = 0; my @sysB = (); my @sysR = (); my ($sysj, $sysk, $sysx, $sysy, $sysy_); my $sysCOLOR = '#00ff00'; my $sysd; my ($sysmw, $sysb, $sysc); sub do_sysload { my $sysmw = $_[0]; $sysmw->configure(-title => "Sysload: System Load Graph"); $sysc = $sysmw->Canvas( -width => $sysWIDTH, -height => $sysHEIGHT, -background => 'black', -relief => 'sunken', -borderwidth => '1', )->pack(-fill => 'both', -expand => '1'); for ($sysj = 0; $sysj < $sysM; $sysj++) { $sysB[$sysj] = 0; } $sysb = $sysmw->Button( -command => sub { update_status(); }, -text => "Load Average", )->pack; } sub update_status { open(F,"); close(F); $sysB[$sysi] = $_; for ($sysj = 0; $sysj < $sysM; $sysj++) { $sysk = ($sysj + $sysi) % $sysM; $sysc->delete($sysR[$sysk]); $sysx = $sysj * $sysFATNESS; $sysy = $sysXHEIGHT * $sysB[$sysk]; $sysy_ = $sysXHEIGHT * $sysB[($sysk - 1) % $sysM]; if ($sysy > $sysWARN) { $sysCOLOR = '#ff5050'; } else { $sysCOLOR = '#00ff00'; } $sysR[$sysk] = $sysc->create( 'polygon', $sysx, $sysHEIGHT, $sysx + $sysFATNESS, $sysHEIGHT, $sysx + $sysFATNESS, $sysHEIGHT - $sysy, $sysx, $sysHEIGHT - $sysy_, -fill => $sysCOLOR, -smooth => '1', -outline => undef, ); } $sysi = ($sysi + 1) % $sysM; after(750, [\&update_status]); } my $mw = new MainWindow; do_sysload($mw); MainLoop; 1; __END__