/** * Handle the queue job. * * @param LaravelJob $laravelJob * @param mixed $data */ public function fire(LaravelJob $laravelJob, $data) { $job = null; try { $job = $this->jobs->find($data['job_id']); // Check if the job is valid (not expired and ready). This might // happen on some timing edge cases. if (!$job->ready()) { $laravelJob->delete(); return; } // Look for a task handler $handler = $this->resolver->resolve($job); if ($handler->getSpec() instanceof Spec) { $result = $handler->getSpec()->check($job->getData()); if ($result->failed()) { $laravelJob->delete(); $this->jobs->giveUp($job, 'Task data does not pass Spec.'); return; } } // Execute the handler $this->jobs->started($job, "Task handler started.\n"); $handler->fire($job, $this->scheduler); if ($handler->isSelfDeleting()) { $this->jobs->delete($job->id); } else { $this->jobs->complete($job); } } catch (ModelNotFoundException $e) { // Here we just cancel the queue job since there is no point in // retrying. $laravelJob->delete(); } catch (UnresolvableException $e) { // Here we just cancel the queue job since there is no point in // retrying. $laravelJob->delete(); $this->jobs->giveUp($job, 'Task handler was not found'); } catch (Exception $e) { // If we were not able to find the job, just give up. if (is_null($job)) { $laravelJob->delete(); return; } if ($job->hasAttemptsLeft()) { $this->jobs->release($job); $laravelJob->release(); return; } $this->jobs->fail($job, 'Exception: ' . $e->getMessage()); $laravelJob->delete(); } }
public function getFailed() { $jobs = $this->jobs->getFailedPaginated(); return new Card([], [new CardHeader([], [new Row([], [new Column(['medium' => 6, 'class' => 'btn-y-align'], ['Failed Jobs']), new Column(['medium' => 6, 'class' => 'text-right'], [new Button(['class' => 'btn btn-sm btn-primary-outline'], 'Create new job')])])]), $this->renderJobsTable($jobs), new ConferencePaginator($jobs)]); }