mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-09-13 16:34:57 +00:00
- 新增 ruoyi-common-trace 模块:TraceContext 上下文、TraceNodeAspect 注解切面、数据库双表持久化 - ChatServiceFacade / KnowledgeRetrievalServiceImpl 完成 RAG 对话 retrieval → rerank → llm-call 全链路采集 - 新增 TraceController 提供列表/详情/节点查询 API 及数据统计 - 支持 trace.enabled 开关、payload 长度截断、错误安全降级 - TraceNodeTemplate 模板封装标准节点生命周期,减少重复样板代码
129 lines
6.7 KiB
SQL
129 lines
6.7 KiB
SQL
-- 链路追踪运行记录表
|
||
CREATE TABLE IF NOT EXISTS `trace_run` (
|
||
`id` bigint NOT NULL COMMENT '主键',
|
||
`trace_id` varchar(64) NOT NULL COMMENT '链路ID',
|
||
`trace_name` varchar(128) NOT NULL COMMENT '链路名称',
|
||
`business_type` varchar(64) NOT NULL COMMENT '业务类型',
|
||
`business_id` varchar(128) DEFAULT NULL COMMENT '业务ID',
|
||
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
|
||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||
`status` varchar(32) NOT NULL COMMENT '状态',
|
||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
|
||
`duration_ms` bigint DEFAULT NULL COMMENT '耗时毫秒',
|
||
`error_message` varchar(1000) DEFAULT NULL COMMENT '错误摘要',
|
||
`metadata` text DEFAULT NULL COMMENT '元数据JSON',
|
||
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
||
`create_by` bigint DEFAULT NULL COMMENT '创建者',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` bigint DEFAULT NULL COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
|
||
PRIMARY KEY (`id`) USING BTREE,
|
||
UNIQUE KEY `uk_trace_run_trace_id` (`trace_id`) USING BTREE,
|
||
KEY `idx_trace_run_business` (`business_type`, `business_id`) USING BTREE,
|
||
KEY `idx_trace_run_status_time` (`status`, `start_time`) USING BTREE,
|
||
KEY `idx_trace_run_tenant_time` (`tenant_id`, `start_time`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='链路追踪运行记录表' ROW_FORMAT=DYNAMIC;
|
||
|
||
-- 链路追踪节点记录表
|
||
CREATE TABLE IF NOT EXISTS `trace_node` (
|
||
`id` bigint NOT NULL COMMENT '主键',
|
||
`trace_id` varchar(64) NOT NULL COMMENT '链路ID',
|
||
`node_id` varchar(64) NOT NULL COMMENT '节点ID',
|
||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||
`parent_node_id` varchar(64) DEFAULT NULL COMMENT '父节点ID',
|
||
`node_name` varchar(128) NOT NULL COMMENT '节点名称',
|
||
`node_type` varchar(64) NOT NULL COMMENT '节点类型',
|
||
`depth` int DEFAULT 0 COMMENT '节点深度',
|
||
`sort_order` int DEFAULT 0 COMMENT '排序',
|
||
`class_name` varchar(255) DEFAULT NULL COMMENT '类名',
|
||
`method_name` varchar(128) DEFAULT NULL COMMENT '方法名',
|
||
`status` varchar(32) NOT NULL COMMENT '状态',
|
||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
|
||
`duration_ms` bigint DEFAULT NULL COMMENT '耗时毫秒',
|
||
`error_message` varchar(1000) DEFAULT NULL COMMENT '错误摘要',
|
||
`input_payload` text DEFAULT NULL COMMENT '输入JSON',
|
||
`output_payload` text DEFAULT NULL COMMENT '输出JSON',
|
||
`metadata` text DEFAULT NULL COMMENT '元数据JSON',
|
||
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
||
`create_by` bigint DEFAULT NULL COMMENT '创建者',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` bigint DEFAULT NULL COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
|
||
PRIMARY KEY (`id`) USING BTREE,
|
||
KEY `idx_trace_node_trace_id` (`trace_id`) USING BTREE,
|
||
KEY `idx_trace_node_parent` (`trace_id`, `parent_node_id`) USING BTREE,
|
||
KEY `idx_trace_node_time` (`trace_id`, `start_time`) USING BTREE,
|
||
KEY `idx_trace_node_tenant_time` (`tenant_id`, `start_time`) USING BTREE,
|
||
KEY `idx_trace_node_type_status` (`node_type`, `status`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='链路追踪节点记录表' ROW_FORMAT=DYNAMIC;
|
||
|
||
-- 兼容已存在的旧 trace 表:CREATE TABLE IF NOT EXISTS 不会给旧表补新字段
|
||
SET @trace_run_add_tenant_sql = (
|
||
SELECT IF(COUNT(*) = 0,
|
||
'ALTER TABLE `trace_run` ADD COLUMN `tenant_id` varchar(20) DEFAULT ''000000'' COMMENT ''租户编号'' AFTER `user_id`',
|
||
'SELECT 1'
|
||
)
|
||
FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'trace_run'
|
||
AND COLUMN_NAME = 'tenant_id'
|
||
);
|
||
PREPARE trace_run_add_tenant_stmt FROM @trace_run_add_tenant_sql;
|
||
EXECUTE trace_run_add_tenant_stmt;
|
||
DEALLOCATE PREPARE trace_run_add_tenant_stmt;
|
||
|
||
SET @trace_run_add_tenant_idx_sql = (
|
||
SELECT IF(COUNT(*) = 0,
|
||
'ALTER TABLE `trace_run` ADD INDEX `idx_trace_run_tenant_time` (`tenant_id`, `start_time`) USING BTREE',
|
||
'SELECT 1'
|
||
)
|
||
FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'trace_run'
|
||
AND INDEX_NAME = 'idx_trace_run_tenant_time'
|
||
);
|
||
PREPARE trace_run_add_tenant_idx_stmt FROM @trace_run_add_tenant_idx_sql;
|
||
EXECUTE trace_run_add_tenant_idx_stmt;
|
||
DEALLOCATE PREPARE trace_run_add_tenant_idx_stmt;
|
||
|
||
SET @trace_node_add_tenant_sql = (
|
||
SELECT IF(COUNT(*) = 0,
|
||
'ALTER TABLE `trace_node` ADD COLUMN `tenant_id` varchar(20) DEFAULT ''000000'' COMMENT ''租户编号'' AFTER `node_id`',
|
||
'SELECT 1'
|
||
)
|
||
FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'trace_node'
|
||
AND COLUMN_NAME = 'tenant_id'
|
||
);
|
||
PREPARE trace_node_add_tenant_stmt FROM @trace_node_add_tenant_sql;
|
||
EXECUTE trace_node_add_tenant_stmt;
|
||
DEALLOCATE PREPARE trace_node_add_tenant_stmt;
|
||
|
||
SET @trace_node_add_tenant_idx_sql = (
|
||
SELECT IF(COUNT(*) = 0,
|
||
'ALTER TABLE `trace_node` ADD INDEX `idx_trace_node_tenant_time` (`tenant_id`, `start_time`) USING BTREE',
|
||
'SELECT 1'
|
||
)
|
||
FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'trace_node'
|
||
AND INDEX_NAME = 'idx_trace_node_tenant_time'
|
||
);
|
||
PREPARE trace_node_add_tenant_idx_stmt FROM @trace_node_add_tenant_idx_sql;
|
||
EXECUTE trace_node_add_tenant_idx_stmt;
|
||
DEALLOCATE PREPARE trace_node_add_tenant_idx_stmt;
|
||
|
||
-- 链路追踪监控菜单 & 按钮权限
|
||
INSERT INTO `sys_menu`
|
||
(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||
SELECT (SELECT COALESCE(MAX(`menu_id`), 0) + 1 FROM (SELECT `menu_id` FROM `sys_menu`) t), '链路追踪', 2, 7, 'trace', 'monitor/trace/index', '', 1, 0, 'C', '0', '0', 'monitor:trace:list', 'tabler:route', 103, 1, NOW(), '链路追踪监控菜单';
|
||
|
||
INSERT INTO `sys_menu`
|
||
(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||
SELECT (SELECT COALESCE(MAX(`menu_id`), 0) + 1 FROM (SELECT `menu_id` FROM `sys_menu`) t), '链路追踪查询', (SELECT `menu_id` FROM `sys_menu` WHERE `perms` = 'monitor:trace:list' AND `menu_type` = 'C' LIMIT 1), 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:trace:query', '#', 103, 1, NOW(), '';
|