"""单独重跑 SPI 任务验证 site_id bigint 修复""" import os, sys, subprocess, time from pathlib import Path from datetime import datetime from dotenv import load_dotenv from zoneinfo import ZoneInfo load_dotenv(Path(__file__).resolve().parents[2] / ".env") TZ = ZoneInfo("Asia/Shanghai") ETL_CWD = Path(__file__).resolve().parents[2] / "apps" / "etl" / "connectors" / "feiqiu" cmd = [ "uv", "run", "--package", "etl-feiqiu", "python", "-m", "cli.main", "--layers", "INDEX", "--tasks", "DWS_SPENDING_POWER_INDEX", "--window-start", "2025-11-01 00:00:00", "--window-end", "2026-02-27 00:00:00", "--window-split-days", "30", "--force-full", ] now = datetime.now(TZ) print(f"SPI 重跑 | {now.isoformat()}") start = time.time() proc = subprocess.run( cmd, cwd=str(ETL_CWD), capture_output=True, text=True, encoding="utf-8", errors="replace", timeout=300, ) elapsed = time.time() - start output = proc.stdout + proc.stderr has_error = any( kw in line for line in output.splitlines() for kw in ("ERROR", "CRITICAL", "Traceback") ) ok = proc.returncode == 0 and not has_error icon = "OK" if ok else "FAIL" print(f"结果: {icon} ({elapsed:.0f}s)") if not ok: for line in output.splitlines()[-30:]: print(f" | {line}") # 保存日志 log_root = os.environ.get("SYSTEM_LOG_ROOT") if not log_root: raise RuntimeError("SYSTEM_LOG_ROOT 未设置") log_dir = Path(log_root) log_dir.mkdir(parents=True, exist_ok=True) log_file = log_dir / f"{now.strftime('%Y%m%d')}_rerun_spi_v5.log" with open(log_file, "w", encoding="utf-8") as f: f.write(f"[{icon}] DWS_SPENDING_POWER_INDEX ({elapsed:.0f}s)\n") f.write(output) print(f"日志: {log_file}") sys.exit(0 if ok else 1)