Files

2.2 KiB
Raw Permalink Blame History

解析器设计

所属模块:架构概览


文档索引

文档 说明
文件名解析器 从文件名提取场景信息
Qfod 解析器 Qfod 格式日志解析设计
Ploss 解析器 Ploss FOD 格式日志解析设计

通用接口定义

// Parsers/IParser.cs
namespace WCTDataMiner.Parsers;

public interface IParser<TRecord>
{
    /// <summary>
    /// 判断是否可以解析该行
    /// </summary>
    bool CanParse(string line);

    /// <summary>
    /// 解析日志行
    /// </summary>
    /// <param name="line">日志行内容</param>
    /// <param name="scenarioId">关联的测试场景ID用于外键关联由 ParseService 从 FileNameParser 获取后传入)</param>
    ParseResult<TRecord> Parse(string line, Guid scenarioId);
}

public record ParseResult<TRecord>
{
    public bool IsSuccess { get; init; }
    public TRecord? Record { get; init; }
    public string? ErrorType { get; init; }
    public string? ErrorMessage { get; init; }

    public static ParseResult<TRecord> Success(TRecord record) => 
        new() { IsSuccess = true, Record = record };

    public static ParseResult<TRecord> Failure(string errorType, string errorMessage) => 
        new() { IsSuccess = false, ErrorType = errorType, ErrorMessage = errorMessage };
}

解析流程

flowchart TD
    A[读取日志文件] --> B[逐行遍历]
    B --> C{判断行类型}
    C -->|Qfod| D[QfodParser.Parse]
    C -->|Ploss| E[PlossParser.Parse]
    C -->|其他| F[跳过]
    D --> G{解析成功?}
    E --> G
    G -->|成功| H[添加到记录列表]
    G -->|失败| I[记录到 ParseError]
    H --> J[批量保存到数据库]
    I --> J
    J --> K[输出解析报告]

错误类型定义

ErrorType 说明 处理方式
FORMAT_MISMATCH 行格式不匹配正则表达式 跳过该行,记录原始内容
TYPE_CONVERSION 字段类型转换失败 跳过该行,记录错误字段

说明VALUE_OUT_OF_RANGE 错误类型暂未实现,后续可根据需要添加字段值范围校验逻辑。