kivitendo/SL/DB/BackgroundJob.pm @ c7176e61
295e585a | Moritz Bunkus | package SL::DB::BackgroundJob;
|
||
use strict;
|
||||
782fd788 | Moritz Bunkus | use DateTime::Event::Cron;
|
||
ee71ba33 | Moritz Bunkus | use English qw(-no_match_vars);
|
||
782fd788 | Moritz Bunkus | |||
295e585a | Moritz Bunkus | use SL::DB::MetaSetup::BackgroundJob;
|
||
782fd788 | Moritz Bunkus | use SL::DB::Manager::BackgroundJob;
|
||
ee71ba33 | Moritz Bunkus | use SL::DB::BackgroundJobHistory;
|
||
use SL::BackgroundJob::Test;
|
||||
782fd788 | Moritz Bunkus | sub update_next_run_at {
|
||
my $self = shift;
|
||||
295e585a | Moritz Bunkus | |||
782fd788 | Moritz Bunkus | my $cron = DateTime::Event::Cron->new_from_cron($self->cron_spec || '* * * * *');
|
||
ee71ba33 | Moritz Bunkus | $self->update_attributes(next_run_at => $cron->next(DateTime->now_local));
|
||
782fd788 | Moritz Bunkus | return $self;
|
||
}
|
||||
295e585a | Moritz Bunkus | |||
ee71ba33 | Moritz Bunkus | sub run {
|
||
my $self = shift;
|
||||
my $package = "SL::BackgroundJob::" . $self->package_name;
|
||||
my $run_at = DateTime->now_local;
|
||||
my $history;
|
||||
2772592d | Moritz Bunkus | my $ok = eval {
|
||
ee71ba33 | Moritz Bunkus | my $result = $package->new->run($self);
|
||
$history = SL::DB::BackgroundJobHistory
|
||||
->new(package_name => $self->package_name,
|
||||
run_at => $run_at,
|
||||
status => 'success',
|
||||
result => $result,
|
||||
data => $self->data);
|
||||
$history->save;
|
||||
1;
|
||||
};
|
||||
2772592d | Moritz Bunkus | if (!$ok) {
|
||
ee71ba33 | Moritz Bunkus | $history = SL::DB::BackgroundJobHistory
|
||
->new(package_name => $self->package_name,
|
||||
run_at => $run_at,
|
||||
status => 'failure',
|
||||
c5db99b7 | Moritz Bunkus | error_col => $EVAL_ERROR,
|
||
ee71ba33 | Moritz Bunkus | data => $self->data);
|
||
$history->save;
|
||||
}
|
||||
$self->assign_attributes(last_run_at => $run_at)->update_next_run_at;
|
||||
return $history;
|
||||
}
|
||||
sub data_as_hash {
|
||||
my $self = shift;
|
||||
return {} if !$self->data;
|
||||
return $self->data if ref($self->{data}) eq 'HASH';
|
||||
return YAML::Load($self->{data}) if !ref($self->{data});
|
||||
return {};
|
||||
}
|
||||
295e585a | Moritz Bunkus | 1;
|