#!/usr/bin/env python3
import json, os

GOV_DIR = '/root/gov_crawler/'
CONFIG_FILE = os.path.join(GOV_DIR, 'daily_crawl_config.json')

with open(CONFIG_FILE) as f:
    crawlers = json.load(f)

print('配置条目数:', len(crawlers))
print()

config_scripts = {}
for entry in crawlers:
    script = entry.get('script', '')
    if script:
        config_scripts[script] = entry
        print('  配置脚本:', script, ' (' + entry.get('name','?') + ')')
    else:
        print('  [WARN] 条目缺少script字段:', entry.get('name','?'))

print()

disk_scripts = set()
for f in os.listdir(GOV_DIR):
    if f.startswith('crawl_') and (f.endswith('.py') or f.endswith('.js')):
        disk_scripts.add(f)

skip_list = {"crawl_TEMPLATE.py", "crawl_yidu_backup.py", "crawl_scheduler_v2.py"}
# 扫描Archive目录——已主动归档的脚本跳过孤儿检测
archive_dir = os.path.join(GOV_DIR, "Archive")
if os.path.isdir(archive_dir):
    for fname in os.listdir(archive_dir):
        if fname.startswith("crawl_") and (fname.endswith(".py") or fname.endswith(".js")):
            skip_list.add(fname)
errors = []

config_missing = []
for script in sorted(config_scripts.keys()):
    if script.startswith('node '):
        actual = script[5:]
    else:
        actual = script
    if actual not in disk_scripts:
        config_missing.append(script)

if config_missing:
    errors.append('配置中存在但磁盘上缺失 (' + str(len(config_missing)) + '个):')
    for s in config_missing:
        errors.append('    ' + s)

config_script_names = set()
for s in config_scripts.keys():
    if s.startswith('node '):
        config_script_names.add(s[5:])
    else:
        config_script_names.add(s)

disk_orphans = sorted(disk_scripts - config_script_names - skip_list)

print('磁盘 crawl_* 脚本总数:', len(disk_scripts))
print('排除模板/备份后:', len(disk_scripts - skip_list))
print()

if disk_orphans:
    errors.append('磁盘上存在但配置中缺失 (' + str(len(disk_orphans)) + '个):')
    for s in disk_orphans[:10]:
        errors.append('    ' + s)
    if len(disk_orphans) > 10:
        errors.append('    ... 还有' + str(len(disk_orphans)-10) + '个')

if errors:
    print('发现 ' + str(len(errors)) + ' 个问题:')
    for e in errors:
        print('  ' + e)
else:
    print('所有配置脚本在磁盘上均存在，且无孤儿脚本')
