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.
8.2 KiB
8.2 KiB
系统完善报告
概述
本次系统完善共完成了6个主要功能的开发和改进。
已完成的功能
1. 股票复权计算功能 ✅
文件修改:
app/repositories/models.py- 添加StockAdjustFactor复权系数表app/repositories/stock_repository.py- 添加复权系数查询和保存方法app/services/stock_service.py- 实现复权计算逻辑
功能说明:
- 支持前复权(qfq)和后复权(hfq)计算
- 复权系数自动从数据源获取并缓存到数据库
- 支持价格、成交量的复权调整
- 保留原始复权系数在K线数据中
技术实现:
- 前复权:以最新价格为基准,历史价格按比例缩小
- 后复权:以历史最早价格为基准,后续价格按比例放大
2. Prometheus指标暴露端点 ✅
新增文件:
app/core/metrics.py- 指标收集模块
文件修改:
app/main.py- 添加指标中间件和端点requirements.txt- 添加 prometheus-client 依赖
功能说明:
- HTTP请求计数和持续时间监控
- 活跃请求数跟踪
- 数据库操作性能监控
- 数据源健康状态监控
- WebSocket连接数监控
- 缓存命中率监控
暴露端点:
GET /metrics - Prometheus格式的指标数据
指标列表:
| 指标名 | 类型 | 说明 |
|---|---|---|
| http_requests_total | Counter | HTTP请求总数 |
| http_request_duration_seconds | Histogram | HTTP请求持续时间 |
| http_requests_active | Gauge | 活跃请求数 |
| api_calls_total | Counter | API调用总数 |
| db_operation_duration_seconds | Histogram | 数据库操作持续时间 |
| data_source_status | Gauge | 数据源健康状态 |
| websocket_connections | Gauge | WebSocket连接数 |
| websocket_messages_total | Counter | WebSocket消息总数 |
3. 应用层限流功能 ✅
新增文件:
app/core/rate_limiter.py- 限流模块
文件修改:
app/main.py- 添加限流中间件
功能说明:
- 支持三种限流算法:固定窗口、滑动窗口、令牌桶
- 基于客户端IP + 路径的限流key
- 可配置的请求速率和突发容量
- 自动清理过期数据
默认配置:
RateLimitConfig(
requests_per_minute=120, # 每分钟120请求
burst_size=20, # 突发20请求
strategy="sliding_window" # 滑动窗口算法
)
响应头:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 119
X-RateLimit-Reset: 1700000000
Retry-After: 60 # 限流时返回
4. 监控告警通道 ✅
新增文件:
app/monitor/alert_channels.py- 告警通道模块
文件修改:
app/monitor/__init__.py- 导出告警类app/monitor/monitor.py- 集成新的告警管理器
支持的告警通道:
| 通道 | 类型 | 说明 |
|---|---|---|
| LogAlertChannel | 日志 | 默认日志输出 |
| DingTalkAlertChannel | 钉钉 | 钉钉机器人webhook |
| EmailAlertChannel | 邮件 | SMTP邮件发送 |
| WebhookAlertChannel | Webhook | 自定义HTTP回调 |
功能特性:
- 支持消息路由(按告警级别)
- 支持批量发送
- Markdown格式的钉钉消息
- HTML格式的邮件内容
- 可扩展的架构
使用示例:
from app.monitor import get_alert_manager
# 发送告警
await get_alert_manager().send_simple(
title="数据缺失告警",
content="股票000001.SZ数据缺失",
level="warning"
)
5. 修复已知问题 ✅
修复内容:
- 添加缺失的
Response导入到rate_limiter.py - 修复
app/monitor/__init__.py中已删除类的引用 - 更新
requirements.txt添加prometheus-client - 安装缺失的依赖包
6. 服务重启功能 ✅
文件修改:
app/api/admin_routes.py- 实现重启逻辑
功能说明:
- 延迟2秒后重启,确保当前响应返回
- 支持Windows和Linux/Mac系统
- 在后台线程中执行,不阻塞API响应
使用方式:
POST /v1/admin/system/restart
注意: 生产环境建议使用Docker或systemd管理服务生命周期
配置文件更新建议
添加告警配置到 config.json:
{
"alert": {
"log": {
"enabled": true
},
"dingtalk": {
"enabled": false,
"webhook_url": "https://oapi.dingtalk.com/robot/send?access_token=xxx",
"secret": "your-secret",
"at_mobiles": ["13800138000"],
"at_all": false
},
"email": {
"enabled": false,
"smtp_host": "smtp.example.com",
"smtp_port": 587,
"username": "alert@example.com",
"password": "your-password",
"from_addr": "alert@example.com",
"to_addrs": ["admin@example.com"],
"use_tls": true
},
"routing": {
"info": ["log"],
"warning": ["log", "dingtalk"],
"error": ["log", "dingtalk", "email"],
"critical": ["log", "dingtalk", "email"]
}
}
}
API端点更新
新增端点:
| 端点 | 方法 | 说明 |
|---|---|---|
/metrics |
GET | Prometheus指标数据 |
/admin/system/restart |
POST | 重启服务 |
限流保护端点:
所有 /v1/* 端点(除 /health, /metrics, /docs 等外)都受到限流保护。
系统架构图
┌─────────────────────────────────────────────────────────┐
│ FastAPI Application │
├─────────────────────────────────────────────────────────┤
│ CORS Middleware │
│ Metrics Middleware (Prometheus) │
│ Rate Limit Middleware (120 req/min) │
├─────────────────────────────────────────────────────────┤
│ Routes: │
│ /v1/stock/* - 股票接口 │
│ /v1/futures/* - 期货接口 │
│ /v1/admin/* - 管理接口 │
│ /v1/stream - WebSocket │
│ /metrics - 指标端点 │
│ /admin - 管理后台UI │
├─────────────────────────────────────────────────────────┤
│ Services: │
│ StockService - 复权计算 ✅ │
│ FuturesService - 期货业务 │
│ AdminService - 管理功能 │
│ AdapterService - 数据源适配 │
│ AlertManager - 告警管理 ✅ │
├─────────────────────────────────────────────────────────┤
│ Repositories: │
│ StockRepository - 复权系数表 ✅ │
│ FuturesRepository - 期货数据 │
├─────────────────────────────────────────────────────────┤
│ Data Sources: │
│ AmazingDataAdapter - 星耀数智 │
└─────────────────────────────────────────────────────────┘
后续建议
-
Prometheus集成
- 部署Prometheus服务器抓取
/metrics端点 - 配置Grafana仪表板展示指标
- 部署Prometheus服务器抓取
-
告警规则配置
- 配置告警路由规则
- 设置钉钉/邮件通道参数
-
性能优化
- 添加Redis缓存层
- 实现数据库连接池监控
-
安全性增强
- 实现API Key验证逻辑
- 添加请求签名验证
完成时间
2026-03-14