#!/usr/local/bin/perl use strict; no strict "refs"; use CGI; use Proc::ProcessTable; our $statusCGI = new CGI; # Configuration variables our $acmePath = "/usr/local/acme"; our $universedBin = "universed"; our $worldBin = "world"; our %universed = (); our %world = (); sub queryProcesses { my $server = shift; my $found = 0; my @found; my $process = new Proc::ProcessTable(); my $processTableRecord; foreach $processTableRecord (@{$process->table}) { if ($processTableRecord->fname eq $server) { $found++; push @found, $processTableRecord; } } if ($found == 0) { %{$server} = ( status => "Down", server => $server, action => "Start" ); } elsif ($found == 1) { %{$server} = ( status => "Up", PID => $found[0]->pid, server => $found[0]->fname, action => "Stop" ); #print $processTableRecord->uid, "\n"; } else { } } sub printStatusHTML { print $statusCGI->header( "text/html" ), $statusCGI->start_html( "chat.educ.foo.edu Administration" ); print < Server Stats as of
Status Server Uptime User PID Action $universed{status} $universed{server} $universed{PID}
$world{status} $world{server} $world{PID}
Uniserver Documentation | Worlds Server Documentation EOHTML print $statusCGI->end_html; } our $universedAction = $statusCGI->param("universedAction"); our $worldAction = $statusCGI->param("worldAction"); if ( $statusCGI->query_string eq "" ) { queryProcesses($universedBin); queryProcesses($worldBin); printStatusHTML(); } elsif ( $statusCGI->param("universedAction") eq "start") { die(print STDERR "Got to first elsif.") unless system("/usr/local/bin/universed start"); sleep 5; queryProcesses($universedBin); queryProcesses($worldBin); printStatusHTML(); ; } elsif ($statusCGI->param("universedAction") eq "stop") { die unless system("/usr/local/bin/universed stop"); sleep 5; queryProcesses($universedBin); queryProcesses($worldBin); printStatusHTML(); } elsif ($statusCGI->param("worldAction") eq "start") { die unless system("/usr/local/bin/world start"); sleep 5; queryProcesses($universedBin); queryProcesses($worldBin); printStatusHTML(); } elsif ($statusCGI->param("worldAction") eq "stop") { die unless system("/usr/local/bin/world stop"); sleep 5; queryProcesses($universedBin); queryProcesses($worldBin); printStatusHTML(); }