File Coverage

blib/lib/Protocol/TLS/Trace.pm
Criterion Covered Total %
statement 25 43 58.1
branch 5 8 62.5
condition n/a
subroutine 9 16 56.2
pod 0 10 0.0
total 39 77 50.6


line stmt bran cond sub pod time code
1             package Protocol::TLS::Trace;
2 2     2   10 use strict;
  2         3  
  2         68  
3 2     2   10 use warnings;
  2         4  
  2         57  
4 2     2   13786 use Time::HiRes qw(time);
  2         1999  
  2         13  
5              
6 2     2   440 use Exporter qw(import);
  2         5  
  2         1192  
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::TLS::Trace->_new(
21             min_level => ( exists $ENV{TLS_DEBUG} && exists $levels{ $ENV{TLS_DEBUG} } )
22             ? $levels{ $ENV{TLS_DEBUG} }
23             : $levels{error}
24             );
25             my $start_time = 0;
26              
27             sub tracer {
28 116     116 0 572 $tracer_sngl;
29             }
30              
31             sub _new {
32 2     2   7 my ( $class, %opts ) = @_;
33 2         13 bless {%opts}, $class;
34             }
35              
36             sub _log {
37 116     116   140 my ( $self, $level, $message ) = @_;
38 116 50       416 if ( $level >= $self->{min_level} ) {
39 0         0 chomp($message);
40 0         0 my $now = time;
41 0 0       0 if ( $now - $start_time < 60 ) {
42 0         0 $message =~ s/\n/\n /g;
43 0         0 printf "[%05.3f] %s\n", $now - $start_time, $message;
44             }
45             else {
46 0         0 my @t = ( localtime() )[ 5, 4, 3, 2, 1, 0 ];
47 0         0 $t[0] += 1900;
48 0         0 $t[1]++;
49 0         0 $message =~ s/\n/\n /g;
50 0         0 printf "[%4d-%02d-%02d %02d:%02d:%02d] %s\n", @t, $message;
51 0         0 $start_time = $now;
52             }
53             }
54             }
55              
56             sub debug {
57 116     116 0 244 shift->_log( 0, @_ );
58             }
59              
60             sub info {
61 0     0 0 0 shift->_log( 1, @_ );
62             }
63              
64             sub notice {
65 0     0 0 0 shift->_log( 2, @_ );
66             }
67              
68             sub warning {
69 0     0 0 0 shift->_log( 3, @_ );
70             }
71              
72             sub error {
73 0     0 0 0 shift->_log( 4, @_ );
74             }
75              
76             sub critical {
77 0     0 0 0 shift->_log( 5, @_ );
78             }
79              
80             sub alert {
81 0     0 0 0 shift->_log( 6, @_ );
82             }
83              
84             sub emergency {
85 0     0 0 0 shift->_log( 7, @_ );
86             }
87              
88             sub bin2hex {
89 10     10 0 14 my $bin = shift;
90 10         16 my $c = 0;
91 10         10 my $s;
92              
93 200         182 join "", map {
94 10         69 $c++;
95 200 100       376 $s = !( $c % 16 ) ? "\n" : ( $c % 2 ) ? "" : " ";
    100          
96 200         313 $_ . $s
97             } unpack( "(H2)*", $bin );
98             }
99              
100             1