AnyEvent-ZabbixSender
view release on metacpan or search on metacpan
ZabbixSender.pm view on Meta::CPAN
push @{ $self->{queue} }, [AE::now, [[$k, $v, $clock, $host]]];
$self->_send;
}
# start sending
sub _send {
my ($self) = @_;
if ($self->{delay}) {
Scalar::Util::weaken $self;
$self->{delay_w} ||= AE::timer $self->{delay}, 0, sub {
delete $self->{delay_w};
$self->{send_immediate} = 1;
$self->_send2 unless $self->{sending}++;
};
} else {
$self->{send_immediate} = 1;
$self->_send2 unless $self->{sending}++;
}
}
# actually do send
sub _send2 {
my ($self) = @_;
Scalar::Util::weaken $self;
$self->{connect_w} = AnyEvent::Socket::tcp_connect $self->{zhost}, $self->{zport}, sub {
my ($fh) = @_;
$fh
or return $self->_retry;
delete $self->{retry};
delete $self->{send_immediate};
my $data = delete $self->{queue};
ZabbixSender.pm view on Meta::CPAN
],
});
$self->{hdl}->push_write (pack "a4 C Q</a", "ZBXD", 1, $json);
};
}
sub _retry {
my ($self) = @_;
Scalar::Util::weaken $self;
delete $self->{hdl};
my $expire = AE::now - $self->{queue_time};
while (@{ $self->{queue} } && $self->{queue}[0][0] < $expire) {
$self->{on_loss}($self, [shift @{ $self->{queue} }]);
}
unless (@{ $self->{queue} }) {
delete $self->{sending};
( run in 0.245 second using v1.01-cache-2.11-cpan-a9ef4e587e4 )