{# traefik/rows.html — HTMX fragment for the Traefik page: routers that need attention first (routes.router_state), the proxy's own counts, the healthy routers folded into one table, then certificates by soonest expiry. #} {% from "_macros.html" import stat_tile, status_badge %} {# ── Counts ───────────────────────────────────────────────────────────────── #}
{{ r.why }}
| Req/s | {{ "%.2f"|format(r.latest.request_rate) }} | {{ r.sparkline_req|safe }} |
| Bandwidth | {{ r.latest.response_bytes_rate|rate }} | |
| p95 | {{ "%.0f"|format(r.latest.latency_p95_ms) }} ms | {{ r.sparkline_p95|safe }} |
| p99 | {{ "%.0f"|format(r.latest.latency_p99_ms) }} ms | |
| 4xx | {{ "%.1f"|format(r.latest.error_rate_4xx_pct) }}% | |
| 5xx | {{ "%.1f"|format(r.latest.error_rate_5xx_pct) }}% | {{ r.sparkline_5xx|safe }} |
| Router | Req/s | Bandwidth | p95 | 4xx | 5xx |
|---|---|---|---|---|---|
| {{ r.name }} | {{ "%.2f"|format(r.latest.request_rate) }} | {{ r.latest.response_bytes_rate|rate }} | {{ "%.0f"|format(r.latest.latency_p95_ms) }} ms | {{ "%.1f"|format(r.latest.error_rate_4xx_pct) }}% | {{ "%.1f"|format(r.latest.error_rate_5xx_pct) }}% |
Traefik stopped reporting these, usually because the service behind them was removed.
| Name | Routers | Expires | Left |
|---|---|---|---|
| {{ cert.cn }}{% if cert.sans %} also {{ cert.sans|join(", ") }} {% endif %} |
{% if cert.routers is none %}—{% elif cert.routers %}{{ cert.routers|join(", ") }}{% else %}not in use{% endif %} | {{ cert.not_after.strftime("%Y-%m-%d") }} | {{ cert_left(cert.days_remaining) }} |
| Name | Expires |
|---|---|
| {{ cert.cn }} | {{ cert.not_after.strftime("%Y-%m-%d") }} |
No Traefik metrics yet. Configure metrics_url in config.yaml under plugins.traefik.