/** P50/P95 latency baseline for key pages/APIs against a running instance (sequential, warm). Usage: tsx scripts/latency-baseline.ts [base] [n] */ const base = (process.argv[2] ?? process.env.E2E_BASE_URL ?? "http://127.0.0.1:8540").replace(/\/$/, ""); const n = Number(process.argv[3] ?? 20); const targets = ["/", "/tools", "/tools?q=vector%20database", "/tools?category=ai&source=open-source", "/tools/duckdb", "/categories/analytics-engines", "/collections/apple-silicon-ai", "/compare?tools=duckdb,postgresql,sqlite", "/api/suggest?q=post", "/api/health", "/sitemap.xml"]; const q = (a: number[], p: number) => a.slice().sort((x, y) => x - y)[Math.min(a.length - 1, Math.floor(p * a.length))]; const out: Record = {}; for (const t of targets) { const times: number[] = []; let bytes = 0, status = 0; await fetch(base + t); for (let i = 0; i < n; i++) { const t0 = performance.now(); const r = await fetch(base + t); const b = await r.arrayBuffer(); times.push(performance.now() - t0); bytes = b.byteLength; status = r.status; } out[t] = { p50: Math.round(q(times, 0.5)), p95: Math.round(q(times, 0.95)), bytes, status }; } console.table(out); console.log(JSON.stringify({ base, n, at: new Date().toISOString(), out })); export {};