Files
git.stella-ops.org/ops/devops/vex/vex-ci-loadtest-plan.md
StellaOps Bot 885ce86af4
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Mirror Thin Bundle Sign & Verify / mirror-sign (push) Has been cancelled
feat: Add VEX Lens CI and Load Testing Plan
- Introduced a comprehensive CI job structure for VEX Lens, including build, test, linting, and load testing.
- Defined load test parameters and SLOs for VEX Lens API and Issuer Directory.
- Created Grafana dashboards and alerting mechanisms for monitoring API performance and error rates.
- Established offline posture guidelines for CI jobs and load testing.

feat: Implement deterministic projection verification script

- Added `verify_projection.sh` script for verifying the integrity of projection exports against expected hashes.
- Ensured robust error handling for missing files and hash mismatches.

feat: Develop Vuln Explorer CI and Ops Plan

- Created CI jobs for Vuln Explorer, including build, test, and replay verification.
- Implemented backup and disaster recovery strategies for MongoDB and Redis.
- Established Merkle anchoring verification and automation for ledger projector.

feat: Introduce EventEnvelopeHasher for hashing event envelopes

- Implemented `EventEnvelopeHasher` to compute SHA256 hashes for event envelopes.

feat: Add Risk Store and Dashboard components

- Developed `RiskStore` for managing risk data and state.
- Created `RiskDashboardComponent` for displaying risk profiles with filtering capabilities.
- Implemented unit tests for `RiskStore` and `RiskDashboardComponent`.

feat: Enhance Vulnerability Detail Component

- Developed `VulnerabilityDetailComponent` for displaying detailed information about vulnerabilities.
- Implemented error handling for missing vulnerability IDs and loading failures.
2025-12-02 07:18:28 +02:00

55 lines
2.8 KiB
Markdown

# VEX Lens CI + Load/Obs Plan (DEVOPS-VEX-30-001)
Scope: CI jobs, load/perf tests, dashboards, and alerts for VEX Lens API and Issuer Directory.
Assumptions: offline-friendly mirrors available; VEX Lens uses Mongo + Redis; Issuer Directory uses Mongo + OIDC.
## CI Jobs (Gitea workflow template)
- `build-vex`: dotnet restore/build for `src/VexLens/StellaOps.VexLens`, cache `local-nugets/`, set `DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1`.
- `test-vex`: `dotnet test` VexLens and Issuer Directory tests with `DOTNET_DISABLE_BUILTIN_GRAPH=1` to avoid graph fan-out; publish TRX + coverage.
- `lint-spec`: validate VEX OpenAPI/JSON schema snapshots (run `dotnet tool run spec-validation`).
- `sbom+attest`: reuse `ops/devops/docker/sbom_attest.sh` after image build; push attestations.
- `loadtest`: run k6 (or oha) scenario against ephemeral stack via compose profile:
- startup with Mongo/Redis fixtures from `samples/vex/fixtures/*.json`.
- endpoints: `/vex/entries?tenant=…`, `/issuer-directory/issuers`, `/issuer-directory/statistics`.
- SLOs: p95 < 250ms for reads, error rate < 0.5%.
- artifacts: `results.json` + Prometheus remote-write if enabled.
## Load Test Shape (k6 sketch)
- 5 min ramp to 200 VUs, 10 min steady, 2 min ramp-down.
- Mix: 70% list queries (pagination), 20% filtered queries (product, severity), 10% issuer stats.
- Headers: tenant header (`X-StellaOps-Tenant`), auth token from seeded issuer.
- Fixtures: seed 100k VEX statements, 5k issuers, mixed disputed/verified statuses.
## Dashboards (Grafana)
Panels to add under folder `StellaOps / VEX`:
- API latency: p50/p95/p99 for `/vex/entries`, `/issuer-directory/*`.
- Error rates by status code and tenant.
- Query volume and cache hit rate (Redis, if used).
- Mongo metrics: `mongodb_driver_commands_seconds` (p95), connection pool usage.
- Background jobs: ingestion/GC queue latency and failures.
## Alerts
- `vex_api_latency_p95_gt_250ms` for 5m.
- `vex_api_error_rate_gt_0.5pct` for 5m.
- `issuer_directory_cache_miss_rate_gt_20pct` for 15m (if cache enabled).
- `mongo_pool_exhausted` when pool usage > 90% for 5m.
## Offline / air-gap posture
- Use mirrored images and `local-nugets/` only; no outbound fetch in CI jobs.
- k6 binary vendored under `tools/k6/` (add to cache) or use `oha` from `tools/oha/`.
- Load test fixtures stored in repo under `samples/vex/fixtures/` to avoid network pulls.
## How to run locally
```
# build and test
DOTNET_DISABLE_BUILTIN_GRAPH=1 dotnet test src/VexLens/StellaOps.VexLens.Tests/StellaOps.VexLens.Tests.csproj
# run loadtest (requires docker + k6)
make -f ops/devops/Makefile vex-loadtest
```
## Evidence to attach
- TRX + coverage
- k6 `results.json`/`summary.txt`
- Grafana dashboard JSON export (`dashboards/vex/*.json`)
- Alert rules file (`ops/devops/vex/alerts.yaml` when created)