resolveRun($job); if (! $run instanceof OperationRun) { return $next($job); } /** @var OperationRunService $service */ $service = app(OperationRunService::class); $run->refresh(); if ($run->status === 'completed') { return null; } if ($run->status !== 'running') { $service->updateRun($run, 'running'); } try { $response = $next($job); if (property_exists($job, 'job') && $job->job && method_exists($job->job, 'isReleased') && $job->job->isReleased()) { return $response; } $run->refresh(); if ($run->status === 'running') { $service->updateRun($run, 'completed', 'succeeded'); } return $response; } catch (\Throwable $e) { $service->failRun($run, $e); throw $e; } } /** * @param mixed $job */ private function resolveRun($job): ?OperationRun { if (method_exists($job, 'getOperationRun')) { $run = $job->getOperationRun(); return $run instanceof OperationRun ? $run : null; } if (property_exists($job, 'operationRun')) { $run = $job->operationRun; return $run instanceof OperationRun ? $run : null; } return null; } }