Skip to content

Commit 4a6a180

Browse files
committed
docs: render architecture diagram with mermaid
1 parent d58e63e commit 4a6a180

3 files changed

Lines changed: 87 additions & 75 deletions

File tree

README.md

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

142146
The dependency direction always points from the action layer down to Locust, never the other way around.

README/README_zh-CN.md

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -107,31 +107,35 @@ pip install -r requirements.txt
107107

108108
## 架构
109109

110-
```
111-
┌─────────────────────────────────────────────────────────────────┐
112-
│ CLI / MCP / GUI / 控制 Socket │
113-
└──────────────────┬──────────────────────────────────────────────┘
114-
│ 动作 JSON
115-
┌──────────────────▼──────────────────────────────────────────────┐
116-
│ 动作 Executor(LD_* 派发 + 安全 builtin) │
117-
└──────────────────┬──────────────────────────────────────────────┘
118-
│ start_test
119-
┌──────────────────▼──────────────────────────────────────────────┐
120-
│ locust_wrapper_proxy(每协议 task store) │
121-
└──────────────────┬──────────────────────────────────────────────┘
122-
123-
┌───────────────┴───────────────┬──────────────┬──────────────┐
124-
▼ ▼ ▼ ▼
125-
HTTP / FastHttp WebSocket gRPC MQTT 原生 TCP / UDP
126-
│ │ │ │
127-
└───────────────┬───────────────┴──────────────┴──────────────┘
128-
│ Locust 事件
129-
┌───────────────┴───────────────┐
130-
▼ ▼
131-
test_record_instance Prometheus / InfluxDB / OTel
132-
133-
├── HTML / JSON / XML / CSV / JUnit / Summary 报告
134-
└── SQLite 持久化(跨次比对)
110+
```mermaid
111+
flowchart TD
112+
subgraph Entry["入口接口"]
113+
CLI[CLI]
114+
MCP[MCP Server]
115+
GUI[GUI]
116+
SOCK[控制 Socket]
117+
end
118+
119+
Entry -- "动作 JSON" --> EXEC["动作 Executor<br/>(LD_* 派发 + 安全 builtin)"]
120+
EXEC -- "start_test" --> WRAPPER["locust_wrapper_proxy<br/>(每协议 task store)"]
121+
122+
WRAPPER --> HTTP["HTTP / FastHttp"]
123+
WRAPPER --> WS["WebSocket"]
124+
WRAPPER --> GRPC["gRPC"]
125+
WRAPPER --> MQTT["MQTT"]
126+
WRAPPER --> RAW["原生 TCP / UDP"]
127+
128+
HTTP -- "Locust 事件" --> BUS([Locust Event Bus])
129+
WS --> BUS
130+
GRPC --> BUS
131+
MQTT --> BUS
132+
RAW --> BUS
133+
134+
BUS --> REC["test_record_instance"]
135+
BUS --> METRICS["Prometheus / InfluxDB / OTel"]
136+
137+
REC --> REPORTS["HTML / JSON / XML / CSV / JUnit / Summary 报告"]
138+
REC --> SQLITE[("SQLite 持久化<br/>(跨次比对)")]
135139
```
136140

137141
依赖方向永远是动作层 → Locust。

README/README_zh-TW.md

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -107,31 +107,35 @@ pip install -r requirements.txt
107107

108108
## 架構
109109

110-
```
111-
┌─────────────────────────────────────────────────────────────────┐
112-
│ CLI / MCP / GUI / 控制 Socket │
113-
└──────────────────┬──────────────────────────────────────────────┘
114-
│ 動作 JSON
115-
┌──────────────────▼──────────────────────────────────────────────┐
116-
│ 動作 Executor(LD_* 派發 + 安全 builtin) │
117-
└──────────────────┬──────────────────────────────────────────────┘
118-
│ start_test
119-
┌──────────────────▼──────────────────────────────────────────────┐
120-
│ locust_wrapper_proxy(每協定 task store) │
121-
└──────────────────┬──────────────────────────────────────────────┘
122-
123-
┌───────────────┴───────────────┬──────────────┬──────────────┐
124-
▼ ▼ ▼ ▼
125-
HTTP / FastHttp WebSocket gRPC MQTT 原生 TCP / UDP
126-
│ │ │ │
127-
└───────────────┬───────────────┴──────────────┴──────────────┘
128-
│ Locust 事件
129-
┌───────────────┴───────────────┐
130-
▼ ▼
131-
test_record_instance Prometheus / InfluxDB / OTel
132-
133-
├── HTML / JSON / XML / CSV / JUnit / Summary 報告
134-
└── SQLite 持久化(跨次比對)
110+
```mermaid
111+
flowchart TD
112+
subgraph Entry["入口介面"]
113+
CLI[CLI]
114+
MCP[MCP Server]
115+
GUI[GUI]
116+
SOCK[控制 Socket]
117+
end
118+
119+
Entry -- "動作 JSON" --> EXEC["動作 Executor<br/>(LD_* 派發 + 安全 builtin)"]
120+
EXEC -- "start_test" --> WRAPPER["locust_wrapper_proxy<br/>(每協定 task store)"]
121+
122+
WRAPPER --> HTTP["HTTP / FastHttp"]
123+
WRAPPER --> WS["WebSocket"]
124+
WRAPPER --> GRPC["gRPC"]
125+
WRAPPER --> MQTT["MQTT"]
126+
WRAPPER --> RAW["原生 TCP / UDP"]
127+
128+
HTTP -- "Locust 事件" --> BUS([Locust Event Bus])
129+
WS --> BUS
130+
GRPC --> BUS
131+
MQTT --> BUS
132+
RAW --> BUS
133+
134+
BUS --> REC["test_record_instance"]
135+
BUS --> METRICS["Prometheus / InfluxDB / OTel"]
136+
137+
REC --> REPORTS["HTML / JSON / XML / CSV / JUnit / Summary 報告"]
138+
REC --> SQLITE[("SQLite 持久化<br/>(跨次比對)")]
135139
```
136140

137141
依賴方向永遠是動作層 → Locust。

0 commit comments

Comments
 (0)