The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package App::MadEye::Rule::Retry;
use strict;
use warnings;
use base qw/App::MadEye::Rule/;
use Cache::FileCache;
use YAML;

sub dispatch {
    my ($self, $context, $args) = @_;

    my $expire_time = $self->config->{expire_time} or die "missing expire_time";
    my $cache_root  = $self->config->{cache_root}  or die "missing cache_root";

    my $key = YAML::Dump($args->{target});

    $context->log(info => "Retry: $args->{target}, $args->{plugin}");

    my $cache = Cache::FileCache->new( { cache_root => $cache_root, } );
    my $retry = $cache->get($key) ? 0 : 1;
    $cache->set($key => "Boofy", $expire_time);

    return $retry;
}

1;

# HTTPD とかは頻繁に再起動するので、一回ぐらい落ちてても無視してほしい。

__END__

=head1 NAME

App::MadEye::Rule::Retry - please retry...

=head1 SCHEMA

    type: map
    mapping:
        expire_time:
            type: int
            required: yes
        cache_root:
            type: str
            required: yes

=head1 SEE ALSO

L<App::MadEye>, L<Cache::FileCache>