{% extends "admin/layout.html" %} {% block content %} {# Breadcrumb #} {# Page heading #}

Queue

Monitor pending jobs, throughput, and failed jobs.

{# ── Throughput (last 24 h) ───────────────────────────────────────── #} {% if not history_table_missing %}

Throughput — last 24 hours

{% if throughput %}
{% for bucket in throughput %}
{{ bucket.hour_label }}
{% if bucket.total > 0 %}
{% if bucket.completed > 0 %}
{% endif %} {% if bucket.failed > 0 %}
{% endif %}
{% else %}
{% endif %}
{% if bucket.total > 0 %} {{ bucket.completed }} {% if bucket.failed > 0 %} / {{ bucket.failed }}{% endif %} {% else %} {% endif %}
{% endfor %}
Completed Failed
{% else %}

No job history yet. Jobs are recorded here once processed.

{% endif %}
{# ── Per-queue breakdown ──────────────────────────────────────────── #} {% if queue_stats %}

Queue breakdown

{% for qs in queue_stats %} {% endfor %}
Queue Pending Processed (1h) Failed (1h)
{{ qs.queue }} {% if qs.pending > 0 %} {{ qs.pending }} {% else %}—{% endif %} {% if qs.processed_1h > 0 %} {{ qs.processed_1h }} {% else %}0{% endif %} {% if qs.failed_1h > 0 %} {{ qs.failed_1h }} {% else %}0{% endif %}
{% endif %} {% else %}

The jobs_history table does not exist. Add it by re-running hunt queue:table and hunt migrate.

{% endif %} {# ── Failed Jobs ─────────────────────────────────────────────────── #}

Failed Jobs {% if failed_jobs %} {{ failed_jobs | length }} {% endif %}

{% if failed_jobs %}
{% endif %}
{% if failed_table_missing %}

The jobs_failed table does not exist. Run your queue migrations first.

{% elif not failed_jobs %}

No failed jobs.

{% else %}
{% for job in failed_jobs %} {% endfor %}
ID Queue Job Exception Failed At Actions
{{ job.id }} {{ job.queue }} {{ job._job_class }} {% if job.exception %} {{ job.exception[:80] }}{% if job.exception | length > 80 %}…{% endif %} {% else %} {% endif %} {{ job._failed_at_fmt }}
{# Failed job detail modals #} {% for job in failed_jobs %}

{{ job._job_class }}

Queue: {{ job.queue }}  ·  Failed: {{ job._failed_at_fmt }}

Exception

{{ job.exception or '—' }}

Payload

{{ job._payload_formatted }}
{% endfor %} {% endif %}
{# ── Pending / Processing Jobs ────────────────────────────────────── #}

Pending Jobs {% if pending_jobs %} {{ pending_jobs | length }} {% endif %}

{% if jobs_table_missing %}

The jobs table does not exist. Run your queue migrations first.

{% elif not pending_jobs %}

No jobs in queue.

{% else %}
{% for job in pending_jobs %} {% endfor %}
ID Queue Job Status Attempts Created At
{{ job.id }} {{ job.queue }} {{ job._job_class }} {% if job._status == 'Processing' %} Processing {% elif job._status == 'Delayed' %} Delayed {% else %} Pending {% endif %} {{ job.attempts }} {{ job._created_at_fmt }}
{% endif %}
{% endblock %}