System Status
System Status is a platform-admin tool for monitoring the background job queue and worker health across the entire Ascent platform. It shows what scheduled jobs are wired up, which workers are alive, how individual job types are performing, and provides manual cleanup controls for the queue.
Overview
System Status lets you:
- See every recurring background job, its schedule, priority, and next run time
- Trigger any recurring job on demand with Run now
- Review the last 50 job executions and their outcomes
- Monitor live worker processes (status, uptime, throughput, and the job each is currently running)
- View queue-wide counts (active, pending, completed, failed, retry)
- Inspect per-job success rate and duration percentiles over the last 24 hours
- Run manual queue cleanup tools (janitor, fail active, cancel pending)
Navigate to it
Go to Platform → System Status (/platform/system-status).
This page is part of the platform-admin surface, not the org app. It is only available to operators with the Platform Admin role. Organization owners and admins cannot see it. (The old org-level /admin/system-status route now redirects to Email Queue, which still holds per-organization outbound email delivery data.)
The page polls for fresh data every 30 seconds. You can also force an immediate refresh with the Refresh button in the header.
Background Jobs tab
Scheduled Jobs
Lists every recurring job registered with the queue, drawn from Ascent's central schedule definitions.
| Column | What it shows |
|---|---|
| Job | Internal job type / queue name |
| Description | What the job does (and an expiration note when the job is dropped if it sits in the queue too long) |
| Schedule | A friendly description (e.g. Every minute, Daily at 6:00 AM) plus the raw cron expression |
| Priority | High, Normal, or Low — higher-priority jobs are picked up first |
| Next Run | Relative time until the next scheduled run, plus the exact timestamp |
| Pending | Number of queued instances of this job waiting for a worker |
| Actions | Run now to trigger the job immediately |
A non-zero Pending count usually means a job is fanning out per organization, or that workers were briefly offline and ticks queued up. A large pending count is highlighted in red.
Run now queues a one-off run of the selected recurring job. Only recurring (scheduled) jobs can be triggered this way; on-demand jobs that need parameters cannot.
Job Management
Manual cleanup tools. The queue janitor runs automatically every 15 minutes, so these are rarely needed.
| Button | What it does |
|---|---|
| Run Janitor Now | Fails active jobs stuck more than 15 minutes, cancels pending jobs older than 1 hour, deletes completed jobs older than 1 hour, deletes failed jobs older than 7 days, reaps dead workers not seen in 5 minutes, and expires old idempotency tokens |
| Fail Active Jobs | Force-fails every currently running job. Use only when workers are stuck and need a restart |
| Cancel All Pending | Drops every queued (pending) job. Schedules automatically recreate recurring jobs on the next tick |
Fail Active Jobs and Cancel All Pending both prompt for confirmation before running.
Recent Job History
Shows the last 50 job executions across all job types.
| Column | What it shows |
|---|---|
| Job | The job type that ran |
| State | Completed, Failed, Running, Retry, or Pending |
| Created | When the job was enqueued |
| Completed | When the job finished (if it has) |
| Retries | Number of retry attempts |
Workers tab
Queue totals
Five summary cards across the top show queue-wide job counts:
- Active — jobs currently being processed
- Pending — jobs queued and waiting
- Completed — finished successfully
- Failed — finished in error
- Retry — waiting to be retried
Worker Status
Live data sourced from each worker's heartbeat. Every worker writes a heartbeat roughly every 10 seconds; a worker not seen within the staleness window (60 seconds) is shown as Offline.
| Column | What it shows |
|---|---|
| Worker | Worker ID, plus hostname and process ID when available |
| Mode | The worker's app mode (see below) |
| Version | The Ascent build version the worker is running |
| Status | Online or Offline |
| Uptime | How long the worker has been running |
| Processed | Total jobs the worker has processed |
| Failed | Total jobs the worker has failed (highlighted when non-zero) |
| Now Running | The job the worker is currently executing, with elapsed time, or idle |
| Last Seen | Relative time since the worker's last heartbeat |
If no workers appear, none have booted yet (or all are offline).
App modes
| Mode | Meaning |
|---|---|
| all | Server and worker run together (typical for development) |
| server | HTTP API only — workers run as separate containers |
| worker | Background jobs only — connected to the same queue |
Metrics (24h) tab
Per-job-type performance over the last 24 hours, useful for spotting slow or failing jobs when the queue backs up.
| Column | What it shows |
|---|---|
| Job | The job type |
| Runs | Total runs in the window, with a failure count when any failed |
| Success Rate | Percentage of runs that completed successfully (green at 99%+, neutral at 90%+, red below) |
| p50 duration | Median run duration |
| p95 duration | 95th-percentile run duration |
| Max | Longest run duration |
| Last Run | Relative time since the most recent run |
Only terminal runs (completed or failed) within the last 24 hours are counted.
Tips
- Start with the Metrics (24h) tab when the queue is backed up — a job with a low success rate or a high p95 duration is usually the cause.
- Use Run now to validate a recurring job after changing related configuration, rather than waiting for its next scheduled tick.
- The automatic janitor handles routine cleanup; reach for the manual Job Management tools only when something is visibly stuck.