test(e2e-chain): render Stress Tests section in the PDF report

Add a Stress Tests section (per-case table + per-axis scaling-curve images)
after Performance, guarded so it is omitted when no stress data is present.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martino Ferrari
2026-06-26 09:30:20 +02:00
parent ec8e5c43c3
commit ca564fb233
+37
View File
@@ -220,6 +220,43 @@ MARTe2 processes, plus sustained client throughput (recorded samples ÷ duration
}).flatten()
)
// ── stress / capacity ─────────────────────────────────────────────────────────
#let stress = data.at("stress", default: none)
#if stress != none [
= Stress Tests #h(6pt) #status_badge(stress.overall)
Capacity matrix: one load axis swept at a time. Hard gates survival + client
liveness; soft gates peak RSS and zoom p95 latency. The size axis crosses into
the multi-fragment (>64 KB packet) regime.
#v(4pt)
#table(
columns: (1.5fr, 1.6fr, 0.7fr, 0.7fr, 1fr, 1fr, 1fr, 1fr),
align: (left, left, right, center, right, right, right, right),
stroke: 0.4pt + rgb("#d0d7de"),
inset: 4pt,
table.header([*Case*], [*Axis*], [*Level*], [*Status*],
[*MARTe RSS (MB)*], [*Hub RSS (MB)*],
[*Hub CPU (s)*], [*Zoom p95 (ms)*]),
..stress.cases.map(c => (
raw(c.id),
text(size: 8pt)[#c.axis],
[#c.level],
status_badge(c.status),
fnum(c.at("marte_rss_mb", default: none), digits: 1),
fnum(c.at("hub_rss_mb", default: none), digits: 1),
fnum(c.at("hub_cpu_s", default: none), digits: 2),
fnum(c.at("zoom_p95_ms", default: none), digits: 1),
)).flatten()
)
#let splots = data.at("stress_plots", default: ())
#if splots.len() > 0 [
#v(6pt)
== Scaling curves
#grid(columns: 2, gutter: 8pt,
..splots.map(p => image(p, width: 100%))
)
]
]
// ── per-scenario waveform fidelity ───────────────────────────────────────────
= Scenarios
#for sc in e2e.scenarios [