Make recent/ancient ages configurable
[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 print "Content-type: text/html\r\n\r\n";
13
14 doctype;
15 start 'html', xmlns => "http://www.w3.org/1999/xhtml";
16 start 'head';
17 tag 'meta', 'http-equiv' => "Content-Type",
18             'content'    => "text/html; charset=utf-8";
19 tag 'link', rel  => 'stylesheet',
20             type => 'text/css',
21             href => 'fate.css';
22 print "<title>FATE</title>\n";
23 end 'head';
24
25 start 'body';
26 h1 'FATE';
27
28 start 'table', id => 'index';
29 trowh 'Time', 'Arch', 'OS', 'Compiler', 'Rev', 'Result';
30 for my $slot (sort @slots) {
31     open R, "$fatedir/$slot/latest/report";
32     my $hdr  = split_header scalar <R>;
33     my $conf = split_config scalar <R>;
34     my $ntest = 0;
35     my $npass = 0;
36     my $rtext;
37     my $rclass;
38     while (<R>) {
39         my $rec = split_rec $_;
40         $$rec{status} == 0 and $npass++;
41         $ntest++;
42     }
43     close R;
44
45     my $time = parse_date $$hdr{date};
46     my $age  = time - $time;
47     my $agestr = agestr $age, $time;
48     my $ageclass;
49
50     if ($age < $recent_age) {
51         $ageclass = 'recent';
52     } elsif ($age > $ancient_age) {
53         $ageclass = 'ancient';
54     }
55
56     start 'tr', class => $ageclass;
57     start 'td';
58     anchor $agestr, href => "history.cgi?slot=$$hdr{slot}";
59     end 'td';
60     td $$conf{subarch} || $$conf{arch};
61     td $$conf{os};
62     td $$conf{cc};
63     td $$hdr{rev};
64     if ($npass) {
65         $rtext  = "$npass / $ntest";
66         $rclass = $npass==$ntest? 'pass' : $npass? 'warn' : 'fail';
67     } else {
68         $rtext  = $$hdr{errstr};
69         $rclass = 'fail'
70     }
71     start 'td', class => $rclass;
72     anchor $rtext, href => "report.cgi?slot=$$hdr{slot}&amp;time=$$hdr{date}";
73     end 'td';
74     end 'tr';
75     print "\n";
76 }
77 end 'table';
78 end 'body';
79 end 'html';