Bot swarm
dev-bypass@local
d
Bot swarm
Drive synthetic load against any feature. Pick a scenario, mix
personas, watch live latency in real time. No SSH, no CLI, no
Prometheus — single pane.
Targeting:
http://api:9080
Live
Host load (1m / 5m)
/
API /v1/health ping
DOWN
Admin goroutines
⚪
Admin mem (heap / sys)
/
Host stays green at rest ↑. Start a run to see counters + per-endpoint latency appear here.
Bots
Iters
Errors
auth:
·
step:
Throughput
Per-endpoint latency (rolling 2k)
| Endpoint | Calls | p50 | p95 | p99 | Err | Err% |
|---|---|---|---|---|---|---|
Cold-start spike detected
Steady-state p99 is ,
but at some point during the run a single sample hit
and p99 peaked at .
Real users opening the app during this window would have felt it.
If this matters in production (e.g. mass-launch wave), consider pre-warming connection pools (boot-time GET /v1/health × 10 from each box) or pre-loading PG query plans (run
If this matters in production (e.g. mass-launch wave), consider pre-warming connection pools (boot-time GET /v1/health × 10 from each box) or pre-loading PG query plans (run
EXPLAIN on hot queries at startup).
Test configuration
- Scenario
- Bots
- Duration (target / actual)
- /
- Persona mix
- Target
- Seed
- Notes
- Run ID
Throughput
Error rate
Worst p99 (steady / peak)
/
Total iters / errors
/
Endpoint breakdown
| Endpoint | Calls | p50 | p95 | p99 | Err | Err% |
|---|---|---|---|---|---|---|
Next step
Identity pool
authed bots reuse JWTs across runs
cached
access valid
refresh only
Thresholds (2 vCPU): 🟢 healthy · 🟡 strained · 🔴 ceiling found.
Load > 2 ⚠ > 4 ✗ · API ping > 300 ms ⚠ > 1 s ✗ · Goroutines > 2k ⚠ > 5k ✗ · p99 > 500 ms ⚠ > 2 s ✗
Past runs (20)
Compare:
vs
Click A / B on two rows then hit Compare to see side-by-side diff.
Tag your baselines (e.g.
"baseline-no-cache") so they're easy to find later.
| Pick | Run · Tag | Scenario | Bots | Dur | Iter | Err | Phase | Started |
|---|---|---|---|---|---|---|---|---|
|
|
|
leaderboard-browse |
1000 | 60s | 44389 | 30085 | done | 2026-05-13 19:40 |
|
|
|
leaderboard-browse |
1000 | 60s | 45251 | 31661 | done | 2026-05-13 19:38 |
|
|
|
daily-loop |
1000 | 60s | 17046 | 0 | done | 2026-05-13 19:35 |
|
|
|
daily-loop |
1000 | 60s | 16427 | 0 | done | 2026-05-13 19:33 |
|
|
|
daily-loop |
1000 | 60s | 16105 | 0 | done | 2026-05-13 19:22 |
|
|
|
pool-warm |
1000 | 30s | 1000 | 0 | done | 2026-05-13 19:21 |
|
|
|
pool-warm |
1000 | 120s | 1000 | 0 | done | 2026-05-13 19:19 |
|
|
|
auth-flood |
10 | 60s | 168 | 0 | done | 2026-05-13 19:09 |
|
|
|
pool-warm |
1000 | 150s | 504 | 2510 | done | 2026-05-13 19:02 |
|
|
|
pool-warm |
1000 | 120s | 695 | 305 | done | 2026-05-13 17:52 |
|
|
|
pool-warm |
10 | 60s | 10 | 0 | done | 2026-05-13 17:50 |
|
|
|
auth-flood |
1000 | 120s | 790 | 936 | done | 2026-05-13 17:48 |
|
|
|
auth-flood |
1000 | 120s | 901 | 906 | done | 2026-05-13 17:11 |
|
|
|
auth-flood |
1000 | 360s | 3473 | 2042 | done | 2026-05-13 16:41 |
|
|
|
auth-flood |
1000 | 120s | 1184 | 1004 | done | 2026-05-13 16:38 |
|
|
|
daily-loop |
250 | 60s | 15358 | 0 | done | 2026-05-13 16:33 |
|
|
|
daily-loop |
250 | 60s | 16254 | 0 | done | 2026-05-13 16:31 |
|
|
|
daily-loop |
250 | 60s | 11661 | 0 | done | 2026-05-13 16:30 |
|
|
|
daily-loop |
50 | 60s | 5421 | 0 | done | 2026-05-13 16:26 |
|
|
|
daily-loop |
50 | 60s | 5026 | 0 | done | 2026-05-13 16:25 |