在前后端开发联调前 的提交20260223

This commit is contained in:
Neo
2026-02-23 23:02:20 +08:00
parent 254ccb1e77
commit fafc95e64c
1142 changed files with 10366960 additions and 36957 deletions

View File

@@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
"""提取 v8 的 DWD_LOAD_FROM_ODS 完成统计和所有任务最终状态。"""
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
# 提取 DWD_LOAD_FROM_ODS 完成行
for line in full.split("\n"):
if "DWD_LOAD_FROM_ODS: 完成" in line:
# 解析 JSON 部分
idx = line.find("统计=")
if idx >= 0:
stats_str = line[idx + len("统计="):]
# 尝试解析为 Python dict
try:
stats = eval(stats_str)
print("=== DWD_LOAD_FROM_ODS 统计 ===")
for t in stats.get("tables", []):
icon = "" if t.get("inserted", 0) + t.get("updated", 0) > 0 or t.get("processed", 0) > 0 else ""
print(f" {icon} {t['table']} | mode={t.get('mode','?')} | processed={t.get('processed',0)} ins={t.get('inserted',0)} upd={t.get('updated',0)} skip={t.get('skipped',0)}")
errors = stats.get("errors", [])
if errors:
print(f"\n 错误 ({len(errors)} 个):")
for e in errors:
print(f"{e.get('table','?')}: {str(e.get('error',''))[:100]}")
except Exception as ex:
print(f"解析失败: {ex}")
print(stats_str[:500])
break
# 查找所有任务的最终状态(从 output_log 中找"所有任务执行完成"之前的状态)
print("\n=== 任务执行顺序与状态 ===")
task_status = {}
for line in full.split("\n"):
m = re.search(r"任务\s+(\S+)\s+执行成功", line)
if m:
task_status[m.group(1)] = "✅ 成功"
m = re.search(r"任务\s+(\S+)\s+失败", line)
if m and m.group(1) not in task_status:
task_status[m.group(1)] = "❌ 失败"
# 预期任务列表
expected = [
"ODS_FETCH", "DWD_LOAD_FROM_ODS",
"DWS_ASSISTANT_DAILY", "DWS_ASSISTANT_MONTHLY",
"DWS_ASSISTANT_CUSTOMER", "DWS_ASSISTANT_SALARY",
"DWS_ASSISTANT_FINANCE",
"DWS_MEMBER_CONSUMPTION", "DWS_MEMBER_VISIT",
"DWS_GOODS_STOCK_DAILY", "DWS_GOODS_STOCK_WEEKLY", "DWS_GOODS_STOCK_MONTHLY",
"DWS_FINANCE_DAILY", "DWS_FINANCE_RECHARGE",
"DWS_FINANCE_INCOME_STRUCTURE", "DWS_FINANCE_DISCOUNT_DETAIL",
"DWS_WINBACK_INDEX", "DWS_NEWCONV_INDEX", "DWS_RELATION_INDEX",
]
for t in expected:
status = task_status.get(t, "⚪ 未知")
print(f" {status}{t}")
s_count = sum(1 for v in task_status.values() if "成功" in v)
f_count = sum(1 for v in task_status.values() if "失败" in v)
print(f"\n合计: {s_count} 成功, {f_count} 失败, {len(expected) - s_count - f_count} 未知")