#!/usr/bin/env python3
"""
检查最新的 ETL 日志文件，查找 DWD 任务执行情况和错误信息
"""

import os
import glob
from pathlib import Path
from datetime import datetime
from dotenv import load_dotenv

def main():
    # 加载环境变量
    load_dotenv()
    
    log_root = os.environ.get('LOG_ROOT')
    if not log_root:
        raise RuntimeError("LOG_ROOT 环境变量未设置")
    
    log_dir = Path(log_root)
    print(f"查找日志目录: {log_dir}")
    
    if not log_dir.exists():
        print(f"日志目录不存在: {log_dir}")
        return
    
    # 获取所有日志文件并按修改时间排序
    log_files = list(log_dir.glob("*.log"))
    if not log_files:
        print("未找到日志文件")
        return
    
    # 按修改时间排序，最新的在前
    log_files.sort(key=lambda x: x.stat().st_mtime, reverse=True)
    
    print(f"找到 {len(log_files)} 个日志文件")
    print(f"最新日志文件: {log_files[0].name}")
    print(f"修改时间: {datetime.fromtimestamp(log_files[0].stat().st_mtime)}")
    
    # 读取最新日志文件
    latest_log = log_files[0]
    
    print(f"\n=== 检查最新日志: {latest_log.name} ===")
    
    with open(latest_log, 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 查找关键信息
    lines = content.split('\n')
    
    # 查找 DWD 相关信息
    dwd_lines = [line for line in lines if 'DWD' in line]
    if dwd_lines:
        print(f"\n🔍 DWD 相关日志 ({len(dwd_lines)} 条):")
        for line in dwd_lines[-10:]:  # 显示最后10条
            print(f"  {line}")
    
    # 查找错误信息
    error_lines = [line for line in lines if any(keyword in line.upper() for keyword in ['ERROR', 'EXCEPTION', 'FAILED', 'TRACEBACK'])]
    if error_lines:
        print(f"\n❌ 错误信息 ({len(error_lines)} 条):")
        for line in error_lines[-5:]:  # 显示最后5条错误
            print(f"  {line}")
    
    # 查找成功信息
    success_lines = [line for line in lines if any(keyword in line.upper() for keyword in ['SUCCESS', 'COMPLETED', 'FINISHED'])]
    if success_lines:
        print(f"\n✅ 成功信息 ({len(success_lines)} 条):")
        for line in success_lines[-5:]:  # 显示最后5条成功
            print(f"  {line}")
    
    # 查找数据处理统计
    stats_lines = [line for line in lines if any(keyword in line for keyword in ['rows', 'records', 'processed', 'inserted', 'updated'])]
    if stats_lines:
        print(f"\n📊 数据处理统计 ({len(stats_lines)} 条):")
        for line in stats_lines[-5:]:  # 显示最后5条统计
            print(f"  {line}")
    
    # 显示日志文件大小和行数
    file_size = latest_log.stat().st_size
    line_count = len(lines)
    print(f"\n📋 日志文件信息:")
    print(f"  文件大小: {file_size:,} 字节")
    print(f"  总行数: {line_count:,} 行")
    
    # 如果日志很大，显示最后几行
    if line_count > 50:
        print(f"\n📝 最后 10 行:")
        for line in lines[-10:]:
            if line.strip():
                print(f"  {line}")

if __name__ == "__main__":
    main()