{# 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 {% set mb = (global_stat.process_memory_bytes / 1048576) %} {% if mb >= 1024 %}{{ "%.1f"|format(mb / 1024) }} GB{% else %}{{ "%.0f"|format(mb) }} MB{% endif %} {% 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 %} {% if bps >= 1048576 %}{{ "%.1f"|format(bps / 1048576) }} MB/s {% elif bps >= 1024 %}{{ "%.1f"|format(bps / 1024) }} KB/s {% else %}{{ "%.0f"|format(bps) }} B/s{% endif %}
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 %}