From d2fe7e771f8864bd2931f8826ecd7186801d75a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=A5=E5=BE=AE?= Date: Thu, 9 Jul 2026 10:50:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20intraday=5Fhealth=5Fcheck=20+=20system?= =?UTF-8?q?=5Faudit=E4=BF=A1=E5=8F=B7=E5=A0=86=E7=A7=AF=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E7=9B=B2=E5=8C=BA=20=E2=80=94=20=E5=A2=9E=E5=8A=A0=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E6=9C=AA=E5=A4=84=E7=90=86=E6=9F=A5=E8=AF=A2(?= =?UTF-8?q?=E9=9D=9E=E4=BB=85xiaoguo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +++++ docs/analyst-knowledge-log.md | 13 ++++++++++++- scripts/intraday_health_check.py | 12 ++++++++++-- scripts/system_audit.py | 9 +++++++-- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80ab882a..b1cc38f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,11 @@ xiaoguo_signal_consumer 仅处理今日信号(`date(created_at)=today`), - 盘中健康检查不会再因过期信号误报堆积 - 信号管道只监控时效内的处理速度 +### [2026-07-09 跟进] 监控盲区修复 +- **发现**: intraday_health_check 和 system_audit 仅监控 source LIKE 'xiaoguo%',完全忽略 divergence_watch(80条)、trend(46条) 等来源信号积压 +- **修复**: 两端都增加全量未处理查询(total_unproc),区分 xiaoguo 和其他来源分别报告 +- **遗留**: divergence_watch/trend 信号无 consumer,属于数据归档而非管道积压,继续积累但健康检查能看见了 + ## 2026-07-03 — 代码重构 ### 删除重复文件 diff --git a/docs/analyst-knowledge-log.md b/docs/analyst-knowledge-log.md index e3bc33d7..1406f1ec 100644 --- a/docs/analyst-knowledge-log.md +++ b/docs/analyst-knowledge-log.md @@ -1,9 +1,20 @@ # analyst-knowledge-log.md -## [2026-07-08 10:40] 自愈执行器升级处理:KOSDAQ-4.1% HIGH信号 +## [2026-07-09 10:40] 自愈执行器升级处理:KOSDAQ-4.1% HIGH信号 - **发现**: 自愈执行器上报盘中自检发现宏观风险HIGH(KOSDAQ-4.1% + 中信证券研报) - **判断**: 系统无故障,已知市场条件延续。KOSDAQ-4.1%是昨日KOSPI暴跌的延续,非新事件。中信证券研报是采集器误报(正常行业研报)。 - **数据验证**: 中国各指数全面脱钩改善(上证-1.26%→+0.02%,恒生-0.51%→+1.69%,科创50+0.28%→+0.62%)。持仓止损距均>3%。 - **操作**: 标记已知状态,无需新推送。08:30 LLM深度分析已覆盖并修正。 - **涉及文件**: macro_risk_state.json(已由consumer更新为processed) + +## [2026-07-09 14:xx] 自愈执行器升级:信号堆积38条 + +- **发现**: 盘中自检触发「信号堆积: 38条未处理(需<30)」告警,自愈执行器无自动修复方案,升级到LLM处理 +- **调查**: 38条为 xiaoguo 来源信号,属4h时效内积压。当前已完成消费(xiaoguo_signal_consumer每30分运行),积压自愈 +- **监控盲区发现**: intraday_health_check.py 和 system_audit.py 均只监控 `source LIKE 'xiaoguo%'`,忽略 divergence_watch(80)、trend(46) 等来源的126条未处理信号 +- **修复**: 两处均增加全量未处理查询,区分 xiaoguo 和其他来源分别报告 +- **涉及文件**: + - `scripts/intraday_health_check.py` — check_signal_pipeline: 增加 total_unproc 查询和非xiaoguo预警 + - `scripts/system_audit.py` — audit_signals: 增加 total_unproc 查询和MEDIUM级别溢出预警 + - `CHANGELOG.md` — 追记监控盲区修复 diff --git a/scripts/intraday_health_check.py b/scripts/intraday_health_check.py index cb2ce521..32a13ada 100644 --- a/scripts/intraday_health_check.py +++ b/scripts/intraday_health_check.py @@ -165,15 +165,23 @@ def check_gateways(): def check_signal_pipeline(): """信号从xiaoguo_scanner→signal_news→consumer是否通畅""" unproc = 0 + total_unproc = 0 try: conn = sqlite3.connect(str(DB_PATH)) - # 只检查时效内的信号堆积(4小时以内),过期信号不被消费者处理但仍会计入堆积 + # xiaoguo 信号堆积(4h以内时效) r = conn.execute("SELECT COUNT(*) FROM signal_news WHERE source LIKE 'xiaoguo%' AND (processed=0 OR processed IS NULL) AND created_at > datetime('now', '-4 hours')").fetchone() unproc = r[0] + # 全量未处理信号(跨来源) + r2 = conn.execute("SELECT COUNT(*) FROM signal_news WHERE (processed=0 OR processed IS NULL)").fetchone() + total_unproc = r2[0] conn.close() except: pass - log(unproc < 30, f"信号堆积: {unproc}条未处理(需<30)") + log(unproc < 30, f"xiaoguo信号堆积: {unproc}条未处理(需<30)") + # 其他来源信号积压预警 + other = total_unproc - unproc + if other > 50: + log(False, f"其它来源信号积压: {other}条未处理(divergence_watch/trend等无consumer)") # 宏观风险状态检查 try: diff --git a/scripts/system_audit.py b/scripts/system_audit.py index ddb40a59..f1f1d628 100644 --- a/scripts/system_audit.py +++ b/scripts/system_audit.py @@ -42,10 +42,15 @@ def audit_signals(conn): try: total = conn.execute("SELECT COUNT(*) FROM signal_news").fetchone()[0] unproc = conn.execute("SELECT COUNT(*) FROM signal_news WHERE source LIKE 'xiaoguo%' AND (processed=0 OR processed IS NULL) AND created_at > datetime('now', '-4 hours')").fetchone()[0] + total_unproc = conn.execute("SELECT COUNT(*) FROM signal_news WHERE (processed=0 OR processed IS NULL)").fetchone()[0] today = conn.execute("SELECT COUNT(*) FROM signal_news WHERE created_at > datetime('now','-1 day')").fetchone()[0] - log_ok("信号管道", f"信号库{total}条,今日{today}条,未处理{unproc}条") + log_ok("信号管道", f"信号库{total}条,今日{today}条,未处理{total_unproc}条(xiaoguo={unproc})") if unproc > 30: - log_issue("信号管道", "HIGH", f"未处理信号堆积{unproc}条,可能处理速度跟不上") + log_issue("信号管道", "HIGH", f"xiaoguo信号堆积{unproc}条,可能处理速度跟不上") + # 检查其他来源信号积压(无consumer的信号源) + other = total_unproc - unproc + if other > 50: + log_issue("信号管道", "MEDIUM", f"其它来源信号积压{other}条(divergence_watch/trend等,可能无consumer)") except Exception as e: log_issue("信号管道", "HIGH", f"查询失败: {e}")