From 329ee1a232303e27755be67be9412208c0fa0f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Lam=C3=A9?= Date: Fri, 28 Jan 2022 02:13:12 +0100 Subject: [PATCH] Add exception context on failed jobs --- resources/js/screens/failedJobs/job.vue | 10 ++++++++++ src/Http/Controllers/FailedJobsController.php | 2 ++ src/Repositories/RedisJobRepository.php | 8 ++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/resources/js/screens/failedJobs/job.vue b/resources/js/screens/failedJobs/job.vue index 3e1ac211..a76d78d2 100644 --- a/resources/js/screens/failedJobs/job.vue +++ b/resources/js/screens/failedJobs/job.vue @@ -198,6 +198,16 @@ +
+
+
Exception Context
+
+ +
+ +
+
+
diff --git a/src/Http/Controllers/FailedJobsController.php b/src/Http/Controllers/FailedJobsController.php index 093a0539..e3a74383 100644 --- a/src/Http/Controllers/FailedJobsController.php +++ b/src/Http/Controllers/FailedJobsController.php @@ -117,6 +117,8 @@ protected function decode($job) $job->exception = mb_convert_encoding($job->exception, 'UTF-8'); + $job->context = json_decode($job->context); + $job->retried_by = collect(json_decode($job->retried_by)) ->sortByDesc('retried_at')->values(); diff --git a/src/Repositories/RedisJobRepository.php b/src/Repositories/RedisJobRepository.php index 28134284..9021a971 100644 --- a/src/Repositories/RedisJobRepository.php +++ b/src/Repositories/RedisJobRepository.php @@ -26,7 +26,8 @@ class RedisJobRepository implements JobRepository */ public $keys = [ 'id', 'connection', 'queue', 'name', 'status', 'payload', - 'exception', 'failed_at', 'completed_at', 'retried_by', 'reserved_at', + 'exception', 'context', 'failed_at', 'completed_at', 'retried_by', + 'reserved_at', ]; /** @@ -597,7 +598,7 @@ public function findFailed($id) /** * Mark the job as failed. * - * @param string $exception + * @param \Exception $exception * @param string $connection * @param string $queue * @param \Laravel\Horizon\JobPayload $payload @@ -620,6 +621,9 @@ public function failed($exception, $connection, $queue, JobPayload $payload) 'status' => 'failed', 'payload' => $payload->value, 'exception' => (string) $exception, + 'context' => method_exists($exception, 'context') + ? json_encode($exception->context()) + : null, 'failed_at' => str_replace(',', '.', microtime(true)), ] );