diff --git a/web/src/padelnomics/admin/templates/admin/partials/pipeline_overview.html b/web/src/padelnomics/admin/templates/admin/partials/pipeline_overview.html new file mode 100644 index 0000000..7015fc5 --- /dev/null +++ b/web/src/padelnomics/admin/templates/admin/partials/pipeline_overview.html @@ -0,0 +1,121 @@ + + + +
Extraction Status
+ {% if workflow_rows %} +{{ wf.schedule_label }}
+ {% if run %} +{{ run.started_at[:16].replace('T', ' ') if run.started_at else '—' }}
+ {% if run.status == 'failed' and run.error_message %} ++ {{ run.error_message[:80] }}{% if run.error_message|length > 80 %}…{% endif %} +
+ {% endif %} + {% if run.files_written %} +{{ run.files_written }} file{{ 's' if run.files_written != 1 }}, + {{ "{:,}".format(run.bytes_written or 0) }} B
+ {% endif %} + {% else %} +No runs yet
+ {% endif %} +No workflows found. Check that infra/supervisor/workflows.toml exists.
Serving Tables
+ {% if serving_meta %} ++ Last export: {{ serving_meta.exported_at_utc[:19].replace('T', ' ') }} +
+| Table | +Rows | +
|---|---|
| serving.{{ tname }} | +{{ "{:,}".format(tmeta.row_count) }} | +
+ _serving_meta.json not found — run the pipeline to generate it.
+
Landing Zone + + Total: {{ format_bytes(total_landing_bytes) }} + +
+ {% if landing_stats %} +| Source | +Files | +Size | +Latest | +
|---|---|---|---|
| {{ s.name }} | +{{ s.file_count }} | +{{ format_bytes(s.total_bytes) }} | +{{ s.latest_mtime or '—' }} | +
+ Landing zone empty or not found at data/landing.
+
Extraction status, data catalog, and ad-hoc query editor
+Total Runs
+{{ summary.total | default(0) }}
+Success Rate
++ {{ success_rate }}% +
+Serving Tables
+{{ total_serving_tables }}
+Last Export
+{{ last_export }}
+Loading overview…
+