File Coverage

blib/lib/Protocol/HTTP2/Trace.pm
Criterion Covered Total %
statement 26 40 65.0
branch 4 6 66.6
condition n/a
subroutine 9 11 81.8
pod 0 2 0.0
total 39 59 66.1


line stmt bran cond sub pod time code
1             package Protocol::HTTP2::Trace;
2 14     14   80381 use strict;
  14         19  
  14         341  
3 14     14   43 use warnings;
  14         27  
  14         310  
4 14     14   6408 use Time::HiRes qw(time);
  14         13935  
  14         50  
5              
6 14     14   1756 use Exporter qw(import);
  14         19  
  14         3474  
7             our @EXPORT_OK = qw(tracer bin2hex);
8              
9             my %levels = (
10             debug => 0,
11             info => 1,
12             notice => 2,
13             warning => 3,
14             error => 4,
15             critical => 5,
16             alert => 6,
17             emergency => 7,
18             );
19              
20             my $tracer_sngl = Protocol::HTTP2::Trace->_new(
21             min_level =>
22             ( exists $ENV{HTTP2_DEBUG} && exists $levels{ $ENV{HTTP2_DEBUG} } )
23             ? $levels{ $ENV{HTTP2_DEBUG} }
24             : $levels{error}
25             );
26             my $start_time = 0;
27              
28             sub tracer {
29 2516     2516 0 308028 $tracer_sngl;
30             }
31              
32             sub _new {
33 14     14   24 my ( $class, %opts ) = @_;
34 14         60 bless {%opts}, $class;
35             }
36              
37             sub _log {
38 0     0   0 my ( $self, $level, $message ) = @_;
39 0         0 $level = uc($level);
40 0         0 chomp($message);
41 0         0 my $now = time;
42 0 0       0 if ( $now - $start_time < 60 ) {
43 0         0 $message =~ s/\n/\n /g;
44 0         0 printf "[%05.3f] %s %s\n", $now - $start_time, $level, $message;
45             }
46             else {
47 0         0 my @t = ( localtime() )[ 5, 4, 3, 2, 1, 0 ];
48 0         0 $t[0] += 1900;
49 0         0 $t[1]++;
50 0         0 $message =~ s/\n/\n /g;
51 0         0 printf "[%4d-%02d-%02d %02d:%02d:%02d] %s %s\n", @t, $level, $message;
52 0         0 $start_time = $now;
53             }
54             }
55              
56             {
57 14     14   58 no strict 'refs';
  14         17  
  14         2245  
58             for my $l ( keys %levels ) {
59             *{ __PACKAGE__ . "::" . $l } =
60             ( $levels{$l} >= $tracer_sngl->{min_level} )
61             ? sub {
62 0     0   0 shift->_log( $l, @_ );
63             }
64 2516     2516   346475 : sub { 1 }
65             }
66             }
67              
68             sub bin2hex {
69 1     1 0 718 my $bin = shift;
70 1         1 my $c = 0;
71 1         2 my $s;
72              
73             join "", map {
74 1         9 $c++;
  18         11  
75 18 100       26 $s = !( $c % 16 ) ? "\n" : ( $c % 2 ) ? "" : " ";
    100          
76 18         21 $_ . $s
77             } unpack( "(H2)*", $bin );
78             }
79              
80             1;