Files
Neo-ZQYY/scripts/ops/analyze_v8.py

61 lines
1.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""分析 v8 执行结果,提取每个任务的成功/失败状态。"""
import json
import re
from pathlib import Path
from dotenv import load_dotenv
load_dotenv(Path(__file__).resolve().parents[2] / ".env")
from _env_paths import get_output_path
log_dir = get_output_path("SYSTEM_LOG_ROOT")
raw = json.loads((log_dir / "2026-02-21__etl_run_raw_v8.json").read_text("utf-8"))
error_log = raw.get("error_log", "")
output_log = raw.get("output_log", "")
full = output_log + "\n" + error_log
# 提取任务结果
success_pat = re.compile(r"任务 (\S+) 执行成功")
fail_pat = re.compile(r"任务 (\S+) 失败[:]?\s*(.*)")
skip_pat = re.compile(r"跳过 (\S+)")
successes = success_pat.findall(full)
failures = [(m.group(1), m.group(2)[:120]) for m in fail_pat.finditer(full)]
skips = skip_pat.findall(full)
# 去重
seen_s = set()
unique_successes = []
for s in successes:
if s not in seen_s:
seen_s.add(s)
unique_successes.append(s)
seen_f = set()
unique_failures = []
for task, reason in failures:
if task not in seen_f:
seen_f.add(task)
unique_failures.append((task, reason))
print(f"=== v8 执行结果分析 ===")
print(f"成功: {len(unique_successes)}")
for s in unique_successes:
print(f"{s}")
print(f"\n失败: {len(unique_failures)}")
for task, reason in unique_failures:
short = reason.split("\n")[0][:100]
print(f"{task}: {short}")
# 查找首个非级联错误
first_error_pat = re.compile(r"ERROR.*?(?:错误|Error|exception|Traceback)", re.IGNORECASE)
in_failed_count = error_log.count("InFailedSqlTransaction")
print(f"\nInFailedSqlTransaction 出现次数: {in_failed_count}")
# 查找根因错误(非 InFailedSqlTransaction 的 ERROR
error_lines = [l for l in error_log.split("\n") if "ERROR" in l and "InFailedSqlTransaction" not in l]
print(f"\n非级联 ERROR 行 ({len(error_lines)} 行):")
for line in error_lines[:20]:
print(f" {line.strip()[:150]}")