use DateTime::Event::Cron;
use DateTime::TimeZone;
use File::stat;
-use NEXT;
use Set::Scalar;
use Storable qw/lock_store lock_retrieve/;
+use MRO::Compat;
-our $VERSION = '0.07';
+our $VERSION = '0.10';
__PACKAGE__->mk_classdata( '_events' => [] );
__PACKAGE__->mk_accessors('_event_state');
sub dispatch {
my $c = shift;
- $c->NEXT::dispatch(@_);
+ $c->maybe::next::method();
$c->_get_event_state();
$c->config->{scheduler}->{state_file} ||= $c->path_to('scheduler.state');
$c->config->{scheduler}->{hosts_allow} ||= '127.0.0.1';
$c->config->{scheduler}->{yaml_file} ||= $c->path_to('scheduler.yml');
+
+ # Always start with a clean state
+ if ( -e $c->config->{scheduler}->{state_file} ) {
+ $c->log->debug(
+ 'Scheduler: Removing old state file ' .
+ $c->config->{scheduler}->{state_file}
+ ) if $c->config->{scheduler}->{logging};
+
+ unlink $c->config->{scheduler}->{state_file}
+ or Catalyst::Exception->throw(
+ message => 'Scheduler: Unable to remove old state file '
+ . $c->config->{scheduler}->{state_file} . " ($!)"
+ );
+ }
- $c->NEXT::setup(@_);
+ $c->maybe::next::method(@_);
}
sub dump_these {
my $c = shift;
- return ( $c->NEXT::dump_these(@_) ) unless @{ $c->_events };
-
+ return ( $c->maybe::next::method(@_) ) unless @{ $c->_events };
+
# for debugging, we dump out a list of all events with their next
# scheduled run time
return (
- $c->NEXT::dump_these(@_),
+ $c->maybe::next::method(@_),
[ 'Scheduled Events', $c->scheduler_state ],
);
}
As an alternative to using the schedule() method, you may define scheduled
events in an external YAML file. By default, the plugin looks for the
-existence of a file called C<schedule.yml> in your application's home
+existence of a file called C<scheduler.yml> in your application's home
directory. You can change the filename using the configuration option
L</yaml_file>.
Events should be registered from a plugin's C<setup> method.
sub setup {
- my $c = shift;
- $c->NEXT::setup(@_);
+ my $c = shift;
+ $c->maybe::next::method(@_);
if ( $c->can('schedule') ) {
$c->schedule(