Update to new website style
[fateserver.git] / history.cgi
1 #! /usr/bin/perl
2 #
3 # Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
4 #
5 # Permission to use, copy, modify, and distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
8 #
9 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
12 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17 use strict;
18 use warnings;
19
20 use CGI qw/param/;
21 use FATE;
22 use Time::Zone;
23 use HTML::Entities;
24
25 my $slot = param 'slot';
26 my $slotdir = "$fatedir/$slot";
27
28 my $slot_escaped = encode_entities $slot;
29
30 opendir D, $slotdir or fail "Slot $slot_escaped not found";
31 my @reps = grep { /^[0-9]/ and -d "$slotdir/$_" } readdir D;
32 close D;
33
34 @reps or fail "No data in $fatedir";
35
36 print "Content-type: text/html\r\n\r\n";
37
38 head1;
39 print "<title>FATE: $slot</title>\n";
40 head2;
41 print "Report history for $slot";
42 head3;
43
44 start 'div', class => 'table-responsive';
45 start 'table', id => 'history', class => 'replist table';
46 start 'thead';
47 trowh 'Time', 'Rev', 'Arch', 'OS', 'Compiler', 'Warnings', 'Tests';
48 end 'thead';
49 start 'tbody';
50 for my $date ((sort { $b cmp $a } @reps)[0..49]) {
51     my $rep = load_summary $slot, $date or next;
52     my $ntest = $$rep{ntests};
53     my $npass = $$rep{npass};
54     my $time = parse_date $$rep{date};
55     my $age  = time - tz_local_offset() - $time;
56     my $rtext;
57     my $rclass;
58
59     start 'tr', class => 'alt hilight';
60     td agestr $age, $time;
61     if ($gitweb and $$rep{rev} =~ /(N-)?(.*)/) {
62         start 'td';
63         anchor $$rep{rev}, href => "$gitweb;a=commit;h=$2";
64         end 'td';
65     } else {
66         td $$rep{rev};
67     }
68     td $$rep{subarch} || $$rep{arch};
69     td $$rep{os};
70     td $$rep{cc};
71     td $$rep{nwarn};
72     if ($npass) {
73         $rtext  = "$npass / $ntest";
74         $rclass = $npass==$ntest? 'pass' : $npass? 'warn' : 'fail';
75     } elsif (!$ntest and !$$rep{status}) {
76         $rtext  = "build only";
77         $rclass = $$rep{status}? 'fail' : 'pass';
78     } else {
79         $rtext  = $$rep{errstr};
80         $rclass = 'fail'
81     }
82     start 'td', class => $rclass;
83     anchor $rtext, href => href slot => $$rep{slot}, time => $$rep{date};
84     end 'td';
85     end 'tr';
86     print "\n";
87 }
88 end 'tbody';
89 end 'table';
90 end 'div';
91 footer;