Home | History | Annotate | Download | only in cgi
      1 #!/usr/bin/perl
      2 
      3 use CGI qw(:standard escapeHTML);
      4 
      5 # When something goes wrong before we start output, use this function
      6 # so there is still output
      7 sub 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
     15 unless (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");
     22 if ($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