···2020 scripts/latency --plain # no ANSI (pipe/paste friendly)
2121 scripts/latency --backend http://... # point elsewhere
22222323-Note: lifetime /stats percentiles persist across restarts and still carry
2424-the 2026-06-10 outage tail (p99 in MINUTES); the hourly series is the
2525-honest view of now.
2323+Note: lifetime /stats percentiles persist across restarts (reset
2424+2026-06-12 when the endpoint registry grew); the hourly series is the
2525+view of "now", the summary is the long arc.
2626"""
27272828import argparse
···129129 def ms(v: float) -> str:
130130 return f"{v:,.0f}ms"
131131132132- print(f"{'endpoint':<18}{'count':>8}{'p50':>10}{'p95':>12}{'p99':>14}{'max':>14}")
132132+ print(f"{'endpoint':<26}{'count':>8}{'p50':>10}{'p95':>12}{'p99':>14}{'max':>14}")
133133 for n in names:
134134 t = timing[n]
135135- print(f"{n:<18}{t['count']:>8}{ms(t['p50_ms']):>10}{ms(t['p95_ms']):>12}{ms(t['p99_ms']):>14}{ms(t['max_ms']):>14}")
136136- print("\n(lifetime, persisted across restarts — includes 2026-06-10 outage tail)")
135135+ print(f"{n:<26}{t['count']:>8}{ms(t['p50_ms']):>10}{ms(t['p95_ms']):>12}{ms(t['p99_ms']):>14}{ms(t['max_ms']):>14}")
136136+ print("\n(lifetime since 2026-06-12 — percentile history reset when the endpoint registry grew)")
137137138138 plt.clear_figure()
139139 plt.theme("pro")