1 use CGI qw(:all delete_all escapeHTML);
2
3 my $redirect_page = "display_page.cgi";
4
5 # The execution enters this loop in the first pass whereas 6 it should not!!!
7 if (my $session = param('session')) { # returning to pick 8 up session data
9 my $cache = get_cache_handle();
10 my $data = $cache->get($session);
11 unless ($data and ref $data eq "ARRAY") { # something is wrong
12 show_form();
13 exit 0;
14 }
15 print header;
16 if ( $data->[0] ){
17 print start_html(-title=>'Sleep Results Done',-bgcolor=>'white');
18 # Checking.... print $session and $data->[0] to screen
20 print h2("$session");
21 print h2("$data->[0]");
22 # End of checking
23 print start_form(-name=>'data',-action=>$redirect_page);
24 print end_form();
25 print script("setTimeout(\"document.data.submit();\",2000);");
26 }
27 else{
28 print start_html(-title => "Sleep Results",
29 ($data->[0] ? () :
30 (-head => [""])));
31 print h1("Sleep Results");
32 print pre(escapeHTML($data->[0]));
33 print pre(escapeHTML($data->[1]));
34 print p(i("... continuing ...")) unless $data->[0];
35
36 }
37 print end_html;
38 }
39 elsif ( (my $slp = param('sleep')) eq 'sleep') {
40 my $session = get_session_id();
41 my $cache = get_cache_handle();
42 $cache->set($session, [0, ""]); # no data yet
43
44 if (my $pid = fork) { # parent does
45 delete_all(); # clear parameters
46 param('session', $session);
47 print redirect(self_url());
48 }
49 elsif (defined $pid) { # child does
50 close STDOUT; # so parent can go on
51 unless (open F, "-|") {
52 open STDERR, ">&=1";
53 exec "/path/to/run_sleep_commands.sh";
54 die "Cannot execute Sleep: $!";
55 }
56 my $buf = "";
57 while () {
58 $buf .= $_;
59 $cache->set($session, [0, $buf]);
60 }
61 $cache->set($session, [1, $buf]);
62 exit 0;
63 }
64 else {
65 die "Cannot fork: $!";
66 }
67 }
68 else { # display form
69 show_form();
70 }
71
72 exit 0;
sub show_form {
print header, start_html("Sleep"), h1("Sleep");
print start_form;
#print submit('traceroute to this host:'), " ", textfield('host');
print submit('Run Sleep Process:'), " ", textfield('sleep');
print end_form, end_html;
}
sub get_cache_handle {
require Cache::FileCache;
Cache::FileCache->new
({
namespace => 'sleep',
username => 'sara2005',
default_expires_in => '30 minutes',
auto_purge_interval => '4 hours',
});
}
sub get_session_id {
require Digest::MD5;
Digest::MD5::md5_hex(Digest::MD5::md5_hex(time().{}.rand().$$));
}