修复盯盘bug
This commit is contained in:
+276
@@ -0,0 +1,276 @@
|
||||
# 通知问题排查指南
|
||||
|
||||
## 问题现象
|
||||
监测股票到价格了,但没有收到消息(包括网页和邮件)
|
||||
|
||||
## 快速诊断
|
||||
|
||||
### 步骤1:运行诊断工具
|
||||
```bash
|
||||
python test_notification_debug.py
|
||||
```
|
||||
|
||||
这个工具会检查:
|
||||
- ✅ 数据库中的通知记录
|
||||
- ✅ 邮件配置状态
|
||||
- ✅ 邮件发送测试
|
||||
- ✅ 股票价格和触发条件
|
||||
- ✅ 待发送通知
|
||||
|
||||
### 步骤2:检查常见问题
|
||||
|
||||
#### 问题1:价格已不在触发区间
|
||||
**症状**:股票价格曾经到达过,但现在已经超出区间
|
||||
|
||||
**示例**:
|
||||
- 进场区间:44.87 - 46.48
|
||||
- 当前价格:47.99(已超出)
|
||||
- 结果:不会触发新通知
|
||||
|
||||
**解决**:
|
||||
- 查看"通知历史"确认是否之前已触发过
|
||||
- 如需重新监测,调整进场区间
|
||||
|
||||
#### 问题2:60分钟防重复机制
|
||||
**症状**:价格在区间内,但不发送通知
|
||||
|
||||
**原因**:同一触发条件60分钟内只发送一次,避免重复
|
||||
|
||||
**查看方法**:
|
||||
```bash
|
||||
python test_notification_debug.py
|
||||
```
|
||||
会显示:"⚠️ 最近60分钟内已发送过XX通知"
|
||||
|
||||
**解决**:
|
||||
- 等待60分钟后会自动重新发送
|
||||
- 或者清空数据库通知记录(会导致历史丢失)
|
||||
|
||||
#### 问题3:网页通知显示问题
|
||||
**症状**:有通知但网页看不到
|
||||
|
||||
**原因**:
|
||||
1. 之前的显示逻辑只显示"未发送"的通知
|
||||
2. 通知发送后被标记为"已发送"就不显示了
|
||||
|
||||
**已修复**:
|
||||
- 现在显示所有最近通知(包括已发送和未发送)
|
||||
- 显示发送状态:"✅ 已发送" 或 "⏳ 待发送"
|
||||
|
||||
#### 问题4:邮件配置问题
|
||||
**检查清单**:
|
||||
```env
|
||||
# .env 文件
|
||||
EMAIL_ENABLED=true # 必须是 true
|
||||
SMTP_SERVER=smtp.qq.com # QQ邮箱或其他
|
||||
SMTP_PORT=587 # 587(TLS) 或 465(SSL)
|
||||
EMAIL_FROM=your_email@qq.com # 发件邮箱
|
||||
EMAIL_PASSWORD=xxxxxx # 授权码(不是登录密码!)
|
||||
EMAIL_TO=receiver@example.com # 收件邮箱
|
||||
```
|
||||
|
||||
**测试方法**:
|
||||
1. 在网页界面:监测管理 → 通知管理 → 发送测试邮件
|
||||
2. 或运行:`python test_notification_debug.py`
|
||||
|
||||
**常见错误**:
|
||||
- ❌ 使用邮箱登录密码而非授权码
|
||||
- ❌ EMAIL_ENABLED 设置为 false
|
||||
- ❌ 端口号不正确(QQ邮箱用587或465)
|
||||
|
||||
## 完整排查流程
|
||||
|
||||
### 1. 确认监测服务运行
|
||||
```
|
||||
网页界面 → 监测管理
|
||||
查看状态:🟢 运行中
|
||||
```
|
||||
|
||||
如果显示"🔴 已停止",点击"▶️ 启动监测"
|
||||
|
||||
### 2. 查看通知历史
|
||||
```
|
||||
网页界面 → 监测管理 → 通知历史
|
||||
```
|
||||
|
||||
应该能看到:
|
||||
- 所有触发的通知(新版本已修复)
|
||||
- 每条通知的发送状态
|
||||
- 触发时间
|
||||
|
||||
### 3. 检查股票状态
|
||||
运行诊断工具查看详细信息:
|
||||
```bash
|
||||
python test_notification_debug.py
|
||||
```
|
||||
|
||||
关注输出中的:
|
||||
```
|
||||
📊 股票代码 - 股票名称
|
||||
当前价格: XX.XX
|
||||
进场区间: XX.XX - XX.XX
|
||||
🟢 当前价格在进场区间内
|
||||
⚠️ 但最近60分钟内已发送过进场通知
|
||||
```
|
||||
|
||||
### 4. 查看终端日志
|
||||
监测服务运行时会输出详细日志:
|
||||
|
||||
**正常流程**:
|
||||
```
|
||||
正在更新股票 300832 的价格...
|
||||
✅ 300832 当前价格: ¥66.5
|
||||
|
||||
==================================================
|
||||
开始发送通知,共 1 条
|
||||
==================================================
|
||||
|
||||
处理通知: 300832 - entry
|
||||
📧 正在发送邮件...
|
||||
- 收件人: xxx@qq.com
|
||||
- 主题: 股票监测提醒 - 300832
|
||||
- 使用 SMTP+TLS 连接 smtp.qq.com:587
|
||||
- 正在登录...
|
||||
- 正在发送...
|
||||
✅ 邮件发送成功: 300832
|
||||
✅ 通知已成功发送并标记
|
||||
```
|
||||
|
||||
**配置问题**:
|
||||
```
|
||||
⚠️ 邮件配置不完整,使用界面通知
|
||||
- SMTP服务器: 未配置
|
||||
- 发件人: 未配置
|
||||
- 收件人: 未配置
|
||||
- 密码: 未配置
|
||||
```
|
||||
|
||||
**发送失败**:
|
||||
```
|
||||
邮件发送失败: [Errno 11001] getaddrinfo failed
|
||||
使用界面通知作为备用方案
|
||||
```
|
||||
|
||||
### 5. 手动测试通知
|
||||
如果想立即测试通知(不等待价格触发):
|
||||
|
||||
```python
|
||||
# 创建测试脚本 test_manual_notification.py
|
||||
from monitor_db import monitor_db
|
||||
from notification_service import notification_service
|
||||
|
||||
# 添加一条测试通知
|
||||
monitor_db.add_notification(
|
||||
stock_id=1, # 你的股票ID
|
||||
notification_type='entry',
|
||||
message='这是一条测试通知'
|
||||
)
|
||||
|
||||
# 立即发送
|
||||
notification_service.send_notifications()
|
||||
```
|
||||
|
||||
## 修复后的改进
|
||||
|
||||
### 1. 网页通知显示增强 ✅
|
||||
- 显示所有最近通知(不只是待发送的)
|
||||
- 显示发送状态标识
|
||||
- 显示待发送通知数量警告
|
||||
|
||||
### 2. 日志输出增强 ✅
|
||||
- 详细的邮件发送过程日志
|
||||
- 配置检查提示
|
||||
- 错误堆栈跟踪
|
||||
|
||||
### 3. 防重复机制 ✅
|
||||
- 60分钟内同类型通知只发送一次
|
||||
- 避免价格波动导致的重复通知
|
||||
|
||||
### 4. 监测频率优化 ✅
|
||||
- 5分钟循环检查
|
||||
- 按设定间隔更新每只股票
|
||||
- 股票间3秒延迟,避免API限流
|
||||
|
||||
## 预期效果
|
||||
|
||||
当股票价格满足条件时:
|
||||
|
||||
1. **数据库记录** ✅
|
||||
```
|
||||
notifications 表中新增记录
|
||||
sent = FALSE
|
||||
```
|
||||
|
||||
2. **发送通知** ✅
|
||||
```
|
||||
调用 notification_service.send_notifications()
|
||||
尝试发送邮件
|
||||
标记 sent = TRUE
|
||||
```
|
||||
|
||||
3. **邮件到达** ✅
|
||||
```
|
||||
收件箱收到邮件
|
||||
主题:股票监测提醒 - XXX
|
||||
```
|
||||
|
||||
4. **网页显示** ✅
|
||||
```
|
||||
监测管理 → 通知历史
|
||||
显示:[✅ 已发送] 股票 XXX ...
|
||||
```
|
||||
|
||||
## 常见场景答疑
|
||||
|
||||
### Q1: 价格到了但没收到通知
|
||||
**检查**:
|
||||
1. 是否60分钟内已发送过?→ 查看通知历史
|
||||
2. 邮件配置是否正确?→ 发送测试邮件
|
||||
3. 监测服务是否运行?→ 查看状态
|
||||
4. 通知是否被禁用?→ 检查股票的"通知启用"开关
|
||||
|
||||
### Q2: 测试邮件能收到,但监测邮件收不到
|
||||
**可能原因**:
|
||||
1. 触发条件未满足(价格不在区间)
|
||||
2. 60分钟防重复
|
||||
3. 监测服务未启动
|
||||
4. 代码更新前的旧版本问题
|
||||
|
||||
**解决**:
|
||||
1. 运行 `test_notification_debug.py` 全面检查
|
||||
2. 查看终端日志确认是否真的触发
|
||||
3. 确保使用的是修复后的代码
|
||||
|
||||
### Q3: 网页看不到通知
|
||||
**已修复**:旧版本只显示待发送通知,新版本显示所有通知
|
||||
|
||||
**刷新界面**:点击"🔄 刷新状态"
|
||||
|
||||
### Q4: 想立即重新发送通知
|
||||
**方法**:
|
||||
1. 清空通知记录(会丢失历史)
|
||||
2. 或等待60分钟
|
||||
3. 或调整价格区间让其重新触发
|
||||
|
||||
## 技术支持
|
||||
|
||||
如果问题仍未解决:
|
||||
|
||||
1. **提供诊断报告**:
|
||||
```bash
|
||||
python test_notification_debug.py > diagnosis.txt
|
||||
```
|
||||
|
||||
2. **提供终端日志**:
|
||||
复制运行 Streamlit 的终端输出
|
||||
|
||||
3. **检查文件**:
|
||||
- `.env` 配置(隐藏密码)
|
||||
- `stock_monitor.db` 是否存在
|
||||
- 监测股票列表截图
|
||||
|
||||
4. **描述问题**:
|
||||
- 什么时候开始的?
|
||||
- 做了什么操作?
|
||||
- 预期行为 vs 实际行为
|
||||
|
||||
Reference in New Issue
Block a user