#!/usr/bin/perl use CGI qw(:standard escapeHTML); # When something goes wrong before we start output, use this function # so there is still output sub failure { print header("text/html"),start_html; print "$_[0]\n"; print end_html; exit; } # Most of the work is done in this directory unless (chdir("/usr/tests/ltp/results")) { failure("Could not get to the results directory\n"); } # grab the parameters that determine what's going on then branch $get_df = param("get_df"); if ($get_df) { # copy a driver file and output it. $get_df = (<$get_df*>)[0]; ($host, $datestr, $suite, $type, $gz) = split(/\./, $get_df); #print start_html, "<pre>\n"; if ($gz) { open (DF, "gunzip -c $get_df|") || print "$get_df not found\n"; } else { open (DF, "$get_df") || print "$get_df not found"; } if ($type eq "driver" || $type eq "summary") { print header("text/plain"); $zoom_tag = param("zoom_tag"); if ($zoom_tag) { while (<DF>) { # find the start of a test while (<DF>) { if (/\<\<\<test_start\>\>\>/) { $line = <DF>; if ($line =~ /^tag=$zoom_tag /) { print "<<<test_start>>>\n"; print $line; do { $line = <DF>; print $line; } until ($line =~ /\<\<\<test_end\>\>\>/); exit; } } } } print "Did not find tag $zoom_tag\n"; } else { while (<DF>) { print $_; } } } elsif ($type eq "scanner") { print header("text/html"); print start_html, "<pre>\n"; while (<DF>) { print; if (/^-+/) { last;} } @rest = <DF>; # this is just to put the * at the end of the test case list unless (param("raw")) { foreach (@rest) { s/\*/{/; } foreach (@rest) { s/(\s)-(\s)/\1}\2/; } @rest = sort @rest; foreach (@rest) { s/{/*/; } foreach (@rest) { s/}/-/; } } foreach (@rest) { s/(\S+)/<a href="results.cgi?get_df=$host.$datestr.$suite.driver&zoom_tag=\1">\1<\/a>/; # colorize the status column s/\bPASS\b/\<font color\=green\>PASS\<\/font\>/i; s/\bFAIL\b/\<font color\=\"red\"\>FAIL\<\/font\>/i; s/\bCONF\b/\<font color\=\"yellow\"\>CONF\<\/font\>/i; s/\bBROK\b/\<font color\=\"blue\"\>BROK\<\/font\>/i; print; } print "\n</pre>",end_html; } close(DF); #print "\n</pre>\n",end_html; } else { %results = (); # run through the files in the results directory @driver_files = <*driver*>; foreach $df (sort(@driver_files)) { ($host, $datestr, $suite, $type, $gz) = split(/\./, $df); $a_rec = (); $a_rec->{HOST} = $host; $a_rec->{DATE} = $datestr; $a_rec->{SUITE} = $suite; $a_rec->{DRIVER_FILE} = $df; $results{ $a_rec->{DRIVER_FILE} } = $a_rec; } # write the HTML file print header("text/html"),start_html; @ri = values %results; @ri = sort { $a->{HOST} cmp $b->{HOST} ||$b->{DATE} <=> $a->{DATE} ||$a->{SUITE} cmp $b->{SUITE} } @ri; $lasthost = ""; $lastdate = ""; $lastsuite = ""; $indent = 0; print "<table>\n"; print "<tr><th>Hostname<th>Date<th>Suite</tr>\n"; foreach $rp ( @ri ) { $thishost = $rp->{HOST}; $thisdate = $rp->{DATE}; $thissuite = $rp->{SUITE}; # figure out where is the table we need to start if ($lasthost ne $thishost) { $indent = 0; } elsif ($lastdate ne $thisdate) { $indent = 1; } elsif ($lastsuite ne $thissuite) { $indent = 2; } # write the rows we need depending on the starting point # host level if ($indent <= 0) { print "<tr><td>$thishost\n"; } # date level if ($indent <= 1) { ($year, $month, $day, $hour, $min) = ($thisdate =~ /(\d+)(\d{2})(\d{2})(\d{2})(\d{2})/); print "<tr><td><td>$year-$month-$day $hour:$min\n"; } # suite level if ($indent <= 2) { print "<tr><td><td><td>"; print "$thissuite"; print " [<a href=\"results.cgi?get_df=$rp->{DRIVER_FILE}\">driver output</a>]"; print " [<a href=\"results.cgi?get_df=$thishost.$thisdate.$thissuite.scanner\">results</a>]"; print " [<a href=\"results.cgi?get_df=$thishost.$thisdate.$thissuite.summary\">summary</a>]"; print "\n"; } # make sure we update the $last... variables $lasthost = $thishost; $lastdate = $thisdate; $lastsuite = $thissuite; } print "</table>\n"; print end_html; }