Cavalcade-Runner icon indicating copy to clipboard operation
Cavalcade-Runner copied to clipboard

Pass the $worker object to the Logger instance

Open dd32 opened this issue 8 months ago • 0 comments

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.

dd32 avatar Apr 09 '25 05:04 dd32