1#!/usr/bin/perl 2 3use CGI qw(:standard escapeHTML); 4 5# When something goes wrong before we start output, use this function 6# so there is still output 7sub failure { 8 print header("text/html"),start_html; 9 print "$_[0]\n"; 10 print end_html; 11 exit; 12} 13 14# Most of the work is done in this directory 15unless (chdir("/usr/tests/ltp/results")) { 16 failure("Could not get to the results directory\n"); 17} 18 19 20# grab the parameters that determine what's going on then branch 21$get_df = param("get_df"); 22if ($get_df) { 23 # copy a driver file and output it. 24 $get_df = (<$get_df*>)[0]; 25 ($host, $datestr, $suite, $type, $gz) = split(/\./, $get_df); 26 #print start_html, "<pre>\n"; 27 if ($gz) { 28 open (DF, "gunzip -c $get_df|") || print "$get_df not found\n"; 29 } else { 30 open (DF, "$get_df") || print "$get_df not found"; 31 } 32 if ($type eq "driver" || $type eq "summary") { 33 print header("text/plain"); 34 $zoom_tag = param("zoom_tag"); 35 if ($zoom_tag) { 36 while (<DF>) { 37 # find the start of a test 38 while (<DF>) { 39 if (/\<\<\<test_start\>\>\>/) { 40 $line = <DF>; 41 if ($line =~ /^tag=$zoom_tag /) { 42 print "<<<test_start>>>\n"; 43 print $line; 44 45 do { 46 $line = <DF>; 47 print $line; 48 } until ($line =~ /\<\<\<test_end\>\>\>/); 49 exit; 50 } 51 } 52 } 53 } 54 print "Did not find tag $zoom_tag\n"; 55 } else { 56 while (<DF>) { 57 print $_; 58 } 59 } 60 } elsif ($type eq "scanner") { 61 print header("text/html"); 62 print start_html, "<pre>\n"; 63 while (<DF>) { 64 print; 65 if (/^-+/) { last;} 66 } 67 @rest = <DF>; 68 # this is just to put the * at the end of the test case list 69 unless (param("raw")) { 70 foreach (@rest) { s/\*/{/; } 71 foreach (@rest) { s/(\s)-(\s)/\1}\2/; } 72 @rest = sort @rest; 73 foreach (@rest) { s/{/*/; } 74 foreach (@rest) { s/}/-/; } 75 } 76 77 foreach (@rest) { 78 s/(\S+)/<a href="results.cgi?get_df=$host.$datestr.$suite.driver&zoom_tag=\1">\1<\/a>/; 79 # colorize the status column 80 s/\bPASS\b/\<font color\=green\>PASS\<\/font\>/i; 81 s/\bFAIL\b/\<font color\=\"red\"\>FAIL\<\/font\>/i; 82 s/\bCONF\b/\<font color\=\"yellow\"\>CONF\<\/font\>/i; 83 s/\bBROK\b/\<font color\=\"blue\"\>BROK\<\/font\>/i; 84 print; 85 } 86 print "\n</pre>",end_html; 87 } 88 close(DF); 89 #print "\n</pre>\n",end_html; 90} else { 91 %results = (); 92 93 # run through the files in the results directory 94 @driver_files = <*driver*>; 95 foreach $df (sort(@driver_files)) { 96 97 ($host, $datestr, $suite, $type, $gz) = split(/\./, $df); 98 99 $a_rec = (); 100 $a_rec->{HOST} = $host; 101 $a_rec->{DATE} = $datestr; 102 $a_rec->{SUITE} = $suite; 103 $a_rec->{DRIVER_FILE} = $df; 104 105 $results{ $a_rec->{DRIVER_FILE} } = $a_rec; 106 } 107 108 # write the HTML file 109 print header("text/html"),start_html; 110 111 @ri = values %results; 112 @ri = sort { $a->{HOST} cmp $b->{HOST} 113 ||$b->{DATE} <=> $a->{DATE} 114 ||$a->{SUITE} cmp $b->{SUITE} } @ri; 115 $lasthost = ""; 116 $lastdate = ""; 117 $lastsuite = ""; 118 $indent = 0; 119 print "<table>\n"; 120 print "<tr><th>Hostname<th>Date<th>Suite</tr>\n"; 121 foreach $rp ( @ri ) { 122 $thishost = $rp->{HOST}; 123 $thisdate = $rp->{DATE}; 124 $thissuite = $rp->{SUITE}; 125 126 # figure out where is the table we need to start 127 if ($lasthost ne $thishost) { 128 $indent = 0; 129 } elsif ($lastdate ne $thisdate) { 130 $indent = 1; 131 } elsif ($lastsuite ne $thissuite) { 132 $indent = 2; 133 } 134 135 # write the rows we need depending on the starting point 136 # host level 137 if ($indent <= 0) { 138 print "<tr><td>$thishost\n"; 139 } 140 # date level 141 if ($indent <= 1) { 142 ($year, $month, $day, $hour, $min) = ($thisdate =~ /(\d+)(\d{2})(\d{2})(\d{2})(\d{2})/); 143 print "<tr><td><td>$year-$month-$day $hour:$min\n"; 144 } 145 # suite level 146 if ($indent <= 2) { 147 print "<tr><td><td><td>"; 148 print "$thissuite"; 149 print " [<a href=\"results.cgi?get_df=$rp->{DRIVER_FILE}\">driver output</a>]"; 150 print " [<a href=\"results.cgi?get_df=$thishost.$thisdate.$thissuite.scanner\">results</a>]"; 151 print " [<a href=\"results.cgi?get_df=$thishost.$thisdate.$thissuite.summary\">summary</a>]"; 152 153 print "\n"; 154 } 155 156 # make sure we update the $last... variables 157 $lasthost = $thishost; 158 $lastdate = $thisdate; 159 $lastsuite = $thissuite; 160 } 161 print "</table>\n"; 162 print end_html; 163} 164 165