index: avoid uninitialised value warnings from $ageclass
[fateserver.git] / index.cgi
1 #! /usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use FATE;
7
8 opendir D, $fatedir or fail 'Server error: $fatedir not found';
9 my @slots = grep /^[^.]/, readdir D;
10 closedir D;
11
12 my @reps;
13 my $allpass = 0;
14 my $allfail = 0;
15
16 for my $slot (@slots) {
17     my $rep = load_summary $slot, 'latest' or next;
18     push @reps, $rep;
19     if ($$rep{npass} == 0) {
20         $allfail++;
21     } elsif ($$rep{npass} == $$rep{ntests}) {
22         $allpass++;
23     }
24 }
25
26 $allpass = int 100 * $allpass / @reps;
27 $allfail = int 100 * $allfail / @reps;
28 my $warn = int 100 - $allpass - $allfail;
29
30 print "Content-type: text/html\r\n\r\n";
31
32 doctype;
33 start 'html', xmlns => "http://www.w3.org/1999/xhtml";
34 start 'head';
35 tag 'meta', 'http-equiv' => "Content-Type",
36             'content'    => "text/html; charset=utf-8";
37 tag 'link', rel  => 'stylesheet',
38             type => 'text/css',
39             href => 'fate.css';
40 print "<title>FATE</title>\n";
41 end 'head';
42
43 start 'body';
44 h1 'FATE';
45
46 start 'table', id => 'index', class => 'replist';
47
48 start 'tr';
49 start 'td', colspan => 6, id => 'failometer';
50 span '&nbsp;', class => 'pass', style => "width: ${allpass}%";
51 span '&nbsp;', class => 'warn', style => "width: ${warn}%";
52 span '&nbsp;', class => 'fail', style => "width: ${allfail}%";
53 end 'td';
54 end 'tr';
55 trowa { style => 'display: none' }; # maintain even/odd row count
56
57 trowh 'Time', 'Arch', 'OS', 'Compiler', 'Rev', 'Result';
58 for my $rep (sort { $$a{slot} cmp $$b{slot} } @reps) {
59     my $ntest = $$rep{ntests};
60     my $npass = $$rep{npass};
61     my $time = parse_date $$rep{date};
62     my $age  = time - $time;
63     my $agestr = agestr $age, $time;
64     my $ageclass = '';
65     my $rtext;
66     my $rclass;
67
68     if ($age < $recent_age) {
69         $ageclass = 'recent';
70     } elsif ($age > $ancient_age) {
71         $ageclass = 'ancient';
72     }
73
74     start 'tr', class => "$ageclass alt hilight";
75     start 'td';
76     anchor $agestr, href => "history.cgi?slot=$$rep{slot}";
77     end 'td';
78     td $$rep{subarch} || $$rep{arch};
79     td $$rep{os};
80     td $$rep{cc};
81     td $$rep{rev};
82     if ($npass) {
83         $rtext  = "$npass / $ntest";
84         $rclass = $npass==$ntest? 'pass' : $npass? 'warn' : 'fail';
85     } else {
86         $rtext  = $$rep{errstr};
87         $rclass = 'fail'
88     }
89     start 'td', class => $rclass;
90     anchor $rtext, href => "report.cgi?slot=$$rep{slot}&amp;time=$$rep{date}";
91     end 'td';
92     end 'tr';
93     print "\n";
94 }
95 end 'table';
96 end 'body';
97 end 'html';