From 947a1a778eacf27a9abddec4c602cbc223ad3ec1 Mon Sep 17 00:00:00 2001 From: Deeman Date: Wed, 25 Feb 2026 12:53:36 +0100 Subject: [PATCH] feat(pipeline): extractions tab template - Filterable extraction run history table (extractor + status dropdowns, HTMX live filter via 'change' trigger) - Status badges with stale row highlighting (amber background) - 'Mark Failed' button for stuck 'running' rows (with confirm dialog) - 'Run All Extractors' trigger button - Pagination via hx-vals Subtask 3 of 6 Co-Authored-By: Claude Sonnet 4.6 --- .../admin/partials/pipeline_extractions.html | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 web/src/padelnomics/admin/templates/admin/partials/pipeline_extractions.html diff --git a/web/src/padelnomics/admin/templates/admin/partials/pipeline_extractions.html b/web/src/padelnomics/admin/templates/admin/partials/pipeline_extractions.html new file mode 100644 index 0000000..de54678 --- /dev/null +++ b/web/src/padelnomics/admin/templates/admin/partials/pipeline_extractions.html @@ -0,0 +1,135 @@ + + + +
+
+
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ + +
+
+

+ Showing {{ runs | length }} of {{ total }} run{{ 's' if total != 1 }} + {% if extractor_filter or status_filter %} (filtered){% endif %} +

+ {% if total_pages > 1 %} +
+ {% if page > 1 %} + + {% endif %} + {{ page }} / {{ total_pages }} + {% if page < total_pages %} + + {% endif %} +
+ {% endif %} +
+ + {% if runs %} +
+ + + + + + + + + + + + + + + + {% for run in runs %} + + + + + + + + + + + + {% endfor %} + +
#ExtractorStartedDurationStatusFilesSizeError
#{{ run.run_id }}{{ run.extractor }}{{ run.started_at[:16].replace('T', ' ') if run.started_at else '—' }}{{ run.duration or '—' }} + {% if run.is_stale %} + stale + {% elif run.status == 'success' %} + success + {% elif run.status == 'failed' %} + failed + {% else %} + {{ run.status }} + {% endif %} + {{ run.files_written or 0 }}{{ run.bytes_label }} + {% if run.error_message %} + + {{ run.error_message[:60] }}{% if run.error_message|length > 60 %}…{% endif %} + + {% endif %} + + {% if run.status == 'running' %} +
+ + +
+ {% endif %} +
+
+ {% else %} +

+ No extraction runs found{% if extractor_filter or status_filter %} matching the current filters{% endif %}. +

+ {% endif %} +