postfix-log-parser 0.2.0

高性能模块化Postfix日志解析器,经3.2GB生产数据验证,SMTPD事件100%准确率
Documentation
use serde_json;

/// 将可选的u32值转换为JSON数值
pub fn optional_u32_to_json(value: &Option<u32>) -> Option<serde_json::Value> {
    value.map(|v| serde_json::Value::Number(serde_json::Number::from(v)))
}

/// 将可选的u64值转换为JSON数值
pub fn optional_u64_to_json(value: &Option<u64>) -> Option<serde_json::Value> {
    value.map(|v| serde_json::Value::Number(serde_json::Number::from(v)))
}

/// 将可选的字符串转换为JSON字符串
pub fn optional_string_to_json(value: &Option<String>) -> Option<serde_json::Value> {
    value.as_ref().map(|s| serde_json::Value::String(s.clone()))
}

/// 将字符串向量转换为JSON数组
pub fn string_vec_to_json(vec: &[String]) -> serde_json::Value {
    let json_array: Vec<serde_json::Value> = vec
        .iter()
        .map(|s| serde_json::Value::String(s.clone()))
        .collect();
    serde_json::Value::Array(json_array)
}

/// 为事件数据插入可选字段
pub fn insert_optional_field(
    map: &mut serde_json::Map<String, serde_json::Value>,
    key: &str,
    value: &Option<String>,
) {
    if let Some(val) = value {
        map.insert(key.to_string(), serde_json::Value::String(val.clone()));
    }
}

/// 为事件数据插入可选数值字段
pub fn insert_optional_number_field(
    map: &mut serde_json::Map<String, serde_json::Value>,
    key: &str,
    value: &Option<u32>,
) {
    if let Some(val) = value {
        map.insert(
            key.to_string(),
            serde_json::Value::Number(serde_json::Number::from(*val)),
        );
    }
}

/// 添加故障排除信息
pub fn add_troubleshooting_info(
    map: &mut serde_json::Map<String, serde_json::Value>,
    context: &str,
) {
    let troubleshooting = serde_json::json!({
        "context": context,
        "suggestions": [
            "检查网络连接",
            "验证配置文件",
            "查看系统日志",
            "检查资源使用情况"
        ],
        "documentation": "https://www.postfix.org/documentation.html"
    });

    map.insert("troubleshooting".to_string(), troubleshooting);
}