A failure lab in a container

Break the demo API. Keep the receipts.

The optional demo workload creates realistic but bounded diagnostic scenarios so every major Tracebag workflow can be evaluated without risking a production service.

CPU

Heavy computation

Drive several bounded workers and identify hot paths with counters and an EventPipe trace.

LOCK

Contention

Stall requests behind a shared monitor and correlate queues, stacks, and contention events.

POOL

ThreadPool starvation

Block workers long enough to observe queue growth and slow request completion.

MEM

Allocation pressure

Create bounded allocations and inspect GC heap size, collection rate, and artifacts.

HTTP

Downstream failure

Generate structured errors and exceptions with consistent request correlation.

LAT

Slow requests

Add controlled latency while normal traffic continues in the background.

Published release

Launch Tracebag and the demo together

After the one-time host setup, download the matching demo overlay and start it with a Tracebag session:

curl -fsSLo compose.demo.yaml \
  https://raw.githubusercontent.com/poodlelab/tracebag/v${TRACEBAG_VERSION}/deploy/compose.demo.release.yaml

docker compose --env-file .env \
  -f compose.yaml -f compose.demo.yaml pull
docker compose --env-file .env \
  -f compose.yaml -f compose.demo.yaml \
  up -d --wait tracebag-postgres tracebag tracebag-demo-api

Tracebag opens at localhost:9090 and the demo control API at localhost:9091. Every synthetic workload has duration, resource, and concurrency caps plus a reset endpoint.

End the complete demo session with docker compose --env-file .env -f compose.yaml -f compose.demo.yaml down. Named Tracebag volumes remain for another session.

From a source checkout, ./scripts/demo-up.sh --traffic builds the same stack locally and adds normal background traffic.

Follow the ten-minute tour