feat: 新增通用链路追踪模块与 RAG 对话全链路埋点

- 新增 ruoyi-common-trace 模块:TraceContext 上下文、TraceNodeAspect 注解切面、数据库双表持久化
- ChatServiceFacade / KnowledgeRetrievalServiceImpl 完成 RAG 对话 retrieval → rerank → llm-call 全链路采集
- 新增 TraceController 提供列表/详情/节点查询 API 及数据统计
- 支持 trace.enabled 开关、payload 长度截断、错误安全降级
- TraceNodeTemplate 模板封装标准节点生命周期,减少重复样板代码
This commit is contained in:
Obltv
2026-06-16 09:24:36 +08:00
parent 7aa67cfc2f
commit e925050207
40 changed files with 2618 additions and 41 deletions

View File

@@ -48,6 +48,11 @@
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<dependency>
<groupId>org.ruoyi</groupId>
<artifactId>ruoyi-common-trace</artifactId>
</dependency>
<!-- excel-->
<dependency>
<groupId>org.ruoyi</groupId>

View File

@@ -0,0 +1,68 @@
package org.ruoyi.system.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.trace.domain.bo.TraceRunBo;
import org.ruoyi.common.trace.domain.vo.TraceDetailVo;
import org.ruoyi.common.trace.domain.vo.TraceNodeVo;
import org.ruoyi.common.trace.domain.vo.TraceRunVo;
import org.ruoyi.common.trace.service.TraceRecordService;
import org.ruoyi.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 链路追踪监控
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/monitor/trace")
public class TraceController extends BaseController {
private final TraceRecordService traceRecordService;
/**
* 获取链路追踪运行列表
*/
@SaCheckPermission("monitor:trace:list")
@GetMapping("/run/list")
public TableDataInfo<TraceRunVo> list(TraceRunBo bo, PageQuery pageQuery) {
return traceRecordService.pageRuns(bo, pageQuery);
}
/**
* 获取链路追踪运行详情
*/
@SaCheckPermission("monitor:trace:query")
@GetMapping("/run/{traceId}")
public R<TraceRunVo> run(@PathVariable String traceId) {
return R.ok(traceRecordService.getRun(traceId));
}
/**
* 获取链路追踪节点列表
*/
@SaCheckPermission("monitor:trace:query")
@GetMapping("/node/list/{traceId}")
public R<List<TraceNodeVo>> nodes(@PathVariable String traceId) {
return R.ok(traceRecordService.listNodes(traceId));
}
/**
* 获取链路追踪完整详情
*/
@SaCheckPermission("monitor:trace:query")
@GetMapping("/detail/{traceId}")
public R<TraceDetailVo> detail(@PathVariable String traceId) {
return R.ok(traceRecordService.getDetail(traceId));
}
}