You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fin_data_unify_plat/BUG_FIX_TASKS_ARCH_REVIEW.md

5.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

金融数据中台 v2.1 - Bug 修复任务单

优先级: 🔴 P0 - 紧急
创建时间: 2026-04-06 02:05
要求完成: 2026-04-06 18:00 (16 小时内)
执行人: Agent Developer


🐛 Bug 列表(来自架构审查)

Bug #001: API 限流保护缺失 🔴

严重级别: Major
位置: backend/app/api/v2/*.py
问题: 所有 API 接口未实现限流保护
影响: 安全风险,可能被 DDoS 攻击

修复方案:

# 1. 安装 slowapi
pip install slowapi

# 2. 在 main.py 中添加
from slowapi import Limiter
from slowapi.util import get_remote_address

limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)

# 3. 在 API 路由中添加装饰器
@router.get("/alert/rules")
@limiter.limit("100/minute")
async def get_alert_rules(request: Request):
    ...

涉及文件:

  • backend/app/main.py
  • backend/app/api/v2/alert.py
  • backend/app/api/v2/quality.py
  • backend/app/api/v2/websocket.py

预计时间: 2 小时


Bug #002: WebSocket 连接数未限制 🔴

严重级别: Major
位置: backend/app/websocket/connection_manager.py
问题: 未设置最大连接数限制
影响: 性能风险,大量连接时服务器可能崩溃

修复方案:

class ConnectionManager:
    MAX_CONNECTIONS = 1000  # 类常量
    
    async def connect(self, websocket: WebSocket, token: str, user_id: str):
        # 添加连接数检查
        if len(self.active_connections) >= self.MAX_CONNECTIONS:
            await websocket.close(code=1013, reason="Too many connections")
            logger.warning(f"Connection rejected: max connections ({self.MAX_CONNECTIONS}) reached")
            return
        
        await websocket.accept()
        self.active_connections[user_id] = websocket

涉及文件:

  • backend/app/websocket/connection_manager.py

预计时间: 1 小时


Bug #003: 数据库连接池配置缺失 🟡

严重级别: Minor
位置: backend/app/db/database.py
问题: 未显式配置数据库连接池大小
影响: 高并发时可能连接不足

修复方案:

# 在 create_engine 中添加参数
engine = create_engine(
    DATABASE_URL,
    pool_size=20,          # 连接池大小
    max_overflow=10,       # 最大溢出连接数
    pool_pre_ping=True,    # 连接前检查
    pool_recycle=3600      # 连接回收时间
)

涉及文件:

  • backend/app/db/database.py

预计时间: 1 小时


Bug #004: 日志记录不完整 🟡

严重级别: Minor
位置: 多个文件
问题: 关键操作缺少日志记录

修复方案:

# 在关键操作中添加日志
logger.info(f"Alert rule created: {rule_id}, user: {user_id}")
logger.info(f"Alert triggered: {rule_id}, symbol: {symbol}, price: {price}")
logger.info(f"Notification sent: {notification_id}, channel: {channel}")

涉及文件:

  • backend/app/api/v2/alert.py
  • backend/app/services/alert_engine.py
  • backend/app/services/alert_notification.py

预计时间: 3 小时


Bug #005: 前端错误提示不友好 🟡

严重级别: Minor
位置: frontend/src/views/alert/*.vue
问题: API 调用失败时错误提示不够详细

修复方案:

// 优化错误处理
try {
  await api.createAlert(ruleData)
  ElMessage.success('创建成功')
} catch (error) {
  // 显示详细错误信息
  const errorMsg = error.response?.data?.detail || error.message || '操作失败'
  ElMessage.error(`创建失败:${errorMsg}`)
}

涉及文件:

  • frontend/src/views/alert/AlertCreate.vue
  • frontend/src/views/alert/AlertEdit.vue

预计时间: 2 小时


📋 修复步骤

步骤 1: API 限流2 小时)

# 1. 安装依赖
pip install slowapi

# 2. 修改 main.py
# 3. 修改各 API 文件
# 4. 测试限流功能

步骤 2: WebSocket 连接数限制1 小时)

# 1. 修改 connection_manager.py
# 2. 添加 MAX_CONNECTIONS 常量
# 3. 添加连接数检查逻辑
# 4. 测试连接限制

步骤 3: 数据库连接池1 小时)

# 1. 修改 database.py
# 2. 添加连接池参数
# 3. 测试连接池配置

步骤 4: 日志完善3 小时)

# 1. 在各模块添加日志
# 2. 统一日志格式
# 3. 测试日志输出

步骤 5: 前端错误提示2 小时)

# 1. 修改前端错误处理
# 2. 优化错误提示
# 3. 测试错误场景

完成标准

  1. 所有 Major 问题修复
  2. 所有 Minor 问题修复
  3. 代码审查通过
  4. 回归测试通过

📢 完成后通知

修复完成后,请通知:

  1. Agent Coordinator - 更新项目状态
  2. Agent Architect - 复审
  3. Agent Tester - 回归测试

任务创建人: Agent Coordinator
创建时间: 2026-04-06 02:05
任务状态: 待执行
优先级: 🔴 P0 - 紧急
截止时间: 2026-04-06 18:00