File Coverage

blib/lib/Log/FreeSWITCH/Line.pm
Criterion Covered Total %
statement 35 35 100.0
branch 6 6 100.0
condition 3 3 100.0
subroutine 9 9 100.0
pod 2 2 100.0
total 55 55 100.0


line stmt bran cond sub pod time code
1             package Log::FreeSWITCH::Line;
2              
3 4     4   120686 use base qw(Exporter);
  4         37  
  4         440  
4 4     4   24 use strict;
  4         7  
  4         94  
5 4     4   19 use warnings;
  4         7  
  4         126  
6              
7 4     4   1760 use Error::Pure qw(err);
  4         22310  
  4         66  
8 4     4   1829 use Log::FreeSWITCH::Line::Data;
  4         11  
  4         126  
9 4     4   27 use Readonly;
  4         9  
  4         190  
10 4     4   22 use Scalar::Util qw(blessed);
  4         6  
  4         1716  
11              
12             Readonly::Array our @EXPORT_OK => qw{parse serialize};
13             Readonly::Scalar our $LOG_REGEXP => qr{(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2}\.?\d*)\s+\[(\w+)\]\s+([^:]+):(\d+)\s+(.*)};
14             Readonly::Scalar our $SPACE => q{ };
15              
16             our $VERSION = 0.07;
17              
18             # Parse FreeSWITCH log line.
19             sub parse {
20 4     4 1 25864 my $data = shift;
21 4         8 my $data_o;
22 4 100       74 if ($data =~ m/^$LOG_REGEXP$/ms) {
23 3         24 $data_o = Log::FreeSWITCH::Line::Data->new(
24             'date' => $1,
25             'file' => $4,
26             'file_line' => $5,
27             'message' => $6,
28             'raw' => $data,
29             'time' => $2,
30             'type' => $3,
31             );
32             } else {
33 1         6 err 'Cannot parse data.',
34             'Data', $data;
35             }
36 3         213 return $data_o;
37             }
38              
39             # Serialize Log::FreeSWITCH::Line::Data object to FreeSWITCH log line.
40             sub serialize {
41 5     5 1 28865 my $data_o = shift;
42              
43             # Check object.
44 5 100 100     62 if (! blessed($data_o) || ! $data_o->isa('Log::FreeSWITCH::Line::Data')) {
45 2         62 err "Serialize object must be 'Log::FreeSWITCH::Line::Data' object.";
46             }
47              
48             # Serialize.
49 3         13 my $data = $data_o->date.
50             $SPACE.$data_o->time.
51             $SPACE.'['.$data_o->type.']'.
52             $SPACE.$data_o->file.':'.$data_o->file_line.
53             $SPACE;
54 3 100       95 if (defined $data_o->message) {
55 2         15 $data .= $data_o->message;
56             }
57 3         36 $data_o->raw($data);
58 3         25 return $data;
59             }
60              
61             1;
62              
63             __END__
64              
65             =pod
66              
67             =encoding utf8
68              
69             =head1 NAME
70              
71             Log::FreeSWITCH::Line - FreeSWITCH log line parsing and serializing.
72              
73             =head1 SYNOPSIS
74              
75             use Log::FreeSWITCH::Line qw(parse serialize);
76              
77             my $data_o = parse($data);
78             my $data = serialize($data_o);
79              
80             =head1 SUBROUTINES
81              
82             =over 8
83              
84             =item C<parse($data)>
85              
86             Parse FreeSWITCH log line.
87             Returns Log::FreeSWITCH::Line::Data object.
88              
89             =item C<serialize($data_o)>
90              
91             Serialize Log::FreeSWITCH::Line::Data object to FreeSWITCH log line.
92             Returns string.
93              
94             =back
95              
96             =head1 ERRORS
97              
98             parse():
99             Cannot parse data.
100             Data: %s
101              
102             serialize():
103             Serialize object must be 'Log::FreeSWITCH::Line::Data' object.
104              
105             =head1 EXAMPLE1
106              
107             use strict;
108             use warnings;
109              
110             use Data::Printer;
111             use Log::FreeSWITCH::Line qw(parse);
112              
113             # Log record.
114             my $data = '2014-07-01 13:37:53.973562 [DEBUG] sofia.c:4045 inbound-codec-prefs [PCMA]';
115              
116             # Parse.
117             my $data_o = parse($data);
118              
119             # Dump.
120             p $data_o;
121              
122             # Output:
123             # Log::FreeSWITCH::Line::Data {
124             # Parents Mo::Object
125             # public methods (0)
126             # private methods (1) : _datetime
127             # internals: {
128             # date "2014-07-01",
129             # file "sofia.c",
130             # file_line 4045,
131             # message "inbound-codec-prefs [PCMA]",
132             # raw "2014-07-01 13:37:53.973562 [DEBUG] sofia.c:4045 inbound-codec-prefs [PCMA]",
133             # time "13:37:53.973562",
134             # type "DEBUG"
135             # }
136             # }
137              
138             =head1 EXAMPLE2
139              
140             use strict;
141             use warnings;
142              
143             use Log::FreeSWITCH::Line qw(serialize);
144             use Log::FreeSWITCH::Line::Data;
145              
146             # Data.
147             my $record = Log::FreeSWITCH::Line::Data->new(
148             'date' => '2014-07-01',
149             'file' => 'sofia.c',
150             'file_line' => 4045,
151             'message' => 'inbound-codec-prefs [PCMA]',
152             'time' => '13:37:53.973562',
153             'type' => 'DEBUG',
154             );
155              
156             # Serialize and print to stdout.
157             print serialize($record)."\n";
158              
159             # Output:
160             # 2014-07-01 13:37:53.973562 [DEBUG] sofia.c:4045 inbound-codec-prefs [PCMA]
161              
162             =head1 DEPENDENCIES
163              
164             L<Error::Pure>,
165             L<Exporter>,
166             L<Log::FreeSWITCH::Line::Data>,
167             L<Readonly>,
168             L<Scalar::Util>.
169              
170             =head1 SEE ALSO
171              
172             =over
173              
174             =item L<Log::FreeSWITCH::Line::Data>
175              
176             Data object which represents FreeSWITCH log line.
177              
178             =back
179              
180             =head1 REPOSITORY
181              
182             L<https://github.com/michal-josef-spacek/Log-FreeSWITCH-Line>
183              
184             =head1 AUTHOR
185              
186             Michal Josef Špaček L<mailto:skim@cpan.org>
187              
188             L<http://skim.cz>
189              
190             =head1 LICENSE AND COPYRIGHT
191              
192             © 2014-2021 Michal Josef Špaček
193              
194             BSD 2-Clause License
195              
196             =head1 VERSION
197              
198             0.07
199              
200             =cut