exporting ECB

This commit is contained in:
Priec
2026-08-13 09:11:41 +02:00
parent f8e483efa8
commit fe8ea680e3
24 changed files with 895 additions and 1 deletions

View File

@@ -0,0 +1,53 @@
{#
The health card — crate::pages::admin::ecb::ui::StatusFragment, and what
ecb.html embeds on first load.
It carries its own poll trigger rather than the page carrying it, so the
trigger travels with each swap: while a batch is running the card asks for
itself every few seconds, and the card that comes back after the batch
finishes has no trigger, which is what stops the polling.
#}
<section class="panel status-card {{ page.health_class() }}"
{% if page.should_poll() %}hx-get="/admin/ecb/status" hx-trigger="every 3s" hx-target="#ecb-status" hx-swap="outerHTML"{% endif %}
id="ecb-status">
<h2>
{{ page.headline() }}
{% if page.import_running %}<span class="tag">import running</span>{% endif %}
</h2>
<p class="hint">{{ page.explanation() }}</p>
<dl class="status-grid">
<div>
<dt>Verified through</dt>
<dd>{% if let Some(date) = page.verified_through_date %}{{ date }}{% else %}<span class="hint">never</span>{% endif %}</dd>
</div>
<div>
<dt>Should reach</dt>
<dd>{{ page.latest_verifiable_date }}</dd>
</div>
<div>
<dt>Next import</dt>
<dd>{{ page.next_import_at }}</dd>
</div>
<div>
<dt>Currencies on that day</dt>
<dd>
{%- if page.covered_currencies.is_empty() %}<span class="hint">none</span>
{%- else %}{{ page.covered_currencies.len() }}{% endif -%}
</dd>
</div>
</dl>
{% if !page.covered_currencies.is_empty() %}
<div class="currency-list">
{% for currency in page.covered_currencies %}<span class="tag">{{ currency }}</span>{% endfor %}
</div>
{% endif %}
{% if let Some(failure) = page.last_failure() %}
<p class="hint failure-note">
Most recent failure — batch {{ failure.batch_id }}, started {{ failure.started_at }}:
{% if let Some(message) = failure.error_message %}{{ message }}{% else %}no reason was recorded.{% endif %}
</p>
{% endif %}
</section>