#!/usr/bin/env python3
# 对比两个日跑的问题脚本 (默认: 昨天记录文件 vs 今天实时查询)
# 用法: python3 compare_run_issues.py [昨日记分文件.md] [今日日期YYYY-MM-DD]
import sqlite3, sys, re, datetime

# 参数
prev_file = sys.argv[1] if len(sys.argv) > 1 else "/root/gov_crawler/run_issue_logs/run_issues_20260821.md"
today = sys.argv[2] if len(sys.argv) > 2 else datetime.date.today().strftime("%Y-%m-%d")

# 读取昨天记录的问题脚本 (从 md 表格提取脚本名)
prev_bad = set()
with open(prev_file, encoding="utf-8") as f:
    for line in f:
        m = re.match(r"\| \d+ \| (crawl_\S+) \|", line)
        if m:
            prev_bad.add(m.group(1))

# 查询今天日跑的问题
conn = sqlite3.connect("/root/search.db")
conn.row_factory = sqlite3.Row
rows = conn.execute(
    "SELECT status, script_name, config_name FROM run_logs "
    "WHERE run_date=? AND status != '成功'", (today,)
).fetchall()
today_bad = {r["script_name"]: r["status"] for r in rows}

# 对比
recovered = sorted(prev_bad - set(today_bad))
persistent = sorted(prev_bad & set(today_bad))
new_issues = sorted(set(today_bad) - prev_bad)

print(f"=== 日跑问题对比 {today} ===")
print(f"昨日问题: {len(prev_bad)} 个, 今日问题: {len(today_bad)} 个")
print(f"\n✅ 已恢复 ({len(recovered)}):")
for s in recovered:
    print(f"  {s}")
print(f"\n⚠️ 持续问题 ({len(persistent)}):")
for s in persistent:
    print(f"  {s} [{today_bad[s]}]")
print(f"\n🆕 新增问题 ({len(new_issues)}):")
for s in new_issues:
    print(f"  {s} [{today_bad[s]}]")

# 状态分布
from collections import Counter
cnt = Counter(today_bad.values())
print(f"\n今日问题状态分布: {dict(cnt)}")
conn.close()
