165 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
| #!/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;
 | |
| }
 | |
| 
 |