Self-hosted distributed load testing engine. Send HTTP load to any target, get P50/P90/P99 latency, RPS, status code distribution, and error rate back in real time.
Live: loadtest.kernelgallery.com
React → C# API → RabbitMQ → Go Worker → Target
↓ ↓
MongoDB ←───── persist results
↑
poll (2s)
| Service | Role |
|---|---|
| C# .NET 8 API | Validates input, enqueues task, returns test ID (HTTP 202) |
| Go Worker | Consumes task, fires concurrent HTTP requests via goroutines |
| RabbitMQ | Async queue — decouples API from worker |
| MongoDB | Persists test records and metrics |
| React + Vite | Configures tests, polls and displays results |
Deploy each service (api, worker, frontend) as a separate Coolify application from this repo. All services must share the same Docker network.
| Setting | Value |
|---|---|
| Base Dir | /api |
| Dockerfile | Dockerfile |
| Port | 8080 |
Environment variables:
ASPNETCORE_URLS=http://+:8080
RABBITMQ_HOST=<rabbitmq-hostname>
RABBITMQ_PORT=5672
RABBITMQ_USER=<user>
RABBITMQ_PASS=<pass>
MONGODB_URL=mongodb://<user>:<pass>@<host>:27017/
| Setting | Value |
|---|---|
| Base Dir | /worker |
| Dockerfile | Dockerfile |
| Port | (none) |
Environment variables:
RABBITMQ_HOST=<rabbitmq-hostname>
RABBITMQ_PORT=5672
RABBITMQ_USER=<user>
RABBITMQ_PASS=<pass>
MONGODB_URL=mongodb://<user>:<pass>@<host>:27017/
| Setting | Value |
|---|---|
| Base Dir | /frontend |
| Dockerfile | Dockerfile |
| Port | 80 |
Set the API base URL in frontend/src/api.js before building:
export const API = 'https://your-api-domain.com'docker compose up --build- API →
http://localhost:8080 - Frontend →
http://localhost:3000
- Max 5 000 requests per test
- Max 200 concurrent goroutines
- Localhost and private IPs are blocked
C# .NET 8 · Go 1.22 · RabbitMQ 3 · MongoDB 7 · React 18 · Vite · Tailwind CSS