Initialise counters to zero for proper display
[fateserver.git] / index.cgi
1 #! /usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use FATE;
7
8 our $fatedir;
9 require "$ENV{FATEWEB_CONFIG}";
10
11 opendir D, $fatedir or fail 'Server error: $fatedir not found';
12 my @slots = grep /^[^.]/, readdir D;
13 closedir D;
14
15 print "Content-type: text/html\r\n\r\n";
16
17 doctype;
18 start 'html', xmlns => "http://www.w3.org/1999/xhtml";
19 start 'head';
20 tag 'meta', 'http-equiv' => "Content-Type",
21             'content'    => "text/html; charset=utf-8";
22 tag 'link', rel  => 'stylesheet',
23             type => 'text/css',
24             href => 'fate.css';
25 print "<title>FATE</title>\n";
26 end 'head';
27
28 start 'body';
29 h1 'FATE';
30
31 start 'table', id => 'index';
32 trowh 'Time', 'Arch', 'OS', 'Compiler', 'Rev', 'Result';
33 for my $slot (sort @slots) {
34     open R, "$fatedir/$slot/latest/report";
35     my @header = split /:/, scalar <R>;
36     my @config = split /:/, scalar <R>;
37     my ($date, $slot, $rev, $err, $errstr) = @header[2..6];
38     my ($arch, $subarch, $cpu, $os, $cc) = @config[1..5];
39     my $ntest = 0;
40     my $npass = 0;
41     my $rtext;
42     my $rclass;
43     while (<R>) {
44         my @rec = split /:/;
45         $rec[1] == 0 and $npass++;
46         $ntest++;
47     }
48     close R;
49     start 'tr';
50     start 'td'; start 'a', href => "history.cgi?slot=$slot";
51     print $date;
52     end 'td';
53     td $subarch || $arch;
54     td $os;
55     td $cc;
56     td $rev;
57     if ($npass) {
58         $rtext  = "$npass / $ntest";
59         $rclass = $npass==$ntest? 'pass' : $npass? 'warn' : 'fail';
60     } else {
61         $rtext  = $errstr;
62         $rclass = 'fail'
63     }
64     start 'td', class => $rclass;
65     start 'a', href => "report.cgi?slot=$slot&amp;time=$date";
66     print $rtext;
67     end 'a';
68     end 'td';
69     end 'tr';
70 }
71 end 'table';
72 end 'body';
73 end 'html';