Scanner Analyzer Benchmarks — Operations Guide

Audience. Scanner performance owners, the language analyzer guilds, and the SRE / on-call engineers who watch the scanner_analyzer_bench_* dashboards.

Purpose

Keep the Stella Ops language-analyzer microbench under the < 5 s SBOM pledge. CI emits Prometheus metrics and JSON fixtures on every run so trend dashboards and regression alerts stay in lockstep with the repository baseline. This guide covers the publishing workflow, the Grafana dashboard, and the on-call response when a scenario regresses.

Publishing workflow

  1. CI (or engineers running locally) execute:
    dotnet run \
      --project src/Bench/StellaOps.Bench/Scanner.Analyzers/StellaOps.Bench.ScannerAnalyzers/StellaOps.Bench.ScannerAnalyzers.csproj \
      -- \
      --repo-root . \
      --out src/Bench/StellaOps.Bench/Scanner.Analyzers/baseline.csv \
      --json out/bench/scanner-analyzers/latest.json \
      --prom out/bench/scanner-analyzers/latest.prom \
      --commit "$(git rev-parse HEAD)" \
      --environment "${CI_ENVIRONMENT_NAME:-local}"
    
  2. Publish the artefacts (baseline.csv, latest.json, latest.prom) to bench-artifacts/<date>/.
  3. Promtail (or the CI job) pushes latest.prom into Prometheus; JSON lands in long-term storage for workbook snapshots.
  4. The harness exits non-zero if:
    • max_ms for any scenario breaches its configured threshold; or
    • max_ms regresses ≥ 20 % versus baseline.csv.

Grafana dashboard

Alerting & on-call response

Document the outcome in the Performance Workbook (§8 Trend Snapshot) so trendlines reflect any accepted regressions.