App-Sysadmin-Log-Simple
view release on metacpan or search on metacpan
lib/App/Sysadmin/Log/Simple/HTTP.pm view on Meta::CPAN
package App::Sysadmin::Log::Simple::HTTP;
use strict;
use warnings;
# ABSTRACT: a HTTP (maybe RESTful?) logger for App::Sysadmin::Log::Simple
our $VERSION = '0.009'; # VERSION
use Carp;
use HTTP::Tiny;
use URI::Escape qw(uri_escape);
our $HTTP_TIMEOUT = 10;
sub new {
my $class = shift;
my %opts = @_;
my $app = $opts{app};
$app->{http}->{uri} ||= 'http://localhost';
$app->{http}->{method} ||= 'post';
$app->{http}->{method} = uc $app->{http}->{method};
return bless {
do_http => $app->{do_http},
http => $app->{http},
user => $app->{user},
}, $class;
}
sub log {
my $self = shift;
my $logentry = shift;
return unless $self->{do_http};
my $ua = HTTP::Tiny->new(
timeout => $HTTP_TIMEOUT,
agent => __PACKAGE__ . '/' . (__PACKAGE__->VERSION ? __PACKAGE__->VERSION : 'dev'),
);
my $res = sub {
if ( $self->{http}->{method} eq 'GET' ) {
my $params = $ua->www_form_urlencode({
user => $self->{user},
log => $logentry,
});
my $uri = $self->{http}->{uri} . "?$params";
return $ua->get($uri);
}
elsif ( $self->{http}->{method} eq 'POST' ) {
return $ua->post_form($self->{http}->{uri}, {
user => $self->{user},
log => $logentry,
});
}
elsif ( $self->{http}->{method} eq 'PUT' ) {
return $ua->put($self->{http}->{uri}, {
user => $self->{user},
log => $logentry,
});
}
else {
croak 'This shouldnt happen, as the method is populated internally. Something bad has happened'
}
}->();
carp sprintf('Failed to http log via %s to %s with code %d and error %s',
$self->{http}->{method},
$self->{http}->{uri},
$res->{status},
$res->{reason},
) unless $res->{success};
return "Logged to $self->{http}->{uri} via $self->{http}->{method}"
}
1;
__END__
=pod
=encoding utf-8
=head1 NAME
App::Sysadmin::Log::Simple::HTTP - a HTTP (maybe RESTful?) logger for App::Sysadmin::Log::Simple
=head1 VERSION
version 0.009
=head1 DESCRIPTION
This provides a log method that sends the log via a HTTP request. Which
may perhaps be considered to be a 'REST' request. Put, Get and Post are
will work. Though you might not be shown to be sane for doing so.
=head1 METHODS
=head2 new
This creates a new App::Sysadmin::Log::Simple::HTTP object. It takes a hash
of options:
=head3 http
A hashref containing keys:
=over 4
=item uri - default: http://localhost
=item method - default: post
=back
( run in 0.953 second using v1.01-cache-2.11-cpan-98e64b0badf )