Commit 23e8d8f
authored
fix(benchmark): harden target monitoring
Closes #3637
## Summary
- Add a benchmark target monitor that starts at the measured benchmark
window and verifies the target before any Bencher payload files are
written.
- Preserve the pre-measurement target log to
`bench_results/target_startup_before_benchmark.log`, then blank the live
log so the existing workflow grep cannot match pre-benchmark `died
UNEXPECTEDLY` lines.
- Treat the node-renderer master's `died UNEXPECTEDLY` log line as an
explicit Pro worker restart signal and fail before uploading partial
metrics.
## Tests
- `bundle exec rspec benchmarks/spec/benchmark_target_monitor_spec.rb`
- `bundle exec rspec benchmarks/spec`
- `bundle exec rubocop benchmarks/bench.rb
benchmarks/bench-node-renderer.rb benchmarks/lib/benchmark_helpers.rb
benchmarks/lib/benchmark_target_monitor.rb
benchmarks/spec/benchmark_target_monitor_spec.rb`
- `bundle exec rubocop` (baseline fails on unrelated
`react_on_rails/spike/3313_prism_gemfile_rewriter/*` offenses;
changed-file RuboCop and hooks are clean)
- `/Users/justin/.agents/skills/autoreview/scripts/autoreview --mode
local`
- pre-commit and pre-push hooks reran changed-file RuboCop with no
offenses
## Design Calls
- Kept the implementation in benchmark scripts/tests and did not edit CI
workflow YAML.
- Used log windowing inside the benchmark scripts so #3579's existing
post-run workflow grep now sees only measured-run log content.
- Preserved successful-startup/pre-measure logs as an uploaded benchmark
artifact; startup crashes that happen before benchmark scripts run still
use the existing workflow log dump because improving that path further
would require workflow YAML changes.
Labels: benchmark, ci-tooling
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Changes are confined to benchmark scripts and CI env vars already in
use; they tighten when metrics are written without touching app runtime
or auth.
>
> **Overview**
> Benchmark runs now **gate Bencher uploads** on target health, not only
on green Vegeta/k6 results.
>
> A new **`BenchmarkTargetMonitor`** starts at the measured window (from
`TARGET_PID` / `TARGET_LOG`), copies pre-run logs to
`target_startup_before_benchmark.log`, overwrites the live log with
newlines so startup `died UNEXPECTEDLY` lines cannot pollute post-run
checks, then **verifies** the target PID is still alive and that no
unexpected Pro node-renderer worker restart was logged during the run.
**`write_benchmark_payload`** runs that verification before writing
BMF/display JSON; **`bench.rb`** and **`bench-node-renderer.rb`** call
the monitor and exit with a GitHub Actions `::error::` if monitoring
fails after an otherwise successful suite.
>
> Specs cover log windowing, PID validation, failure ordering (no
payload write on monitor failure), and integration with the shared
helper.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
caf53a3. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Benchmarks now run a pre/post measurement monitor that preserves
startup logs, blanks live logs during measurement, verifies the target
process and log integrity, and prevents writing results if the monitor
detects failures (emits an error and exits).
* **Tests**
* Added comprehensive tests for log preservation,
verification-before-write ordering, payload-write gating, and multiple
failure scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->1 parent 6710d47 commit 23e8d8f
5 files changed
Lines changed: 391 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
351 | 351 | | |
352 | 352 | | |
353 | 353 | | |
| 354 | + | |
| 355 | + | |
354 | 356 | | |
355 | 357 | | |
356 | 358 | | |
| |||
366 | 368 | | |
367 | 369 | | |
368 | 370 | | |
369 | | - | |
370 | | - | |
371 | | - | |
372 | | - | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
373 | 374 | | |
374 | | - | |
375 | | - | |
376 | | - | |
377 | | - | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
378 | 382 | | |
379 | 383 | | |
380 | 384 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
190 | 190 | | |
191 | 191 | | |
192 | 192 | | |
| 193 | + | |
| 194 | + | |
193 | 195 | | |
194 | 196 | | |
195 | 197 | | |
| |||
203 | 205 | | |
204 | 206 | | |
205 | 207 | | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
210 | 211 | | |
211 | | - | |
212 | | - | |
213 | | - | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
214 | 218 | | |
215 | 219 | | |
216 | 220 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
100 | 101 | | |
101 | 102 | | |
102 | 103 | | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
0 commit comments