olorunda / laravel-queue-jobs
Comprehensive queue job inspector, monitor, and manager for Laravel across Database, Redis, and Failed Job drivers via CLI and Web Dashboard
Requires
- php: >=8.1
- illuminate/console: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/database: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/queue: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/routing: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/view: ^9.0|^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.0|^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
A modern, high-performance Laravel package to display, inspect, monitor, and manage queued jobs across Database, Redis, and Failed Job stores via Artisan CLI commands, a Live Web Dashboard, and a Programmatic PHP API.
Features
- 📊 Comprehensive Queue Visibility: View pending, delayed (with countdowns), in-flight (reserved), and failed jobs.
- 💻 Rich Artisan CLI:
php artisan queue:jobs: Formatted colored table with status badges and metrics.--watch: Live refreshing terminal dashboard (auto-updates every few seconds).--detail=<ID>: Deep payload inspection (unserialized properties, tags, and stack traces).--json: Machine-readable JSON for CI/CD or logging pipelines.php artisan queue:job:retry <id>: Retry failed jobs directly.php artisan queue:job:delete <id>: Cancel/delete queued jobs.
- 🚀 Multi-Driver Engine:
- Database Driver: Direct inspection of
jobsandfailed_jobstables with lock states and delay schedules. - Redis Driver: Direct inspection of Redis lists (
queues:{name}) and sorted sets (queues:{name}:delayed,queues:{name}:reserved). - Extensible driver interface to plug in custom queues.
- Database Driver: Direct inspection of
- 🌐 Modern Web Dashboard & REST API:
- Out-of-the-box UI at
/queue-jobs(no NPM/Webpack build required). - Real-time stats cards, filter by status, filter by queue, search by job name or payload.
- JSON modal viewer for extracted job constructor parameters and payloads.
- Out-of-the-box UI at
- 🛡️ Safe Deserialization:
- Safely inspects job parameters without crashing even if Eloquent models or specific classes are absent.
Installation
You can install the package via composer:
composer require olorunda/laravel-queue-jobs
Publish configuration and dashboard assets (optional):
php artisan vendor:publish --tag=queue-jobs-config php artisan vendor:publish --tag=queue-jobs-views
Configuration (config/queue-jobs.php)
return [ // The queue connection to inspect (null = default queue connection) 'connection' => env('QUEUE_JOBS_CONNECTION', null), // Queues monitored by default 'queues' => [ 'default', ], // Database tables 'tables' => [ 'jobs' => 'jobs', 'failed_jobs' => 'failed_jobs', ], // Redis settings 'redis' => [ 'connection' => 'default', 'prefix' => 'queues:', ], // Web dashboard 'web' => [ 'enabled' => env('QUEUE_JOBS_WEB_ENABLED', true), 'path' => 'queue-jobs', 'middleware' => ['web'], // Add 'auth' or custom gates if needed ], ];
Usage
1. Artisan CLI Commands
View all queued jobs:
php artisan queue:jobs
LARAVEL QUEUE INSPECTOR Connection: database [All Queues]
Pending: 3 | In-Flight: 1 | Delayed: 2 | Failed: 0 | Total: 6
+----+---------+----------------------------------+------------+----------+-------------------+------------+
| ID | Queue | Job / Handler | Status | Attempts | Delay / Scheduled | Tags |
+----+---------+----------------------------------+------------+----------+-------------------+------------+
| 12 | default | SendWelcomeEmail | PENDING | 0 | - | auth, user |
| 13 | default | GenerateMonthlyReport | PROCESSING | 1 | - | reports |
| 14 | billing | ChargeSubscriptionPayment | DELAYED | 0 | 45s | billing |
+----+---------+----------------------------------+------------+----------+-------------------+------------+
Filter by Status, Queue, or Connection:
php artisan queue:jobs --status=delayed php artisan queue:jobs --status=failed php artisan queue:jobs --queue=billing php artisan queue:jobs --connection=redis
Live Watch Mode (Auto-refreshing Terminal Monitor):
php artisan queue:jobs --watch --interval=2
Inspect Job Details & Extracted Parameters:
php artisan queue:jobs --detail=12
Output as JSON:
php artisan queue:jobs --json
Delete / Cancel a Queued Job:
php artisan queue:job:delete 12
Retry a Failed Job or Retry All Failed Jobs:
# Retry a specific failed job by ID or UUID php artisan queue:job:retry 12 # Retry ALL failed jobs across all queues php artisan queue:job:retry --all # Retry all failed jobs in a specific queue php artisan queue:job:retry --all --queue=billing
2. Web Dashboard
Visit http://your-app.test/queue-jobs in your browser.
- Real-time aggregate count cards for Pending, Delayed, In-Flight, Failed, and Total.
- One-click "Retry All Failed" button in the header.
- "Retry" button on failed jobs and "Run Now" button on delayed/in-flight jobs to execute them immediately.
- Dynamic search and queue filtering.
- One-click modal to inspect job constructor arguments, raw payload, and stack traces.
- One-click Delete actions.
To protect the route with authentication, update config/queue-jobs.php:
'web' => [ 'enabled' => true, 'path' => 'admin/queues', 'middleware' => ['web', 'auth', 'can:viewQueueDashboard'], ],
3. Programmatic PHP API / Facade
You can use the QueueJobs facade anywhere in your Laravel application:
use Olorunda\QueueJobs\Facades\QueueJobs; // Get all jobs with filters $jobs = QueueJobs::all(['status' => 'pending', 'queue' => 'default']); // Quick status helpers $pendingJobs = QueueJobs::pending(queue: 'default', limit: 25); $delayedJobs = QueueJobs::delayed(); $reservedJobs = QueueJobs::reserved(); $failedJobs = QueueJobs::failed(); // Get queue metrics $stats = QueueJobs::stats(); // Returns: ['pending' => 5, 'delayed' => 2, 'reserved' => 1, 'failed' => 0, 'total' => 8] // Find job by ID $job = QueueJobs::find(14); if ($job) { echo $job->name; // "App\Jobs\ChargeSubscriptionPayment" echo $job->shortName(); // "ChargeSubscriptionPayment" echo $job->delayHuman(); // "45s" print_r($job->commandData); // Extracted constructor properties } // Retry a specific job or retry ALL failed jobs QueueJobs::retry(12); QueueJobs::retryAll(queue: 'default'); // Make a delayed or stuck reserved job run immediately QueueJobs::runNow(14); // Delete / cancel a job QueueJobs::delete(14); // Clear all pending jobs in a queue QueueJobs::clear('notifications');
Testing
composer test
License
The MIT License (MIT). Please see LICENSE.md for more information.