Queue control
Dashboard operations
Job-state tabs, per-queue drill-down, search, delete, empty queue and Perform Now.
Horizon's dashboard is a very good window. Skyline's is a control room: the same information, plus the buttons to act on it. This page covers the operations the dashboard gains — none of them require configuration.
Job-state tabs
Skyline replaces the scattered job lists with one tabbed Jobs view, available both globally and scoped to a single queue:
| Tab | Shows | Actions |
|---|---|---|
| In Progress | Reserved jobs a worker is executing right now, with a live HH:MM:SS running-for duration. |
— |
| Pending | Jobs waiting to be picked up. Reserved jobs stay visible, badged Running. | Delete |
| Scheduled | Delayed jobs that have never been attempted, with their absolute next-run time. | Perform Now, Delete |
| Retries | Jobs released back to the queue after a failure, waiting out a backoff window. | Perform Now, Delete |
| Completed | Recently finished jobs with runtime and timestamps. | — |
| Failed | Failed jobs with the exception and a link to the full failure detail. | Retry |
Splitting Scheduled from Retries is the useful part. Horizon lumps both into one undifferentiated list of delayed jobs, which means a queue that is quietly failing and backing off looks identical to one with healthy scheduled work in it. Skyline splits them on attempt count: never attempted is scheduled, released-after-failure is a retry.
Perform Now
A delayed or retrying job sits idle until its available-at time arrives. When you have just deployed the fix, waiting out a fifteen-minute backoff window is pure downtime. Perform Now triggers the job immediately, from the Scheduled and Retries tabs and from the job's detail page.
Per-queue drill-down
Click any queue on the dashboard to open the same tab set scoped to that queue — the exact jobs waiting inside it, in order. This answers the question the workload panel raises and never resolves: what is in the backlog?
Search by job name
Every job list accepts a search on the job class name, matched as a case-insensitive substring. So
podcast finds App\Jobs\ProcessPodcast. Search works across the pending, completed, retried
and failed views.
Deleting jobs and emptying a queue
Skyline can remove jobs from a queue, from a per-job Delete button on the pending, scheduled and retries lists and on the job detail page — or wholesale, with Empty queue.
Both are guarded, in the UI and in the backend:
- Every destructive action goes through a confirmation modal.
- Only pending and delayed jobs can be deleted. A job a worker has already reserved is not deletable — the request is rejected with
422rather than leaving a half-executed job behind. - Completed, silenced and failed jobs get no Delete button. They are historical records, not queue entries; a failed job is removed by retrying it or by the usual trimming.
- Per-job deletion requires a Redis queue connection. Other drivers are rejected with
422. - If a job is picked up by a worker between the moment you click and the moment the delete lands, the request fails with
409rather than silently doing nothing.
Deleting a job or emptying a queue releases the ShouldBeUnique lock of every job removed. Without
that, a deleted unique job would leave its lock behind and silently block all future dispatches of the same job.
See Unique job locks.
Previous-attempt failure reasons
When a job throws or times out but still has retries left, that failure reason is normally lost — you see only the exception from the final attempt, long after the interesting one. Skyline records each attempt's failure and shows the history in a Previous Attempts panel on the job's page, for both recent and failed jobs.
Each entry captures the attempt number, whether it was an exception or a timeout, the timestamp, and — for exceptions
— the full stack trace. Because a stack trace is not small, only the most recent
attempt_exceptions entries are retained per job; the default is 1. See
Configuration.
Honest wait times
The dashboard reports two different numbers that Horizon conflates: the actual current delay on a queue, measured from the oldest job waiting in it, and the expected wait time, derived from a moving average of recent jobs. They answer different questions and they disagree in exactly the moments that matter. See Metrics & trends.