PHPackages                             cboxdk/laravel-queue-monitor - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. cboxdk/laravel-queue-monitor

ActiveLibrary[Queues &amp; Workers](/categories/queues)

cboxdk/laravel-queue-monitor
============================

This is my package laravel-queue-monitor

v1.0.0.beta.1(3mo ago)06[2 PRs](https://github.com/cboxdk/laravel-queue-monitor/pulls)MITPHPPHP ^8.3 || ^8.4 || ^8.5CI passing

Since Jan 20Pushed 1mo agoCompare

[ Source](https://github.com/cboxdk/laravel-queue-monitor)[ Packagist](https://packagist.org/packages/cboxdk/laravel-queue-monitor)[ Docs](https://github.com/cboxdk/laravel-queue-monitor)[ GitHub Sponsors](https://github.com/Cbox)[ RSS](/packages/cboxdk-laravel-queue-monitor/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (5)Dependencies (14)Versions (9)Used By (0)

Laravel Queue Monitor
=====================

[](#laravel-queue-monitor)

[![Latest Version on Packagist](https://camo.githubusercontent.com/bc6033e936af31e778306463a5384419eb24d5dcbfe7947a564420843d0af840/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f63626f78646b2f6c61726176656c2d71756575652d6d6f6e69746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/cboxdk/laravel-queue-monitor)[![Total Downloads](https://camo.githubusercontent.com/c1ec7fa6028bccb59554227aec2fb741053998473aed547e283b130683b0c58b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f63626f78646b2f6c61726176656c2d71756575652d6d6f6e69746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/cboxdk/laravel-queue-monitor)

**Production-ready Laravel queue monitoring with individual job tracking, payload storage, and comprehensive analytics.**

Track every queue job with detailed metrics, replay failed jobs from stored payloads, and gain deep insights into your queue performance. Built on top of [laravel-queue-metrics](https://github.com/cboxdk/laravel-queue-metrics) for enhanced resource tracking.

Features
--------

[](#features)

- ✅ **Individual Job Tracking** - Monitor every job from queue to completion
- ✅ **Full Payload Storage** - Store complete job payloads for replay capability
- ✅ **Worker &amp; Server Identification** - Track which server/worker processed each job
- ✅ **Horizon Support** - Automatic detection of Horizon vs queue:work
- ✅ **Job Replay** - Re-dispatch failed jobs from stored payloads
- ✅ **Resource Metrics** - CPU, memory, file descriptor tracking via queue-metrics integration
- ✅ **Retry Chain Tracking** - Complete visibility into job retry attempts
- ✅ **Comprehensive Analytics** - Per-queue, per-server, per-job-class statistics
- ✅ **REST API** - Full-featured API for dashboard integration
- ✅ **Tag Analytics** - Track and analyze jobs by custom tags
- ✅ **Artisan Commands** - CLI tools for monitoring and maintenance
- ✅ **PHPStan Level 9** - Maximum static analysis compliance
- ✅ **Pest 4 Ready** - Modern testing framework support

Requirements
------------

[](#requirements)

- PHP 8.3+
- Laravel 10+
- **cboxdk/laravel-queue-metrics** ^1.0 (hard dependency)

Installation
------------

[](#installation)

Install via Composer:

```
composer require cboxdk/laravel-queue-monitor
```

Publish configuration and run migrations:

```
php artisan vendor:publish --tag="queue-monitor-config"
php artisan migrate
```

### Advanced Installation

[](#advanced-installation)

If you need to customize the migrations, you can publish them:

```
php artisan vendor:publish --tag="queue-monitor-migrations"
```

### Dashboard Customization

[](#dashboard-customization)

To customize the UI (Web or Terminal), publish the views:

```
php artisan vendor:publish --tag="queue-monitor-views"
```

This will create `resources/views/vendor/queue-monitor/`, where you can modify:

- `web/dashboard.blade.php` - The Web Dashboard
- `tui/dashboard.blade.php` - The Terminal Dashboard

That's it! The package automatically starts monitoring all queue jobs.

Quick Start
-----------

[](#quick-start)

### Facade Usage

[](#facade-usage)

```
use Cbox\LaravelQueueMonitor\Facades\LaravelQueueMonitor as QueueMonitor;

// Get job details
$job = QueueMonitor::getJob($uuid);

// Replay a failed job
$replayData = QueueMonitor::replay($uuid);

// Get statistics
$stats = QueueMonitor::statistics();
echo "Success Rate: {$stats['success_rate']}%";

// Query jobs with filters
$filters = new JobFilterData(
    statuses: [JobStatus::FAILED],
    queuedAfter: Carbon::now()->subHours(24)
);
$failedJobs = QueueMonitor::getJobs($filters);
```

### Artisan Commands

[](#artisan-commands)

```
# Show statistics
php artisan queue-monitor:stats

# Replay a job
php artisan queue-monitor:replay {uuid}

# Prune old jobs
php artisan queue-monitor:prune --days=30 --statuses=completed
```

### REST API

[](#rest-api)

```
# List jobs
GET /api/queue-monitor/jobs?statuses[]=failed&limit=50

# Get job details
GET /api/queue-monitor/jobs/{uuid}

# Replay job
POST /api/queue-monitor/jobs/{uuid}/replay

# Get statistics
GET /api/queue-monitor/statistics

# Queue health
GET /api/queue-monitor/statistics/queue-health
```

Architecture
------------

[](#architecture)

### Action Pattern

[](#action-pattern)

All business logic is encapsulated in single-responsibility Action classes:

```
RecordJobQueuedAction
RecordJobStartedAction
RecordJobCompletedAction
RecordJobFailedAction
ReplayJobAction
CalculateJobStatisticsAction
```

### DTO Pattern

[](#dto-pattern)

All data transfer uses strictly-typed DTOs:

```
JobMonitorData
WorkerContextData
ExceptionData
JobFilterData
JobReplayData
```

### Repository Pattern

[](#repository-pattern)

Data access through contracts with Eloquent implementations:

```
JobMonitorRepositoryContract
TagRepositoryContract
StatisticsRepositoryContract
```

### Event-Driven

[](#event-driven)

Integrates seamlessly with Laravel Queue events and queue-metrics events.

Configuration
-------------

[](#configuration)

Key configuration options in `config/queue-monitor.php`:

```
return [
    // Enable/disable monitoring
    'enabled' => env('QUEUE_MONITOR_ENABLED', true),

    // Payload storage for replay
    'storage' => [
        'store_payload' => env('QUEUE_MONITOR_STORE_PAYLOAD', true),
        'payload_max_size' => 65535,
    ],

    // Data retention
    'retention' => [
        'days' => 30,
        'prune_statuses' => ['completed'],
    ],

    // REST API (see Security section for authentication)
    'api' => [
        'enabled' => env('QUEUE_MONITOR_API_ENABLED', true),
        'prefix' => 'api/queue-monitor',
        'middleware' => ['api', 'auth:sanctum'], // Add authentication!
    ],

    // Worker detection
    'worker_detection' => [
        'server_name_callable' => null,
        'horizon_detection' => true,
    ],
];
```

Security
--------

[](#security)

### API Authentication

[](#api-authentication)

**The REST API exposes sensitive queue data including job payloads and exception traces.** You should always add authentication middleware in production.

#### Recommended Setup (Laravel Sanctum)

[](#recommended-setup-laravel-sanctum)

```
// config/queue-monitor.php
'api' => [
    'enabled' => env('QUEUE_MONITOR_API_ENABLED', true),
    'prefix' => 'api/queue-monitor',
    'middleware' => ['api', 'auth:sanctum'],
],
```

#### Alternative Authentication Methods

[](#alternative-authentication-methods)

```
// Using Laravel's built-in auth
'middleware' => ['api', 'auth'],

// Using custom middleware
'middleware' => ['api', 'auth.admin'],

// Using abilities/permissions
'middleware' => ['api', 'auth:sanctum', 'ability:queue-monitor'],
```

#### IP Whitelisting (Additional Layer)

[](#ip-whitelisting-additional-layer)

For maximum security, combine authentication with IP restrictions:

```
// app/Http/Middleware/QueueMonitorAccess.php
class QueueMonitorAccess
{
    public function handle($request, Closure $next)
    {
        $allowedIps = ['10.0.0.0/8', '192.168.0.0/16'];

        if (!$this->ipIsAllowed($request->ip(), $allowedIps)) {
            abort(403);
        }

        return $next($request);
    }
}
```

### Payload Storage

[](#payload-storage)

Job payloads may contain sensitive data. Consider:

1. **Disable payload storage** if replay isn't needed:

    ```
    'storage' => ['store_payload' => false],
    ```
2. **Use a separate database** for monitoring data:

    ```
    'database' => ['connection' => 'queue_monitor'],
    ```
3. **Implement data retention policies** to limit exposure:

    ```
    'retention' => ['days' => 7],
    ```

### Environment-Based Configuration

[](#environment-based-configuration)

Disable the API in production if only using the facade/commands:

```
QUEUE_MONITOR_API_ENABLED=false
```

Documentation
-------------

[](#documentation)

- [Installation Guide](docs/installation.md)
- [Configuration](docs/configuration.md)
- [API Reference](docs/api-reference.md)
- [Facade Usage](docs/facade-usage.md)
- [Job Replay](docs/job-replay.md)

Security &amp; Redaction
------------------------

[](#security--redaction)

### Payload Redaction

[](#payload-redaction)

To protect sensitive data, the API automatically masks keys defined in the `api.sensitive_keys` config option (e.g. `password`, `token`).

```
// config/queue-monitor.php
'sensitive_keys' => ['password', 'secret', 'key'],
```

Note: The database stores the **raw** payload to ensure job replay functionality works correctly. Only the API response is redacted.

### API Authentication

[](#api-authentication-1)

**The REST API exposes sensitive queue data including job payloads and exception traces.** You should always add authentication middleware in production.

This package is built on top of [laravel-queue-metrics](https://github.com/cboxdk/laravel-queue-metrics) and automatically:

- Captures CPU time, memory usage, and file descriptors
- Subscribes to `MetricsRecorded` events
- Enriches job records with performance metrics
- Leverages Horizon detection utilities

Testing
-------

[](#testing)

```
composer test
composer analyse  # PHPStan Level 9
composer format   # Laravel Pint
```

Credits
-------

[](#credits)

- [Sylvester Damgaard](https://github.com/Cbox)
- Built with [laravel-package-tools](https://github.com/spatie/laravel-package-tools)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance86

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 93.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~8 days

Total

6

Last Release

72d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b9761a79e61f2d5b9d650510dfb3555da18daf38f027aa84012c937e397e39a7?d=identicon)[cboxdk](/maintainers/cboxdk)

---

Top Contributors

[![sylvesterdamgaard](https://avatars.githubusercontent.com/u/2431914?v=4)](https://github.com/sylvesterdamgaard "sylvesterdamgaard (55 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (3 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

---

Tags

laravelcboxlaravel-queue-monitor

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/cboxdk-laravel-queue-monitor/health.svg)

```
[![Health](https://phpackages.com/badges/cboxdk-laravel-queue-monitor/health.svg)](https://phpackages.com/packages/cboxdk-laravel-queue-monitor)
```

###  Alternatives

[lorisleiva/laravel-actions

Laravel components that take care of one specific task

2.8k7.5M115](/packages/lorisleiva-laravel-actions)[spatie/laravel-health

Monitor the health of a Laravel application

85810.0M83](/packages/spatie-laravel-health)[worksome/envy

Automatically keep your .env files in sync.

6871.8M](/packages/worksome-envy)[croustibat/filament-jobs-monitor

Background Jobs monitoring like Horizon for all drivers for FilamentPHP

254255.2k6](/packages/croustibat-filament-jobs-monitor)[worksome/exchange

Check Exchange Rates for any currency in Laravel.

123544.7k](/packages/worksome-exchange)[harris21/laravel-fuse

Circuit breaker for Laravel queue jobs. Protect your workers from cascading failures.

3786.5k](/packages/harris21-laravel-fuse)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
