feat: 累积功能变更 — 聊天集成、租户管理、小程序更新、ETL 增强、迁移脚本
包含多个会话的累积代码变更: - backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔 - admin-web: ETL 状态页、任务管理、调度配置、登录优化 - miniprogram: 看板页面、聊天集成、UI 组件、导航更新 - etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强 - tenant-admin: 项目初始化 - db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8) - packages/shared: 枚举和工具函数更新 - tools: 数据库工具、报表生成、健康检查 - docs: PRD/架构/部署/合约文档更新 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# 后端架构文档 — FastAPI 服务层
|
||||
|
||||
> 更新日期:2026-03-19(RNS1.3 三看板接口 + CONFIG-1 技能类型)
|
||||
> 更新日期:2026-03-23(DevTrace 全链路日志模块)
|
||||
> 位置:`apps/backend/`
|
||||
> 框架:FastAPI + psycopg2(同步连接池)
|
||||
> 数据库:`zqyy_app`(业务库)+ `etl_feiqiu`(ETL 库,直连只读访问)
|
||||
@@ -101,6 +101,7 @@ graph TB
|
||||
| `xcx_ai_chat.py` | `/api/xcx/ai` | AI 对话(SSE 流式) |
|
||||
| `xcx_ai_cache.py` | `/api/xcx/ai-cache` | AI 缓存查询 |
|
||||
| `admin_applications.py` | `/api/admin/applications` | 入驻审核 |
|
||||
| `admin_dev_trace.py` | `/api/admin/dev-trace` | 开发调试全链路日志(日期/请求/详情/清理/设置/覆盖率,8 端点) |
|
||||
| `auth.py` | `/api/auth` | 管理后台登录 |
|
||||
| `member_retention_clue.py` | `/api/member-retention-clue` | 维客线索 |
|
||||
| `ops_panel.py` | `/api/ops` | 运维面板 |
|
||||
@@ -226,7 +227,46 @@ RLS 视图直接暴露 DWD/DWS 原始列名,后端代码在 SQL 中使用 AS
|
||||
→ { code: 0, data: ..., message: "ok" }
|
||||
```
|
||||
|
||||
## 6. 关键设计决策
|
||||
## 7. Trace 全链路日志模块(`app/trace/`)
|
||||
|
||||
开发调试专用的全链路请求追踪模块,覆盖 HTTP 请求、SSE 流式响应、WebSocket 连接、后台 Job、异常/错误、数据库连接生命周期和中间件层。日志以 JSON Lines 格式写入本地文件系统,仅用于开发调试。
|
||||
|
||||
### 模块结构
|
||||
|
||||
| 文件 | 职责 |
|
||||
|------|------|
|
||||
| `config.py` | `TraceConfig` 配置类,从环境变量读取(`DEV_TRACE_*`),支持运行时动态修改(API 更新后即时生效,重启回退 .env 值) |
|
||||
| `context.py` | `TraceContext` + `TraceSpan` 数据模型,基于 `contextvars.ContextVar` 实现请求级隔离,23 种 span_type |
|
||||
| `writer.py` | JSON Lines 日志写入器,按日期分目录(`YYYY-MM-DD/`)、按小时分文件(`trace_YYYY-MM-DD_HH.jsonl`),单文件 10MB 自动轮转,维护 `_index.json` 索引 |
|
||||
| `cleanup.py` | 日志自动清理,按 `DEV_TRACE_LOG_RETENTION_DAYS` 保留天数删除过期目录,每日凌晨自动执行 |
|
||||
| `middleware.py` | `TraceMiddleware` ASGI 中间件,拦截 `xcx_*` 路由前缀请求,创建 TraceContext,记录 HTTP_IN/HTTP_OUT/MIDDLEWARE span,写入响应头(X-Request-ID 等) |
|
||||
| `decorators.py` | `@trace_service` 装饰器,Service 层函数追踪(模块名、函数名、参数、返回值摘要、耗时) |
|
||||
| `db_wrapper.py` | 数据库连接生命周期追踪,包装 cursor.execute()(DB_QUERY)、get_connection()(DB_CONN)、连接关闭(DB_CONN_RELEASE)、异常(DB_ERROR) |
|
||||
| `error_handler.py` | 异常/错误全链路追踪,集成全局异常处理器,记录 ERROR span(HTTPException + 未捕获异常 + 堆栈摘要) |
|
||||
| `sse_wrapper.py` | SSE 流式响应追踪(SSE_START/SSE_EVENT/SSE_END/AI_CALL/AI_ERROR),每 10 token 记录一次避免 span 爆炸 |
|
||||
| `ws_wrapper.py` | WebSocket 连接追踪(WS_CONNECT/WS_MESSAGE/WS_DISCONNECT),trace_type 为 "ws" |
|
||||
| `job_wrapper.py` | 后台 Job 执行追踪(JOB_START/JOB_END/JOB_ERROR),包装 lifespan 中注册的 4 个 job handler |
|
||||
| `coverage.py` | 覆盖率扫描器,通过 AST 解析检测路由/Service/Job/SSE/WS 五个维度的追踪覆盖情况,启动时自动扫描,支持手动刷新 |
|
||||
|
||||
### 数据流
|
||||
|
||||
```
|
||||
xcx_* 请求 / SSE / WebSocket / 后台 Job
|
||||
→ TraceMiddleware / sse_wrapper / ws_wrapper / job_wrapper
|
||||
→ 创建 TraceContext(contextvars)
|
||||
→ AUTH span(鉴权层)
|
||||
→ @trace_service span(Service 层)
|
||||
→ DB_QUERY / DB_CONN span(数据库层)
|
||||
→ ERROR span(异常处理器)
|
||||
→ TraceWriter 异步写入 .jsonl 文件
|
||||
→ admin_dev_trace API 读取并展示
|
||||
```
|
||||
|
||||
### 管理 API
|
||||
|
||||
`admin_dev_trace.py` 路由(`/api/admin/dev-trace`,8 个端点,admin 角色鉴权)提供日志查询、手动清理、运行时设置修改和覆盖率扫描能力。前端 DevTrace 页面(`apps/admin-web/src/pages/DevTrace.tsx`)提供可视化操作界面。
|
||||
|
||||
## 8. 关键设计决策
|
||||
|
||||
- **ETL 直连**:所有 ETL 查询封装在 `fdw_queries.py`,通过 `_fdw_context()` 直连 ETL 库查询 `app.v_*` RLS 视图(不使用 FDW foreign table,因 postgres_fdw 不传递自定义 GUC)
|
||||
- **优雅降级**:扩展字段(lastVisitDays/balance/aiSuggestion)查询失败返回 null,不影响核心响应
|
||||
|
||||
@@ -289,7 +289,7 @@ RS 默认参数:
|
||||
|
||||
| 参数 | 默认值 | 说明 |
|
||||
|------|--------|------|
|
||||
| `lookback_days` | 60 | 回溯天数 |
|
||||
| `lookback_days` | 90 | 回溯天数 |
|
||||
| `session_merge_hours` | 4 | 会话合并间隔(小时) |
|
||||
| `incentive_weight` | 1.5 | 激励权重 |
|
||||
| `halflife_session` | 14.0 | 会话频次半衰期(天) |
|
||||
|
||||
Reference in New Issue
Block a user