use IO::Socket::INET;
use Module::Refresh;
+our $pids = { httpd => $$ };
+
+sub DESTROY {
+ warn "pids ",dump( $pids );
+ foreach ( values %$pids ) {
+ warn "kill $_";
+ kill 1,$_ || kill 9, $_;
+ }
+}
+
our $port = 7777;
-our $debug = 1;
+our $debug = 0;
use server;
our $url = "http://$server::ip:$port";
use screen;
use kvm;
-our $pids;
$SIG{CHLD} = 'IGNORE';
if ( $pid ) {
warn "kill 9 $pid";
kill 9, $pid;
- delete $pids->{$daemon};
+ $pids->{$daemon} = 'stopped';
return qq|$daemon pid $pid stopped|;
} else {
if ( $pid = fork ) {
return qq|$daemon pid $pid started|;
} elsif ( defined $pid ) {
# child
- my $eval = $daemon . '::start';
+ my $eval = $daemon . '::start(' . dump(@_) . ')';
warn "eval $eval";
eval $eval;
warn "can't start $daemon: $@" if $@;
my $kvm = $pids->{kvm} ? qq|stop <tt>$pids->{kvm}</tt>| :
$pids->{screen} ? qq|start| : qq|start screen first|;
- print $client $ok,
- html::table( 2,
- 'pid', html::tt( $$ ),
+ my @rows = (
'ip', html::tt( $server::ip ),
'netmask', html::tt( $server::netmask ),
+
'debug', qq|<a href=/our/debug/| . boolean::toggle($debug) . qq|>$debug</a>|,
- 'screen', qq|<a href=/screen>$screen</a>|,
- 'kvm', qq|<a href=/kvm>$kvm</a>|,
);
+ foreach my $name ( %$pids ) {
+ my $pid = $pids->{$name} || next;
+
+ my $html = qq|<a href=/$name>$pid</a>|;
+ $html .= qq|<pre style="font-size: 10%">|
+ . ( $debug ? read_file("/proc/$pid/status") : '' )
+ . qq|</pre>| if $debug;
+
+ push @rows, ( $name => $html );
+ }
+
+ print $client $ok, html::table( 2, @rows );
} elsif ( $path =~ m{^/our/(\w+)/(\S+)} ) {
eval 'our $' . $1 . ' = ' . $2;
print $client qq|HTTP/1.1 302 Found\r\nLocation: $url\r\nContent-type: text/html\r\n\r\n<big>$1 = $2</big><br>Location: <a href="$url">$url</a>|;
} elsif ( $path =~ m{^/(screen|kvm)} ) {
print $client $ok, start_stop($1);
+ } elsif ( $path eq '/exit' ) {
+# DESTROY;
+ exit 0;
} elsif ( $path =~ m{/boot} ) {
print $client qq{$ok
#!gpxe
}
+use browser;
+
sub start {
my $server = IO::Socket::INET->new(
print "url $url\n";
- system "/mnt/llin/rest/cvs/uzbl/uzbl -u $url &";
+ start_stop 'browser', $url;
+ start_stop 'screen';
+ start_stop 'kvm';
while (my $client = $server->accept()) {
$client->autoflush(1);
print $client qq{
<div style="font-size: 80%; color: #888">
<a href="">reload</a>
- <a href="/">index</a>
+ <a href=/>index</a>
+ <a href=/exit>exit</a>
</div>
} if $client->connected;