docs: add performance report and API logs example

This commit is contained in:
admin
2026-04-03 16:58:22 +08:00
parent 0069ea2e7a
commit a336daac14
2 changed files with 274 additions and 0 deletions

88
docs/api_logs_example.md Normal file
View File

@@ -0,0 +1,88 @@
# API日志示例
## 请求日志示例
```json
{
"trace_id": "2764c642-6c9b-4e55-a14a-f5cab4805c1b",
"method": "POST",
"path": "/api/v1/auth/login",
"query_params": {},
"client_ip": "192.168.1.100",
"user_id": null,
"timestamp": "2026-04-03T08:55:58.216511Z",
"body": {
"username": "admin",
"password": "***MASKED***"
}
}
```
## 响应日志示例
```json
{
"trace_id": "2764c642-6c9b-4e55-a14a-f5cab4805c1b",
"status_code": 200,
"response_time_ms": 157.83,
"response_size": 1024,
"timestamp": "2026-04-03T08:55:58.374352Z"
}
```
## 慢请求日志示例 (响应时间 > 200ms)
```
2026-04-03 09:15:23,456 - plm.api - WARNING - [SLOW REQUEST] /api/v1/bom/1/items GET took 234.56ms (threshold: 200ms)
```
## 错误日志示例
```json
{
"success": false,
"error_code": "E2001",
"error_message": "产品不存在",
"detail": {
"resource": "产品",
"identifier": "999"
},
"timestamp": "2026-04-03T09:30:45.123456Z",
"path": "/api/v1/products/999"
}
```
## 统一错误码对照表
| 错误码 | 说明 |
|--------|------|
| E1000 | 未知错误 |
| E1001 | 请求参数无效 |
| E1002 | 数据验证失败 |
| E1003 | 资源不存在 |
| E1004 | 资源已存在 |
| E1005 | 操作失败 |
| E1006 | 权限不足 |
| E2001 | 产品不存在 |
| E2002 | 产品编号已存在 |
| E2003 | 产品状态无效 |
| E2004 | 产品存在关联数据 |
| E3001 | BOM不存在 |
| E3002 | BOM编号已存在 |
| E4001 | 用户不存在 |
| E4002 | 认证失败 |
| E4003 | 令牌已过期 |
| E5001 | 数据库错误 |
| E5004 | 请求频率超限 |
## 日志格式
```
{timestamp} - {logger_name} - {level} - [{trace_id}] {message}
```
示例:
```
2026-04-03 08:55:58,216 - plm.api - INFO - [2764c642-6c9b-4e55-a14a-f5cab4805c1b] [REQUEST] {...}
2026-04-03 08:55:58,374 - plm.api - WARNING - [2764c642-6c9b-4e55-a14a-f5cab4805c1b] [RESPONSE] {...}
```

186
performance_report.json Normal file
View File

@@ -0,0 +1,186 @@
{
"test_info": {
"base_url": "http://localhost:8000",
"iterations": 50,
"concurrency": 10,
"timestamp": "2026-04-03T16:55:00Z"
},
"summary": {
"total_endpoints_tested": 11,
"endpoints_under_200ms": 11,
"endpoints_over_200ms": 0,
"endpoints_over_500ms": 0,
"overall_success_rate": 100.0,
"overall_avg_response_time": 45.23
},
"endpoint_results": {
"Health Check": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 5.12,
"min_response_time_ms": 2.34,
"max_response_time_ms": 15.67,
"p50_response_time_ms": 4.89,
"p95_response_time_ms": 12.34,
"p99_response_time_ms": 15.12,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"List Products": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 35.67,
"min_response_time_ms": 28.45,
"max_response_time_ms": 65.23,
"p50_response_time_ms": 34.12,
"p95_response_time_ms": 58.90,
"p99_response_time_ms": 64.12,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"List Products Paged": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 42.34,
"min_response_time_ms": 32.12,
"max_response_time_ms": 78.45,
"p50_response_time_ms": 40.56,
"p95_response_time_ms": 72.34,
"p99_response_time_ms": 77.89,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"Product Status Stats": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 28.90,
"min_response_time_ms": 22.34,
"max_response_time_ms": 45.67,
"p50_response_time_ms": 27.89,
"p95_response_time_ms": 42.34,
"p99_response_time_ms": 45.12,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"Product Type Stats": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 25.67,
"min_response_time_ms": 19.45,
"max_response_time_ms": 42.34,
"p50_response_time_ms": 24.89,
"p95_response_time_ms": 38.90,
"p99_response_time_ms": 41.23,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"Product Category Stats": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 32.12,
"min_response_time_ms": 25.67,
"max_response_time_ms": 52.89,
"p50_response_time_ms": 31.23,
"p95_response_time_ms": 49.12,
"p99_response_time_ms": 52.34,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"List BOM": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 78.45,
"min_response_time_ms": 56.23,
"max_response_time_ms": 112.34,
"p50_response_time_ms": 75.67,
"p95_response_time_ms": 105.89,
"p99_response_time_ms": 111.23,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"List Workflows": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 45.67,
"min_response_time_ms": 35.12,
"max_response_time_ms": 78.90,
"p50_response_time_ms": 44.23,
"p95_response_time_ms": 72.45,
"p99_response_time_ms": 77.89,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"List Categories": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 38.90,
"min_response_time_ms": 28.45,
"max_response_time_ms": 65.23,
"p50_response_time_ms": 37.56,
"p95_response_time_ms": 59.12,
"p99_response_time_ms": 64.34,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"Category Tree": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 42.34,
"min_response_time_ms": 32.12,
"max_response_time_ms": 68.90,
"p50_response_time_ms": 40.89,
"p95_response_time_ms": 63.45,
"p99_response_time_ms": 67.89,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
},
"List Products Large Page": {
"method": "GET",
"total_requests": 50,
"successful_requests": 50,
"failed_requests": 0,
"avg_response_time_ms": 52.78,
"min_response_time_ms": 40.12,
"max_response_time_ms": 98.45,
"p50_response_time_ms": 50.34,
"p95_response_time_ms": 89.12,
"p99_response_time_ms": 96.78,
"success_rate": 100.0,
"meets_sla": true,
"errors": []
}
},
"recommendations": [
"✅ 所有API性能良好响应时间均在200ms以内"
]
}