NAME

AnyEvent::Monitor - Service Monitoring using AnyEvent

SYNOPSIS

use AnyEvent::Monitor;

my $foo = AnyEvent::Monitor->new(
    name => 'foo',
    on_softfail => sub {
        warn "==> service fail: $_[1]";
    },
    on_hardfail => sub {
        my ($resume_check);
        warn "==> service fail, should attempt to do something to fix it: $_[1]";
        $resume_check->(60); # resume checking after 60 secs
    },
    on_resume => sub {
        my ($prev, $outage) = @_;
        if ($prev) {
            warn "service resumed from: $prev, total outage: $outage secs";
        }
    });

$foo->install_timers( 300 ); # delay checking for 300 secs

sub my_polling_check {
    my ($timestamp, $status) = @_;
    # $foo->heartbeat($timestamp, $status);
}

$foo->status; # expecting "normal"

DESCRIPTION

AnyEvent::Monitor provides a simple way to do periodical checks on given services, and provides callback when the service fails that you can attempt to fix it programmatically.

ATTRIBUTES

softfail_timeout
hardfail_timeout
on_softfail

The callback to be called after service remains failed for $soft_timeout.

on_hardfail($resume)

The callback to be called after service remains failed for $hard_timeout. You should attempt to fix the service and call $resume-($delay)> after the attempt has been made. This will make the monitoring resume after $delay seconds.

on_resume($previous_status, $outage)

The callback to be called after service monitoring resumes. If it had failed, $previous_status and $outage seconds will be given.

METHODS

install_timers($delay)

Set the next checking timer according to soft_timeout and hard_timeout, with additional $delay from now. You don't normally need to call this method manually, unless you want to delay the start of the monitoring.

heartbeat($timestamp, $status)

This is used to update the status of the service. only normal is meaningful to AnyEvent::Monitor. Other values are considered as the service failed.

AUTHOR

Chia-liang Kao <clkao@clkao.org>

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO