123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
-
- namespace Illuminate\Queue\Console;
-
- use Illuminate\Support\Arr;
- use Illuminate\Console\Command;
-
- class ListFailedCommand extends Command
- {
- /**
- * The console command name.
- *
- * @var string
- */
- protected $name = 'queue:failed';
-
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = 'List all of the failed queue jobs';
-
- /**
- * The table headers for the command.
- *
- * @var array
- */
- protected $headers = ['ID', 'Connection', 'Queue', 'Class', 'Failed At'];
-
- /**
- * Execute the console command.
- *
- * @return void
- */
- public function handle()
- {
- if (count($jobs = $this->getFailedJobs()) == 0) {
- return $this->info('No failed jobs!');
- }
-
- $this->displayFailedJobs($jobs);
- }
-
- /**
- * Compile the failed jobs into a displayable format.
- *
- * @return array
- */
- protected function getFailedJobs()
- {
- $failed = $this->laravel['queue.failer']->all();
-
- return collect($failed)->map(function ($failed) {
- return $this->parseFailedJob((array) $failed);
- })->filter()->all();
- }
-
- /**
- * Parse the failed job row.
- *
- * @param array $failed
- * @return array
- */
- protected function parseFailedJob(array $failed)
- {
- $row = array_values(Arr::except($failed, ['payload', 'exception']));
-
- array_splice($row, 3, 0, $this->extractJobName($failed['payload']));
-
- return $row;
- }
-
- /**
- * Extract the failed job name from payload.
- *
- * @param string $payload
- * @return string|null
- */
- private function extractJobName($payload)
- {
- $payload = json_decode($payload, true);
-
- if ($payload && (! isset($payload['data']['command']))) {
- return $payload['job'] ?? null;
- } elseif ($payload && isset($payload['data']['command'])) {
- return $this->matchJobName($payload);
- }
- }
-
- /**
- * Match the job name from the payload.
- *
- * @param array $payload
- * @return string
- */
- protected function matchJobName($payload)
- {
- preg_match('/"([^"]+)"/', $payload['data']['command'], $matches);
-
- if (isset($matches[1])) {
- return $matches[1];
- }
-
- return $payload['job'] ?? null;
- }
-
- /**
- * Display the failed jobs in the console.
- *
- * @param array $jobs
- * @return void
- */
- protected function displayFailedJobs(array $jobs)
- {
- $this->table($this->headers, $jobs);
- }
- }
|