@@ -112,31 +112,35 @@ pip install -r requirements.txt
112112
113113## Architecture
114114
115- ```
116- ┌─────────────────────────────────────────────────────────────────┐
117- │ CLI / MCP / GUI / Control Socket │
118- └──────────────────┬──────────────────────────────────────────────┘
119- │ action JSON
120- ┌──────────────────▼──────────────────────────────────────────────┐
121- │ Action Executor (LD_* dispatch + safe builtins) │
122- └──────────────────┬──────────────────────────────────────────────┘
123- │ start_test
124- ┌──────────────────▼──────────────────────────────────────────────┐
125- │ locust_wrapper_proxy (per-protocol task store) │
126- └──────────────────┬──────────────────────────────────────────────┘
127- │
128- ┌───────────────┴───────────────┬──────────────┬──────────────┐
129- ▼ ▼ ▼ ▼
130- HTTP / FastHttp WebSocket gRPC MQTT Raw TCP / UDP
131- │ │ │ │
132- └───────────────┬───────────────┴──────────────┴──────────────┘
133- │ Locust events
134- ┌───────────────┴───────────────┐
135- ▼ ▼
136- test_record_instance Prometheus / InfluxDB / OTel
137- │
138- ├── HTML / JSON / XML / CSV / JUnit / Summary reports
139- └── SQLite persistence (cross-run comparison)
115+ ``` mermaid
116+ flowchart TD
117+ subgraph Entry["Entry Surfaces"]
118+ CLI[CLI]
119+ MCP[MCP Server]
120+ GUI[GUI]
121+ SOCK[Control Socket]
122+ end
123+
124+ Entry -- "action JSON" --> EXEC["Action Executor<br/>(LD_* dispatch + safe builtins)"]
125+ EXEC -- "start_test" --> WRAPPER["locust_wrapper_proxy<br/>(per-protocol task store)"]
126+
127+ WRAPPER --> HTTP["HTTP / FastHttp"]
128+ WRAPPER --> WS["WebSocket"]
129+ WRAPPER --> GRPC["gRPC"]
130+ WRAPPER --> MQTT["MQTT"]
131+ WRAPPER --> RAW["Raw TCP / UDP"]
132+
133+ HTTP -- "Locust events" --> BUS([Locust Event Bus])
134+ WS --> BUS
135+ GRPC --> BUS
136+ MQTT --> BUS
137+ RAW --> BUS
138+
139+ BUS --> REC["test_record_instance"]
140+ BUS --> METRICS["Prometheus / InfluxDB / OTel"]
141+
142+ REC --> REPORTS["HTML / JSON / XML / CSV / JUnit / Summary reports"]
143+ REC --> SQLITE[("SQLite persistence<br/>(cross-run comparison)")]
140144```
141145
142146The dependency direction always points from the action layer down to Locust, never the other way around.
0 commit comments