{# plugins/traefik/templates/traefik/rows.html #} {# ── Global stats bar ──────────────────────────────────────────────────────── #} {% if global_stat %}
{% if global_stat.open_conns_total is not none %} Open conns {{ global_stat.open_conns_total | int }} {% endif %} {% if global_stat.config_last_reload_success is not none %} Config {% if global_stat.config_last_reload_success == 1.0 %} ✓ OK {% else %} ✗ failed {% endif %} {% if global_stat.config_reloads_total is not none %} ({{ global_stat.config_reloads_total | int }} reloads) {% endif %} {% endif %} {% if global_stat.process_memory_bytes is not none %} Memory {{ global_stat.process_memory_bytes|bytes }} {% endif %} {{ global_stat.scraped_at.strftime("%H:%M:%S") }} UTC
{% endif %} {# ── Per-service cards + cert card in shared columns layout ───────────────── #} {% if router_data or certs %}
{% for r in router_data %}

{{ r.name }}

Req/s {{ "%.2f"|format(r.latest.request_rate) }} {{ r.sparkline_req | safe }}
Bandwidth {% set bps = r.latest.response_bytes_rate %} {{ bps|rate }}
p95 ms {{ "%.1f"|format(r.latest.latency_p95_ms) }} {{ r.sparkline_p95 | safe }}
p99 ms {{ "%.1f"|format(r.latest.latency_p99_ms) }}
4xx % {{ "%.1f"|format(r.latest.error_rate_4xx_pct) }}%
5xx % {{ "%.1f"|format(r.latest.error_rate_5xx_pct) }}% {{ r.sparkline_5xx | safe }}
Last scraped {{ r.latest.scraped_at.strftime("%H:%M:%S") }} UTC
{% endfor %} {% if certs %}
TLS Certificates
{% for cert in certs %} {% endfor %}
{{ cert.cn }} {{ cert.days_remaining | int }}d
{{ cert.not_after.strftime("%Y-%m-%d") }}
{% endif %}
{% else %}

No Traefik metrics yet. Configure metrics_url in config.yaml under plugins.traefik.

{% endif %}