AnyEvent-ZabbixSender
view release on metacpan or search on metacpan
ZabbixSender.pm view on Meta::CPAN
You can specify various configuration parameters. The term C<@items>
refers to an array with C<[key, value, clock]> array-refs.
=over 4
=item server => "$hostname:$port" (default: C<localhost:10051>)
The zabbix server to connect to.
=item host => $name (default: local nodename)
The submission host, the "technical" name from tghe zabbix configuration.
=item delay => $seconds (default: C<0>)
If non-zero, then the module will gather data submissions for up to this
number of seconds before actually submitting them as a single batch.
Submissions can get batched even if C<0>, as events submitted while the
connection is being established or retried will be batched together in any
case.
=item queue_time => $seconds (default: C<3600>)
The amount of time a data item will be queued until it is thrown away when
the server cannot be reached.
=item linger_time => $seconds (default: same as C<queue_time>)
The amount of time the module will linger in its destructor until all
items have been submitted.
=item retry_min => $seconds (default: C<30>)
=item retry_max => $seconds (default: C<300>)
The minimum and maximum retry times when the server cannot be reached.
=item on_error => $cb->($zbx, \@items, $msg) (default: log and continue)
Called on any protocol errors - these generally indicate that something
other than a zabbix server is running on a port. The given key-value pairs
are the lost items.
=item on_loss => $cb->($zbx, \@items) (default: log and continue)
Will be called when some data items are thrown away (this happens if the
server isn't reachable for at least C<queue_time> seconds),
=item on_response => $cb->($zbx, \@items, \%response) (default: not called)
Will be called with the (generally rather useless) response form the
zabbix server.
=back
=cut
our $NOP = sub { };
my $json = eval { require JSON::XS; JSON::XS->new } || do { require JSON::PP; JSON::PP->new };
$json->utf8;
sub new {
my $class = shift;
my $self = bless {
server => "localhost:10051",
delay => 0,
retry_min => 30,
retry_max => 300,
queue_time => 3600,
on_response => $NOP,
on_error => sub {
AE::log 4 => "$_[0]{zhost}:$_[0]{zport}: $_[2]"; # error
},
on_loss => sub {
my $nitems = @{ $_[1] };
AE::log 5 => "$_[0]{zhost}:$_[0]{zport}: $nitems items lost"; # warn
},
@_,
on_clear => $NOP,
}, $class;
($self->{zhost}, $self->{zport}) = AnyEvent::Socket::parse_hostport $self->{server}, 10051;
$self->{host} //= do {
require POSIX;
(POSIX::uname())[1]
};
$self->{linger_time} //= $self->{queue_time};
$self
}
sub DESTROY {
my ($self) = @_;
$self->_wait;
%$self = ();
}
sub _wait {
my ($self) = @_;
while (@{ $self->{queue} } || $self->{sending}) {
my $cv = AE::cv;
my $to = AE::timer $self->{linger_time}, 0, $cv;
local $self->{on_clear} = $cv;
$cv->recv;
}
}
=item $zbx->submit ($k, $v[, $clock[, $host]])
( run in 0.985 second using v1.01-cache-2.11-cpan-39bf76dae61 )