]>
Commit | Line | Data |
---|---|---|
42546e6c MG |
1 | package Gruntmaster::Page::Log; |
2 | ||
3 | use 5.014000; | |
4 | use strict; | |
5 | use warnings; | |
6 | use parent qw/Exporter/; | |
7 | our @EXPORT_OK = qw/generate/; | |
8 | our $VERSION = '0.001'; | |
9 | ||
10 | use constant TITLE => 'Job log'; | |
11 | ||
12 | use Fcntl qw/:flock/; | |
13 | use HTML::Template::Compiled; | |
14 | use IO::File; | |
15 | use POSIX qw/strftime/; | |
16 | use YAML::Any qw/LoadFile/; | |
17 | use Gruntmaster::Page qw/header footer/; | |
18 | ||
19 | my %templates = ( | |
20 | en => <<'HTML', | |
21 | <table border> | |
22 | <thead> | |
23 | <tr><th>ID<th>Problem<th>Date<th>Size<th>User<th>Result | |
24 | <tbody> | |
25 | <tmpl_loop log><tr><td><a href="<tmpl_var id>"><tmpl_var id></a> | |
26 | <td><a href="/pb/<tmpl_var problem>"><tmpl_var name></a> | |
27 | <td><tmpl_var date> | |
28 | <td><a href="<tmpl_var id>/in/<tmpl_var filename>"<tmpl_if private> data-private</tmpl_if>><tmpl_var size></a> | |
29 | <td><tmpl_var user><td class="r<tmpl_var result>"><tmpl_var result_text> | |
30 | </tmpl_loop> | |
31 | </table> | |
32 | HTML | |
33 | ); | |
34 | ||
35 | $templates{$_} = header($_, TITLE) . $templates{$_} for keys %templates; | |
36 | $templates{$_} .= footer $_ for keys %templates; | |
37 | ||
38 | sub generate{ | |
39 | my $template = $templates{$_[1]}; | |
40 | my $htc = HTML::Template::Compiled->new(scalarref => \$template); | |
41 | IO::File->new('>log/meta.yml')->close unless -f 'log/meta.yml'; | |
42 | flock my $metafh = IO::File->new('<log/meta.yml'), LOCK_SH; | |
43 | my $meta = LoadFile 'log/meta.yml'; | |
44 | my @log = sort { $b->{id} <=> $a->{id} } map { | |
45 | my $meta = LoadFile "log/$_/meta.yml"; | |
46 | +{ id => $_, | |
47 | date => strftime ('%c' => localtime $meta->{date}), | |
48 | user => $meta->{user}, | |
49 | result => $meta->{result}, | |
50 | name => $meta->{name}, | |
51 | problem => $meta->{problem}, | |
52 | filename => $meta->{files}{prog}{name}, | |
53 | (defined $meta->{private} ? (private => $meta->{private}) : ()), | |
54 | size => sprintf ("%.2f KiB", (-s "log/$_/in/" . $meta->{files}{prog}{name}) / 1024), | |
55 | result_text => $meta->{result_text}} } 1 .. $meta->{last}; | |
56 | $htc->param(log => \@log); | |
57 | $htc->output | |
58 | } | |
59 | ||
60 | 1 |