kivitendo/SL/DB/BackgroundJob.pm @ a16a7068
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) {
|
||
fafc4b3f | Moritz Bunkus | my $error = $EVAL_ERROR;
|
||
ee71ba33 | Moritz Bunkus | $history = SL::DB::BackgroundJobHistory
|
||
->new(package_name => $self->package_name,
|
||||
run_at => $run_at,
|
||||
status => 'failure',
|
||||
fafc4b3f | Moritz Bunkus | error_col => $error,
|
||
ee71ba33 | Moritz Bunkus | data => $self->data);
|
||
$history->save;
|
||||
fafc4b3f | Moritz Bunkus | |||
$::lxdebug->message(LXDebug->WARN(), "BackgroundJob ID " . $self->id . " execution error (first three lines): " . join("\n", (split(m/\n/, $error))[0..2]));
|
||||
ee71ba33 | Moritz Bunkus | }
|
||
$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;
|