operator view
dj_queue dashboard
Watch queue pressure, process freshness, and control-plane state for the selected backend without leaving Django admin. Switch backend context here, then drill into queues or raw changelists only when the overview is not enough.
Jobs come from the selected backend. Processes, pauses, recurring tasks, and semaphores come from that backend's queue database.
-
{% for fact in backend_facts %}
- {{ fact.label }}
- {{ fact.value }}
{{ card.label }}
{{ card.value }}
{% if card.detail_parts %} {% for part in card.detail_parts %} {% if part.url %} {{ part.label }} {% else %} {{ part.label }} {% endif %} {% endfor %} {% else %} {{ card.detail }} {% endif %}
Live queue pressure, pause state, and first-line controls for this backend.{% if shared_queue_section.total_count %} Shared pause or recurring-only queues are available in a separate section below.{% endif %}
{% if queue_section.rows %}| {% if header.sortable and header.sorted %} {% endif %} | {% endfor %}Controls |
|||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ queue.name }} | {{ queue.ready_count }} | {{ queue.claimed_count }} | {{ queue.scheduled_count }} | {{ queue.blocked_count }} | {{ queue.failed_count }} | {{ queue.finished_count }} | {{ queue.paused|yesno:"yes,no" }} | {% if queue.latency_seconds != None %}{{ queue.latency_seconds|floatformat:1 }}s{% else %}-{% endif %} | {{ queue.live_worker_count }} | {{ queue.oldest_scheduled_at|date:"Y-m-d H:i:s"|default:"-" }} | {{ queue.oldest_blocked_at|date:"Y-m-d H:i:s"|default:"-" }} |
|
No queues found for this backend.
{% endif %}Supervisor-first runtime topology so workers, dispatchers, and schedulers read as one grouped runtime.
{% if process_section.rows %}| {% if header.sortable and header.sorted %} {% endif %} | {% endfor %}||||||
|---|---|---|---|---|---|---|
| {{ process.name }} {% if process.is_child %}{% endif %} | {{ process.kind }} | {% if process.is_live %}live{% else %}stale{% endif %} | {{ process.last_heartbeat_at|date:"Y-m-d H:i:s" }} ({{ process.heartbeat_age_seconds|floatformat:1 }}s ago) | {{ process.hostname }} | {{ process.pid }} | {{ process.metadata_json }} |
No registered processes.
{% endif %}Scheduled work defined for this queue database, with next-fire context for operators.
{% if recurring_section.rows %}| {% if header.sortable and header.sorted %} {% endif %} | {% endfor %}||||||
|---|---|---|---|---|---|---|
| {{ task.key }} | {{ task.task_path }} | {{ task.queue_name }} | {{ task.schedule }} |
{% if task.static %}static{% else %}dynamic{% endif %} | {{ task.last_run_at|default:"-" }} | {{ task.next_run_at|default:"-" }} |
No recurring tasks configured.
{% endif %}Concurrency state for hot keys, including waiters and expiry windows.
{% if semaphore_section.rows %}| {% if header.sortable and header.sorted %} {% endif %} | {% endfor %}||||
|---|---|---|---|---|
| {{ semaphore.key }} | {{ semaphore.available_slots }} | {{ semaphore.limit }} | {{ semaphore.blocked_waiters }} | {{ semaphore.expires_at|date:"Y-m-d H:i:s" }} |
No active semaphores.
{% endif %}Use the model changelists for exhaustive filtering, lower-level debugging, and record-by-record inspection.
queue data
Job-centric rows scoped to the selected backend where possible.
runtime data
Control-plane rows scoped by the selected backend's queue database alias.