File Coverage

blib/lib/XAS/Logmon/Format/Logstash.pm
Criterion Covered Total %
statement 9 30 30.0
branch n/a
condition n/a
subroutine 3 9 33.3
pod 2 3 66.6
total 14 42 33.3


line stmt bran cond sub pod time code
1             package XAS::Logmon::Format::Logstash;
2              
3             our $VERSION = '0.01';
4              
5 1     1   3 use Try::Tiny;
  1         1  
  1         44  
6 1     1   4 use Hash::Merge;
  1         1  
  1         39  
7              
8             use XAS::Class
9 1         5 debug => 0,
10             version => $VERSION,
11             base => 'XAS::Base',
12             utils => ':validation dotid trim',
13             constants => 'HASHREF',
14             codec => 'JSON',
15             accessors => 'hm',
16 1     1   3 ;
  1         1  
17              
18             # ----------------------------------------------------------------------
19             # Public Methods
20             # ----------------------------------------------------------------------
21              
22             sub dt2ls {
23 0     0 0   my $self = shift;
24 0           my ($dt, $zone) = validate_params(\@_, [
25             { isa => 'DateTime' },
26             { optional => 1, default => 'local' },
27             ]);
28              
29             try {
30              
31 0     0     $dt->set_time_zone($zone);
32              
33             } catch {
34              
35 0     0     my ($package, $file, $line) = caller(1);
36 0           my $ex = XAS::Exception->new({
37             type => dotid($self->class) . '.dt2ls.badzone',
38             info => $self->message('logmon_badzone', $package, $line, $zone)
39             });
40              
41 0           $ex->throw;
42              
43 0           };
44              
45 0           return $dt->strftime('%Y-%m-%dT%H:%M:%S.%3N%z');
46              
47             }
48              
49             sub format {
50 0     0 1   my $self = shift;
51             my ($data) = validate_params(\@_, [
52             { type => HASHREF,
53 0     0     callbacks => {'no datetime' => sub {defined($_[0]->{datetime}); }}
54             },
55 0           ]);
56              
57             my $event = {
58 0           '@timestamp' => $self->dt2ls($data->{'datetime'}, 'UTC'),
59             '@version' => 1,
60             };
61              
62 0           delete($data->{'datetime'});
63 0           delete($data->{'level'});
64 0           delete($data->{'task'});
65              
66 0           $event = $self->hm->merge($data, $event);
67              
68 0           return encode($event);
69              
70             }
71              
72             # ----------------------------------------------------------------------
73             # Private Methods
74             # ----------------------------------------------------------------------
75              
76             sub init {
77 0     0 1   my $class = shift;
78              
79 0           my $self = $class->SUPER::init(@_);
80              
81 0           $self->{'hm'} = Hash::Merge->new('RIGHT_PRECEDENT');
82              
83 0           return $self;
84              
85             }
86              
87             1;
88              
89             __END__