fix: deploy scripts/ files properly (correct directory)
This commit is contained in:
@@ -11,7 +11,7 @@ no_agent 模式:有HIGH风险→输出风险摘要 | 无→静默
|
||||
↓
|
||||
如果 HIGH → 推送到 Dad
|
||||
"""
|
||||
import sqlite3, json, os
|
||||
import sqlite3, json, os, sys, time
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
@@ -20,8 +20,25 @@ DATA = BASE / "data"
|
||||
DB_PATH = DATA / "mofin.db"
|
||||
STATE_PATH = DATA / "macro_risk_state.json"
|
||||
|
||||
def db_update(conn, sql, params, max_retries=3):
|
||||
"""幂等DB更新,遇到锁自动重试"""
|
||||
for attempt in range(max_retries):
|
||||
try:
|
||||
conn.execute(sql, params)
|
||||
conn.commit()
|
||||
return True
|
||||
except sqlite3.OperationalError as e:
|
||||
if "locked" in str(e).lower():
|
||||
if attempt < max_retries - 1:
|
||||
time.sleep(1)
|
||||
continue
|
||||
raise
|
||||
print(f"[MACRO-CONSUMER] DB更新失败(持续锁): {sql}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
def main():
|
||||
conn = sqlite3.connect(str(DB_PATH))
|
||||
conn = sqlite3.connect(str(DB_PATH), timeout=10)
|
||||
conn.execute("PRAGMA busy_timeout=5000")
|
||||
conn.row_factory = sqlite3.Row
|
||||
|
||||
# 读取未处理的 macro_watch 信号
|
||||
@@ -43,14 +60,28 @@ def main():
|
||||
conn.close()
|
||||
return # SILENT
|
||||
|
||||
# 聚合风险等级
|
||||
# 聚合风险等级(考虑修正覆盖信号)
|
||||
levels = {"宏观-WATCH_HIGH": "high", "宏观-WATCH_MEDIUM": "medium", "宏观-WATCH_INFO": "info"}
|
||||
highest = "info"
|
||||
all_summaries = []
|
||||
|
||||
def _effective_level(sentiment, summary):
|
||||
"""修正覆盖信号取修正后的级别,不按原始sentiment算"""
|
||||
if "修正覆盖" in (summary or ""):
|
||||
s = (summary or "").lower()
|
||||
# 明确说零风险/正面/利好 → info
|
||||
if any(kw in s for kw in ["零风险", "正面利好", "正面进展", "非风险", "利好"]):
|
||||
return "info"
|
||||
# 明确说MEDIUM → medium
|
||||
if "medium" in s or "中风险" in s:
|
||||
return "medium"
|
||||
# 修正覆盖HIGH → 默认降为medium(不保留原始HIGH)
|
||||
return "medium"
|
||||
return levels.get(sentiment, "info")
|
||||
|
||||
for r in rows:
|
||||
sentiment = r["overall_sentiment"]
|
||||
lv = levels.get(sentiment, "info")
|
||||
lv = _effective_level(sentiment, r["summary"])
|
||||
if lv == "high":
|
||||
highest = "high"
|
||||
elif lv == "medium" and highest != "high":
|
||||
@@ -72,10 +103,9 @@ def main():
|
||||
}
|
||||
STATE_PATH.write_text(json.dumps(state, ensure_ascii=False, indent=2))
|
||||
|
||||
# 标记为已处理
|
||||
# 标记为已处理(含重试)
|
||||
for r in rows:
|
||||
conn.execute("UPDATE signal_news SET processed=1 WHERE id=?", (r["id"],))
|
||||
conn.commit()
|
||||
db_update(conn, "UPDATE signal_news SET processed=1 WHERE id=?", (r["id"],))
|
||||
conn.close()
|
||||
|
||||
# no_agent 输出(有 HIGH 才主动出声)
|
||||
|
||||
Reference in New Issue
Block a user