Cavalcade-Runner
Cavalcade-Runner copied to clipboard
Pass the $worker object to the Logger instance
The Logger instance does not have access to the STDOUT or STDERR pipes of the worker by default.
This is achievable using something like this in older PHP versions, but this causes PHP Deprecated warnings in newer PHPs.
$runner->hooks->register( 'Runner.run_job.started', function( Worker $worker, Job $job ) {
$job->_worker = $worker;
} );
It would also be possible for the logger to not update it's datastore on log_job_failed()/log_job_completed() and instead to wait for the following hook Runner.check_workers.job_completed to be fired to then update it's data:
$runner->hooks->register( 'Runner.check_workers.job_completed', function( $worker, $job, $logger ) {
$logger->completed( $job, $worker );
} );
class MyLogger extends Logger {
public $message = '';
public function log_job_completed( Job $job, $message = '' ) {
$this->message = $message;
}
public function completed( Job $job, Worker $worker ) {
$data = json_encode( array_filter(array(
'message' => $this->message,
'stdout' => $worker->output,
'stderr' => $worker->error_output
) ) );
$this->log_run( $job->id, 'completed', $data );
}
....
Be nice to just have everything accessible though.