@extends('layouts.admin') @section('title','Reliability') @section('heading','Queue and scheduler reliability') @section('content')

Operational visibility for asynchronous work, scheduler heartbeats and the failed-job dead-letter store.

{{ strtoupper($health['connection']) }} queue
@csrf
Pending jobs{{ number_format($health['pending_total']) }}{{ $health['reserved_total'] }} reserved · {{ $health['delayed_total'] }} delayed
Failed jobs{{ number_format($health['failed_total']) }}Dead-letter records
Scheduler{{ $health['scheduler_healthy'] ? 'healthy' : 'stale' }}Expected every minute
Queue worker{{ $health['worker_healthy'] ? 'healthy' : 'stale' }}Expected within two minutes

Queue backlog

Oldest age helps identify stalled consumers.

@forelse($health['queues'] as $queue)@empty@endforelse
QueuePendingOldest age
{{ $queue['queue'] }}{{ number_format($queue['total']) }}{{ Illuminate\Support\Carbon::now()->subSeconds($queue['oldest_age_seconds'])->diffForHumans(['parts'=>2]) }}
No queued jobs.

Component heartbeats

Host/process identifiers support multi-worker deployments.

@forelse($health['heartbeats'] as $heartbeat)@empty@endforelse
ComponentInstanceStatusLast seenMetadata
{{ ucfirst($heartbeat['component']) }}{{ $heartbeat['instance'] }}{{ $heartbeat['healthy'] ? 'healthy' : 'stale' }}{{ $heartbeat['last_seen_at']->diffForHumans() }}{{ collect($heartbeat['metadata'] ?? [])->map(fn($value,$key)=>$key.': '.$value)->join(' · ') ?: '—' }}
No heartbeat received. Configure cron and start queue workers.

Failed jobs

Payload arguments are intentionally hidden to avoid exposing customer or secret data.

@forelse($failedJobs as $job)@empty@endforelse
JobConnection / queueFailureFailedActions
{{ $job->name }}
{{ $job->uuid }}
{{ $job->connection }} / {{ $job->queue }}{{ $job->exception_summary }}{{ Illuminate\Support\Carbon::parse($job->failed_at)->diffForHumans() }}
@csrf
@csrf @method('delete')
No failed jobs.

Prune dead-letter history

Removes only failures older than the selected retention window. This action is audited.

@csrf @method('delete')
@endsection