#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""qc_vacuum_probe.py —— 12 个「真空」脚本：输出机制 + 落盘位置 + 文件现状（只读）"""
import json, os, re, glob, subprocess, time
D = "/root/gov_crawler/"
TARGETS = ["crawl_jinchang.py","crawl_sdcoke.py","crawl_shucheng.py","crawl_shuozhou.py",
           "crawl_sxakhidz.py","crawl_jingtang_yqdt.py","crawl_hp_hjsp.py","crawl_huaibei_tzgg.py",
           "crawl_anqing_gxq_hb.py","crawl_yangxin_hj.py","crawl_lj_gsgg.py","crawl_wenshang_gggs.py"]
CFG = json.load(open(D + "daily_crawl_config.json", encoding="utf-8"))
cfg = CFG if isinstance(CFG, list) else CFG.get("tasks", CFG.get("scripts", []))
cmap = {}
for c in cfg:
    s = (c.get("script") or "").strip()
    if s: cmap.setdefault(s, c)

print("=== 是否已有 JSONL 导入器 ===")
imp = [os.path.basename(p) for p in glob.glob(D + "*import*") + glob.glob(D + "*jsonl*") + glob.glob(D + "*ingest*")]
print("  ", imp or "无")
for i in (".py",):
    pass
# 看 crawler_lib / 主调度器里有没有导入函数
for f in ("crawler_lib.py", "crawl_scheduler_v2.py"):
    if os.path.exists(D + f):
        t = open(D + f, encoding="utf-8", errors="ignore").read()
        hits = re.findall(r"def (\w*(?:import|ingest|load_jsonl|push)\w*)", t, re.I)
        print("   %s: %s" % (f, hits[:8] or "无"))

print("\n=== 12 个真空脚本 ===")
for f in TARGETS:
    p = D + f
    if not os.path.exists(p):
        print("❌ %s 不存在" % f); continue
    src = open(p, encoding="utf-8", errors="ignore").read()
    # 输出机制
    mech = []
    if re.search(r"json\.dump", src): mech.append("json.dump")
    if re.search(r"JSON_OUTPUT", src): mech.append("JSON_OUTPUT")
    if re.search(r"print\(json\.dumps", src): mech.append("print(json.dumps)")
    if re.search(r"\.jsonl", src): mech.append(".jsonl")
    if re.search(r"INSERT\s+(OR\s+\w+\s+)?INTO", src, re.I): mech.append("有INSERT")
    # 目标路径
    paths = set(re.findall(r"['\"](\/[\w./\-\u4e00-\u9fff]*\.(?:json|jsonl))['\"]", src))
    paths |= set(re.findall(r"OUT\w*\s*=\s*['\"]([^'\"]+)['\"]", src))
    c = cmap.get(f, {})
    print("\n── %s | %s | 组 %s" % (f, (c.get("name") or "?")[:28], c.get("group") or ""))
    print("   输出机制: %s | 路径常量: %s" % (", ".join(mech) or "?", list(paths)[:3]))
    args = str(c.get("args") or "")
    print("   config args=%r enabled=%s" % (args[:40], c.get("enabled", True)))
    for q in list(paths)[:2]:
        if os.path.exists(q):
            st = os.stat(q)
            print("     %s 存在 %d 字节 改于 %s" % (q, st.st_size, time.strftime("%Y-%m-%d %H:%M", time.localtime(st.st_mtime))))
        else:
            print("     %s 不存在" % q)
