package RWDE::Scheduler::SchedulerWorker; use strict; use warnings; use Error qw(:try); use RWDE::Exceptions; use base qw(RWDE::DB::Deletable RWDE::DB::Record); our ($db, $table, $index, $id, @fieldnames, $ccrcontext, %fields, %static_fields, %modifiable_fields, @static_fieldnames, @modifiable_fieldnames); BEGIN { $table = 'workers'; $id = 'worker_id'; $index = 'workers_worker_id_seq'; #all of the static fields present in the worker table %static_fields = ( # Field => [Type, Descr] worker_id => [ 'int', 'Worker ID' ], ); #all of the fields allowed to be modified in the worker table %modifiable_fields = ( # Field => [Type, Descr] action_id => [ 'int', 'Scheduler ID' ], scheduler_id => [ 'int', 'Scheduler ID' ], worker_pid => [ 'int', 'Worker process id' ], ); %fields = (%static_fields, %modifiable_fields); @static_fieldnames = sort keys %static_fields; @modifiable_fieldnames = sort keys %modifiable_fields; @fieldnames = sort keys %fields; } ## @method object get_db() # (Enter get_db info here) # @return sub get_db { my ($self, $params) = @_; return 'default'; } sub cleanup { my ($self, $params) = @_; $self->delete_record; return; } sub run { my ($self, $params) = @_; my @required = qw( job scheduler_id ); $self->check_params({ required => \@required, supplied => $params }); # to avoid contention: release the reference to parent's db handle # the handles are shared between parents and children RWDE::DB::DbRegistry->add_db_settings({ db_settings => undef }); RWDE::DB::DbRegistry->destroy_dbh({ db => $self->get_db() }); my $worker = $self->new(); my $job = $$params{job}; $worker->scheduler_id($$params{scheduler_id}); $worker->action_id($job->action_id); $worker->worker_pid($$); $worker->create_record; try { $job->process; } catch Error with { my $ex = shift; $self->syslog_msg('info', "Worker::run caught an unhandled exception $ex "); }; $worker->delete_record; return (0); } 1;