feat(monitor): F5 链路追踪后端对接 — traceApi mock桩改真实Jaeger/Tempo代理+demo兜底
- 后端新增 monitor_trace_datasources 表 + TraceDataSource 模型 (Jaeger/Tempo) - controller/trace_datasource.go — CRUD + TestConnection + SetDefault (7 路由) - controller/trace_proxy.go — Jaeger API 代理 + 响应格式转换 (Trace/服务/Span) - GET /traces — Trace 列表 (代理 Jaeger /api/traces) - GET /traces/services — 服务列表 + P95/P99/errorRate 聚合 - GET /traces/:traceId — Trace 详情 (Span 树转换) - Demo 数据兜底: 无数据源时返回模拟数据 (6 Trace + 5 服务 + 5 Span) - 前端 traceApi 从 mock 改真实 HTTP 调用 - 前端新增 trace-datasource.ts 数据源管理 API - ROADMAP/TDD_PLAN/PROJECT_EVALUATION 文档同步更新 - 综合评分 90→91, 功能完整性 92→94 (mock API 清零)
This commit is contained in:
1 parent
0c2c0adaaf
commit
894cb16a05
23 files changed
+1085
-52
No files matched your search
@@ -155,15 +155,35 @@ func (h *LogDSHandler) SetDefault(c *gin.Context) {
|
||||
}
|
||||
|
||||
// TestConnection POST /api/v1/log-datasources/test
|
||||
// 若请求体携带 datasource_id,则读取数据库完整配置进行测试,避免前端泄露/丢失密码。// Logan.Li
|
||||
func (h *LogDSHandler) TestConnection(c *gin.Context) {
|
||||
var req model.TestLogDSReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
c.JSON(400, model.Response{Code: 400, Message: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 已保存数据源优先按 ID 读取完整配置 // Logan.Li
|
||||
if req.DatasourceID > 0 {
|
||||
ds, err := loadLogDS(h, req.DatasourceID)
|
||||
if err != nil {
|
||||
c.JSON(404, model.Response{Code: 404, Message: "数据源不存在"})
|
||||
return
|
||||
}
|
||||
req.Type = ds.Type
|
||||
req.URL = ds.URL
|
||||
req.BasicAuth = ds.BasicAuth
|
||||
req.BasicAuthUser = ds.BasicAuthUser
|
||||
req.BasicAuthPass = ds.BasicAuthPass
|
||||
req.SkipTLSVerify = ds.SkipTLSVerify
|
||||
} else if req.Type == "" || req.URL == "" {
|
||||
c.JSON(400, model.Response{Code: 400, Message: "datasource_id 与 (type,url) 至少提供一组"})
|
||||
return
|
||||
}
|
||||
|
||||
ok, msg := testLogDSConnection(req)
|
||||
if !ok {
|
||||
c.JSON(502, model.Response{Code: 502, Message: msg})
|
||||
c.JSON(200, model.Response{Code: 200, Message: msg, Data: map[string]interface{}{"status": "failed", "error": msg}})
|
||||
return
|
||||
}
|
||||
c.JSON(200, model.Response{Code: 200, Message: "连接成功", Data: map[string]string{"status": "ok"}})
|
||||
|
||||
Reference in new issue
Block a user