{% extends "admin/base_site.html" %} {% load static %} {% block extrastyle %} {{ block.super }} {% endblock extrastyle %} {% block breadcrumbs %} {% endblock breadcrumbs %} {% block content_title %}{% endblock content_title %} {% block content %}

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, processes, pauses, and recurring tasks are scoped to the selected backend. Semaphores remain shared on that backend's queue database.

{% for fact in backend_facts %}
{{ fact.label }}
{{ fact.value }}
{% endfor %}
{% for card in summary_cards %}

{{ 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 %}

{% endfor %}

queues

Live queue pressure, pause state, recurring ownership, and first-line controls for this backend.

{% if queue_section.rows %}
{% include "admin/dj_queue/_sortable_header_cells.html" with headers=queue_section.headers num_sorted_fields=queue_section.num_sorted_fields %} {% for queue in queue_section.rows %} {% endfor %}
Controls
{{ queue.name }} {{ queue.ready_count }} {{ queue.scheduled_count }} {{ queue.claimed_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:"-" }} {% include "admin/dj_queue/_queue_controls.html" with queue_name=queue.name backend_alias=backend_alias next_url=request.get_full_path paused=queue.paused show_clear=True pause_toggle_pause_class="button djq-button-pause" pause_toggle_resume_class="button djq-button-resume" clear_button_class="button" controls_class="djq-queue-controls" %}
{% else %}

No queues found for this backend.

{% endif %}
{% include "admin/dj_queue/_dashboard_section_table.html" with section_id="process-summary" title="processes" copy="Supervisor-first runtime topology so workers, dispatchers, and schedulers read as one grouped runtime." section=process_section table_class="djq-table djq-table-processes" rows_template="admin/dj_queue/_dashboard_process_rows.html" pagination_id="pagination-processes" pagination_label="Pagination processes" empty_text="No registered processes." %} {% include "admin/dj_queue/_dashboard_section_table.html" with section_id="recurring-summary" title="recurring tasks" copy="Scheduled work defined for this backend, with next-fire context for operators." section=recurring_section table_class="djq-table djq-table-recurring" rows_template="admin/dj_queue/_dashboard_recurring_rows.html" pagination_id="pagination-recurring" pagination_label="Pagination recurring tasks" empty_text="No recurring tasks configured." %} {% include "admin/dj_queue/_dashboard_section_table.html" with section_id="semaphore-summary" title="semaphores" copy="Concurrency state for hot keys, including waiters and expiry windows." section=semaphore_section table_class="djq-table djq-table-semaphores" rows_template="admin/dj_queue/_dashboard_semaphore_rows.html" pagination_id="pagination-semaphores" pagination_label="Pagination semaphores" empty_text="No active semaphores." %}

inspect raw rows

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

Processes, pauses, and recurring rows are backend-scoped. Semaphores remain scoped by the selected backend's queue database alias.

{% endblock content %}