File Coverage

blib/lib/Gruntmaster/Opener.pm
Criterion Covered Total %
statement 27 27 100.0
branch 7 8 87.5
condition n/a
subroutine 8 8 100.0
pod 0 1 0.0
total 42 44 95.4


line stmt bran cond sub pod time code
1             package Gruntmaster::Opener;
2 2     2   70602 use 5.014;
  2         14  
3 2     2   11 use warnings;
  2         5  
  2         70  
4              
5 2     2   491 use parent qw/Exporter/;
  2         320  
  2         12  
6 2     2   117 use re '/s';
  2         4  
  2         266  
7              
8             our @EXPORT = qw/handle_line/;
9             our @EXPORT_OK = @EXPORT;
10             our $VERSION = '6000.001';
11              
12 2     2   977 use Date::Parse qw/str2time/;
  2         13638  
  2         159  
13 2     2   472 use Gruntmaster::Data;
  2         13  
  2         737  
14              
15             sub _analyze_request {
16 4     4   18 s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg for @_; # From URI::Escape POD
  9         31  
17 4         10 my ($req, $parms) = @_;
18 4 50       17 return unless $parms =~ /contest=(\w+)/;
19 4         9 my $ct = $1;
20 4 100       27 return $req =~ m,/pb/(\w+), ? ($1, $ct) : ();
21             }
22              
23             sub handle_line {
24 8 100   8 0 4236 my ($owner, $datetime, $request, $parms) = $_[0] =~
25             /(\w+)\s # user
26             \[([^]]+)\]\s # date
27             "\w+\s # request method
28             ([^" ?]+) # URL (without query string)
29             [?]
30             ([^" ]+)\s # query string
31             [^"]+"\s # HTTP version
32             2 # response code starts with 2
33             /x or return;
34 4 100       16 my ($pb, $ct) = _analyze_request $request, $parms or return;
35 3         11 my $time = str2time $datetime;
36 3         844 open_problem $ct, $pb, $owner, $time;
37             }
38              
39             1;
40             __END__