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 13     13   113693 use strict;
  13         24  
  13         337  
3 13     13   65 use warnings;
  13         36  
  13         353  
4 13     13   17337 use Time::HiRes qw(time);
  13         19752  
  13         65  
5              
6 13     13   2208 use Exporter qw(import);
  13         28  
  13         4550  
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 1471     1471 0 523151 $tracer_sngl;
30             }
31              
32             sub _new {
33 13     13   40 my ( $class, %opts ) = @_;
34 13         75 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 13     13   74 no strict 'refs';
  13         26  
  13         2980  
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 1471     1471   590724 : sub { 1 }
65             }
66             }
67              
68             sub bin2hex {
69 1     1 0 583 my $bin = shift;
70 1         15 my $c = 0;
71 1         3 my $s;
72              
73             join "", map {
74 1         11 $c++;
  18         20  
75 18 100       40 $s = !( $c % 16 ) ? "\n" : ( $c % 2 ) ? "" : " ";
    100          
76 18         38 $_ . $s
77             } unpack( "(H2)*", $bin );
78             }
79              
80             1;