package Transform::Alert::Output::SNMP;
our $VERSION = '1.00'; # VERSION
# ABSTRACT: Transform alerts to SNMP traps (base class)
use sanity;
use Moo;
use MooX::Types::MooseLike::Base qw(InstanceOf Maybe);
use Net::SNMP;
with 'Transform::Alert::Output';
has _session => (
is => 'rw',
isa => Maybe[InstanceOf['Net::SNMP']],
lazy => 1,
default => sub {
my $self = shift;
my ($session, $err) = Net::SNMP->session( %{$self->connopts} );
unless ($session) {
$self->log->error('SNMP Session failed: '.$err);
return;
}
return $session;
},
predicate => 1,
clearer => 1,
);
sub open {
my $self = shift;
$self->_session ||
# maybe+default+error still creates an undef attr, which would pass an 'exists' check on predicate
do { $self->_clear_session; return; };
}
sub opened { shift->_has_session; }
sub send { die "Dummy method send() called for Output::SNMPTrap! This must be overloaded!"; }
sub close {
my $self = shift;
if ($self->_has_session) {
$self->_session->close;
$self->_clear_session;
}
return 1;
}
sub _translate_msg {
my ($self, $msg) = @_;
$msg = $$msg if (ref $msg eq 'SCALAR');
$msg =~ s/^\s+|\s+$//g; # remove leading/trailing ws
return [ map { split /\s+/, $_, 3 } split /[\r\n]+/, $msg ];
}
42;
__END__
=pod
=encoding utf-8
=head1 NAME
Transform::Alert::Output::SNMP - Transform alerts to SNMP traps (base class)
=head1 SYNOPSIS
# In your configuration
<Output test>
Type SNMP::*
TemplateFile outputs/test.tt
# See Net::SNMP->new
<ConnOpts>
Hostname snmp.foobar.org
Port 161 # default
Version 1 # default
Community public # default
# ...etc., etc., etc...
# NonBlocking - DO NOT USE!
</ConnOpts>
</Output>
=head1 DESCRIPTION
This is actually a base class. You should use one of the other sub-classes of this, as this class doesn't actually send anything.
=head1 TODO
Use L<Net::SNMPu>, when that gets released...
=head1 AVAILABILITY
The project homepage is L<https://github.com/SineSwiper/Transform-Alert/wiki>.
The latest version of this module is available from the Comprehensive Perl
Archive Network (CPAN). Visit L<http://www.perl.com/CPAN/> to find a CPAN
site near you, or see L<https://metacpan.org/module/Transform::Alert/>.
=head1 AUTHOR
Brendan Byrd <BBYRD@CPAN.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2013 by Brendan Byrd.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
=cut