App-Spoor
view release on metacpan or search on metacpan
lib/App/Spoor/ErrorEntryParser.pm view on Meta::CPAN
package App::Spoor::ErrorEntryParser;
use v5.10;
use strict;
use warnings;
=head1 NAME
App::Spoor::ErrorEntryParser
=head1 VERSION
Version 0.01
=cut
our $VERSION = '0.01';
=head1 SYNOPSIS
This package contains the necessary functionality to parse CPanel error log entries.
=head1 SUBROUTINES/METHODS
=head2 parse
This subroutine accepts a single line from a CPanel error log (as a string) and returns a reference to a hash
representation of that entry.
The hash representation contains the following elements:
=over 2
=item * type: This is hardcoded to 'error'
=item * event: A description of the event that the entry refers to - can be one of forward_added_partial_recipient, unrecognised.
=item * log_time: A DateTime instance representing the time of the log entry. It is not set if the event is 'unrecognised'.
=item * context: The context within which the operation is being performed can be either 'mailbox' or 'domain'. It is not set if the event is 'unrecognised'.
=item * forward_type: Can be one of 'system_user', 'pipe' or 'email'. It is not set if the event is 'unrecognised'.
=item * forward_to: The recipient of the forwarded email. It is not set if the event is 'unrecognised'.
=item * email: The mailbox that the forward is being applied to. It is not set if the event is 'unrecognised'.
=item * status: The status of the request is hardcoded to success. It is not set if the event is 'unrecognised'.
=back
=cut
sub parse {
use DateTime::Format::Strptime;
use JSON;
my $log_entry = shift;
my $date_parser = DateTime::Format::Strptime->new(pattern => '%Y-%m-%d %H:%M:%S %z', on_error => 'croak');
my %response;
my $data_ref;
my $timestamp;
my $forward_type;
if ($log_entry =~ /
\A
\[(?<timestamp>[^\]]+)\]\s
info\s
\[spoor_forward_added\]\s
(?<data>{.+})
\Z
/x) {
$data_ref = from_json($+{data});
$timestamp = $date_parser->parse_datetime($+{timestamp})->epoch();
if ($data_ref->{args}{fwdopt} eq 'system') {
$forward_type = 'system_user';
} elsif ($data_ref->{args}{fwdopt} eq 'pipe') {
$forward_type = 'pipe';
} else {
$forward_type = 'email';
}
%response = (
type => 'error',
event => 'forward_added_partial_recipient',
context => ($data_ref->{args}{domain} eq '' ? 'mailbox' : 'domain'),
forward_type =>$forward_type,
forward_to => $data_ref->{result}[0]{forward},
email => $data_ref->{result}[0]{email},
log_time => $timestamp,
status => 'success'
);
} else {
%response = (
type => 'error',
event => 'unrecognised',
);
}
return \%response;
}
=head1 AUTHOR
Rory McKinley, C<< <rorymckinley at capefox.co> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-. at rt.cpan.org>, or through
the web interface at L<https://rt.cpan.org/NoAuth/ReportBug.html?Queue=.>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc App::Spoor::ErrorEntryParser
( run in 1.330 second using v1.01-cache-2.11-cpan-d8267643d1d )