# `UpstatePhoenix.Jobs`
[🔗](https://upstate.cloud/docs/phoenix)

The `jobs` section, read from Oban's `oban_jobs` table with one aggregate query through
the repo and prefix of the running Oban instance. Job-only nodes therefore do not need
to be scraped: any web container reports the shared queue.

  * `queue_depth` - jobs `available`, plus `scheduled` jobs whose time has come.
  * `oldest_queued_age_seconds` - age of the oldest of those, from `scheduled_at`.
  * `processed_last_5m` - jobs `completed` in the last 5 minutes.
  * `failed_last_5m` - jobs `discarded` in the last 5 minutes, plus `retryable` jobs whose
    failed attempt started in the last 5 minutes.
  * `recent_processing_at` - the latest `attempted_at` or `completed_at`.
  * `workers` - `nil`. Oban has no per-node heartbeat table outside Oban Pro.

Counts only: no queue names, worker names, args, errors or meta are read.

The counts see only rows still in `oban_jobs`. If `Oban.Plugins.Pruner` keeps jobs for
less than 5 minutes (its default `max_age` is 60 seconds), processed and failed counts
are undercounted.

Postgres only (the Basic and Pro Smart engines). Oban on SQLite or MySQL reports the
adapter `"unsupported"` with no numbers.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
