Skip to content

feat(loadtest): load testing framework#420

Draft
JeroenSoeters wants to merge 4 commits into
mainfrom
feat/load-testing-suite-b
Draft

feat(loadtest): load testing framework#420
JeroenSoeters wants to merge 4 commits into
mainfrom
feat/load-testing-suite-b

Conversation

@JeroenSoeters

Copy link
Copy Markdown
Collaborator

Summary

Suite B is our regression-detection framework for multi-cloud resource management. This PR lands the initial scaffolding so we can start gathering baselines.

  • Datastore query duration metrics. Emit an OTel histogram per postgres query path so we can spot slow datastore operations under load (and in production).
  • Multi-cloud stress-test env generator. Extend scripts/generate-stress-test-env.py to produce Azure and GCP resources alongside AWS, with scale profiles so we can regenerate consistent small/medium/large envs.
  • Suite B harness. Go-based lifecycle driver under tests/loadtest/harness with apply / verify / soak / destroy phases, metric collection against the observability stack, log checking, and a report renderer. Composed by tests/loadtest/loadtest_test.go.
  • LGTM observability stack forma. VPC-local Loki/Grafana/Tempo/Mimir/OTel-collector on ECS Fargate with ALB, EFS, S3, and IAM. Routes go through the VPCGatewayAttachment resolvable so destroy ordering stays correct. Applying this is also our real-world validation of running 0.84 in production.

Draft while we finish wiring up the resident agent and apply the LGTM forma end-to-end (blocked on #419). Not expected to land before Suite B baselines have been captured against it.

Emit an OTel histogram (formae.datastore.query.duration_ms) per
postgres query path so we can spot slow datastore operations during
load tests and in production.

Initialized alongside the existing pool metrics; a failure to create
the histogram is non-fatal and leaves query duration unmetered.
Extend generate-stress-test-env.py to produce Azure and GCP resources
alongside AWS, selectable via --clouds and configurable per-cloud via
--subscription-azure / --project-gcp. Also wire up scale profiles so
we can generate consistent small/medium/large environments without
hand-picking counts.

Used to seed Suite B regression baselines across the tier-1 cloud
providers.
Add a Go-based harness that drives the Suite B load test lifecycle:
apply, verify, soak, destroy. Each phase lives in its own file so they
can be exercised independently; the harness composes them and reports
results via the shared report type.

Includes helpers for metric collection (scraped from the observability
stack) and log checking, plus unit tests for config and report
rendering.
Add the Suite B observability stack as a formae forma: a VPC-local
LGTM deployment (Loki, Grafana, Tempo, Mimir, OTel collector) on ECS
Fargate with an ALB, S3 backing buckets, EFS for shared state, and
the IAM wiring to let the task pull images and write logs.

Routes depend on the VPCGatewayAttachment resolvable rather than the
internet gateway directly so the create/destroy ordering stays correct.

This is the resident observability environment the harness scrapes
metrics and logs from during load tests; applying it successfully is
also our end-to-end validation of running 0.84 in production.
@JeroenSoeters JeroenSoeters changed the title feat(loadtest): Suite B load testing framework feat(loadtest): load testing framework Apr 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant