| #!/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; |
| } |
| |