{% from "_partials/job_card.html" import status_badge, duration_fmt, timestamp_cell %} {# Sortable column header macro #} {% macro sort_header(label, field, current_sort, current_order) %} {% set is_active = (current_sort == field) %} {% set next_order = 'asc' if (is_active and current_order == 'desc') else 'desc' %} {% set indicator = '' %} {% if is_active %} {% set indicator = ' ▲' if current_order == 'asc' else ' ▼' %} {% endif %} {{ label }}{{ indicator }} {% endmacro %} {% if jobs %}
{% if tab == 'live' %} {% endif %} {% if tab == 'archived' %} {% endif %} {% for job in jobs %} {% if tab == 'live' %} {% endif %} {% if tab == 'archived' %} {% endif %} {% endfor %}
ID {{ sort_header('Actor', 'actor', sort, order) }} {{ sort_header('Queue', 'queue', sort, order) }} {{ sort_header('Status', 'status', sort, order) }}Progress{{ sort_header('Created', 'created_at', sort, order) }} Started {{ sort_header('Finished', 'finished_at', sort, order) if tab == 'archived' else 'Finished' }} Duration {{ sort_header('Attempt', 'attempt', sort, order) }} TagsArchivedActions
{{ job.id[:8] }} {{ job.actor }} {{ job.queue }} {{ status_badge(job.status) }} {% set ps = job.progress_state or {} %} {% if ps is mapping and (ps.get('percent') or ps.get('step')) %}
{{ ps.get('percent', '') }}{% if ps.get('percent') %}%{% endif %}
{% elif job.status == 'running' %} {% else %} {% endif %}
{{ timestamp_cell(job.created_at) }} {{ timestamp_cell(job.started_at) }} {{ timestamp_cell(job.finished_at) }} {% if job.duration_ms is not none %}{{ duration_fmt(job.duration_ms) }}{% else %}—{% endif %} {{ job.attempt }}/{{ job.max_attempts }}
{% for tag in (job.tags or [])[:3] %} {{ tag }} {% endfor %} {% if (job.tags or []) | length > 3 %} +{{ job.tags | length - 3 }} {% endif %}
{% if job.get('archived_at') %}{{ job.archived_at[:19] }}{% else %}—{% endif %}
{# Pagination #} {% if has_next or has_prev %}
Showing {{ jobs | length }} results
{% if has_prev %} Previous {% endif %} {% if has_next %} Next {% endif %}
{% endif %}
{% else %}

No jobs found matching the current filters.

Clear all filters
{% endif %}