Files
MoFin/archive/hermes-dead-tools-20260820/full_error_inventory.py
T
xxm c68f987653 chore(cleansweep): 代码大扫除——归档hermes 111个死工具+4个废弃scanner,收敛MoFin/scripts重复副本,删除根旧版mo_models
- archive/hermes-dead-tools-20260820/: hermes独有不在cron不被import的111个一次性排查/测试工具
- archive/hermes-dead-tools-20260820/: 4个废弃scanner(btd1_v3/market_scanner/market_thermometer已废弃/s2v2)
- archive/legacy-cleanup-20260820/: MoFin根2旧版(mo_models/technical_analysis)+/home/hmo/scripts无引用旧项目+MoFin/scripts重复prepare_report_data
- 删除MoFin根mo_models.py(根旧版,deploy/profile-scripts权威保留)
- 保留: mofin_db.py/mo_data.py硬链接(server.py多层sys.path需各目录访问同一inode,非冗余)
- fix_gateway.py保留(Gateway看门狗fix_gateway_port.py的活跃依赖,勿误删)
- 验证: cron所有脚本引用无缺失, key模块import正常
- hermes独有从116收敛到5核心(alert_logger/market_screener/prepare_report_data/self_todo_executor_v2/xmpp_zhiwei_bot)
2026-08-20 10:36:25 +08:00

29 lines
1.2 KiB
Python

import json, os
from datetime import datetime, timezone
now = datetime.now(timezone.utc)
out = []
for jf, prof in [('/home/hmo/.hermes/profiles/position-analyst/cron/jobs.json', 'pa'),
('/home/hmo/.hermes/cron/jobs.json', 'default')]:
d = json.load(open(jf))
jobs = d if isinstance(d, list) else d.get('jobs', [])
for j in jobs:
st = j.get('last_status')
en = j.get('enabled', True)
if st == 'error' or not en:
lr = str(j.get('last_run_at') or '?')[:19]
err = str(j.get('last_error') or '')[:300].replace('\n', ' | ')
out.append({
'profile': prof, 'name': j.get('name'), 'script': j.get('script'),
'no_agent': j.get('no_agent'), 'status': st, 'enabled': en,
'last_run': lr, 'schedule': j.get('schedule_display') or str(j.get('schedule')),
'error': err,
})
print(f"TOTAL problem jobs: {len(out)}\n")
for o in out:
flag = 'DISABLED' if not o['enabled'] else 'ERROR'
print(f"[{flag}] ({o['profile']}) {o['name']}")
print(f" script={o['script']} no_agent={o['no_agent']} sched={o['schedule']} last={o['last_run']}")
print(f" err: {o['error'][:250]}")
print()