#!/usr/bin/perl -w
use strict;
use CGI 'param';
use CGI::Push qw(:standard);
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
do_push(
-nph => 0,
-delay => 2,
-next_page => sub {
my($q, $count) = @_;
my @return;
my $command = "ps -auxwr";
$command .= " -U ".getpwuid(param("uid"))
if param("uid") =~ /^[0-9]+$/;
my @lines = split /\n/, `$command`;
my @header = split /\s+/, shift @lines;
my %format = (
"USER" => sub {
my($value) = @_;
my $uid = getpwnam($value);
return $value if ($uid == param("uid") &&
defined param("uid"));
return "$value";
},
"\%CPU" => sub {
my($value) = @_;
return ($value > 0.0) ?
"$value%" : "$value%";
},
"\%MEM" => sub {
my($value) = @_;
return "$value%";
},
"VSZ" => sub {
my($value) = @_;
$value =~ s/(?<=\d)(?=(\d\d\d)+$)/,/g;
return "$value kb";
},
"RSS" => sub {
my($value) = @_;
$value =~ s/(?<=\d)(?=(\d\d\d)+$)/,/g;
return "$value kb";
}
);
push @return, <
$ENV{SERVER_NAME}: $command
EOF
foreach(@header) {
push @return, " $_ | \n";
}
push @return, "
\n";
foreach(@lines) {
my @field = split(/\s+/, $_, $#header+1);
push @return, " \n";
my $f=0;
foreach(@field) {
$_ = &{$format{$header[$f]}}($_)
if(defined $format{$header[$f]});
push @return, " $_ | \n";
$f++;
}
push @return, "
\n";
}
push @return, <
EOF
return @return;
},
);