Some of Joya's work does not happen while you wait: expiry reminders go out on a
schedule, heavy reports render in the background, emails and push notifications
are delivered asynchronously. This screen is where that work is visible — what
ran, what failed, and what you can do about it.
Where: Admin → Background jobs · Permission: admin (VIEW to read,
EDIT to act)
The page refreshes itself every 5 seconds while Live is on.
Across all queues: how many queues exist, how many jobs have Failed, how many
are Active right now, the Backlog (waiting + delayed), Rabbit unacked,
and — if a dead-letter queue exists — Dead-letter.
Failed and Active carry a small trend arrow comparing now with a few refreshes
ago, so you can see whether a number is climbing or draining.
One card per queue. Joya ships these:
| Queue | What it does |
|---|---|
| Scheduler | Periodic jobs: CAO retry, database backup, push pruning and follow-ups, crew and roster reconciliation. |
| Endorsement notifications | The per-minute tick that decides when expiry reminders are due. Has its own queue so a slow run cannot delay anything else. |
| Report export | Heavy report generation — PDF / XLSX / CSV. |
| Notification delivery | Outbound email and SMS. |
| Push notifications | Web push to crew devices. |
Each card shows:
healthy, N failed, or paused;0 workers is a problem: jobs will pile up and never run;Tabs for failed / active / waiting / delayed / completed. Each row shows the
job's human name, attempts, duration, when it ran and the first line of any
error. Select a row to open its detail, where you get the full stack trace, the
payload, and per-job actions.
Live worker processes, one card each: which queue it consumes, its host and
process id, a load bar (active ÷ concurrency), completed and failed counts, and
when it last checked in. Workers report every 10 seconds and are considered
stale after 30 — a worker that disappears here has stopped or lost Redis.
Read-only view of the message broker used by the CAO, watcher and logger
pipelines: queue depth, unacknowledged messages, and consumers. A queue with
0 consumers is not being processed. Rows whose name marks them as a
dead-letter queue are highlighted when they hold anything.
Open the queue's failed list, then either select the retry icon on the row,
or open the job and select Retry job. The job is re-queued with its attempt
count incremented.
To retry everything on a queue, use Retry all failed on the card. The bottom
bar's Retry all failed does the same across every queue at once.
On the queue card, find the job under Scheduled jobs and select Run now.
This enqueues one extra run; it does not change the schedule. Only jobs that are
already scheduled can be run this way.
Open a job in the delayed state and select Promote — it stops waiting and
becomes eligible immediately.
Pause on the card stops new jobs being processed; anything already running
finishes. Use it when a downstream system is broken and you would rather queue
work than fail it. Resume when the cause is fixed. Paused queues are obvious
— the card shows an amber paused pill.
Open the job (or use the row's delete icon) and confirm. Removal is permanent;
prefer retrying unless the job is genuinely unwanted.
Select Alerts in the header.
The sentence at the bottom of the dialog restates your settings in plain words —
read it before saving. Send test delivers through whichever channels are
enabled, and the Recent alerts list shows what has actually been sent,
including failures to send.
Alert wording comes from the jobAlert template on each channel, so you can
change the message without changing code — see Email settings and SMS settings.
The page pauses its own auto-refresh while this dialog is open, so your typing
is never interrupted.
0 workers means nothing is consuming that queue. Usually the process is| Symptom | Cause | Fix |
|---|---|---|
| Everything shows 0 and Redis is red | Jobs cannot run without Redis | Restore Redis; the page recovers on its own |
A queue shows 0 workers |
Worker process down or lost Redis | Check the service is running; the Workers panel confirms when it returns |
| Backlog climbing, nothing failing | Work arriving faster than it is processed, or the queue is paused | Check for a paused pill; consider whether an upstream is flooding it |
| Rabbit queue with 0 consumers | The consuming service is down | Restart it; depth drains once a consumer attaches |
| Alerts never arrive | Channel off, no recipients, or cooldown still active | Use Send test; check Recent alerts for failures |
| Reminders did not go out | The endorsement tick failed | Open Endorsement notifications → failed, read the error, retry |