package com.qqchen.deploy.backend.framework.monitor;

import com.qqchen.deploy.backend.framework.enums.MonitorAlertLevelEnum;
import com.qqchen.deploy.backend.framework.enums.MonitorMetricEnum;
import com.qqchen.deploy.backend.framework.monitor.dto.ThresholdCheckResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

/**
 * 服务器监控服务
 * Framework 提供的阈值检测能力
 * 
 * SSH采集由业务层自行处理（ServerMonitorScheduler）
 *
 * @author qqchen
 * @since 2025-12-07
 */
@Slf4j
@Service("frameworkServerMonitorService")
public class ServerMonitorService {
    
    /**
     * 检查阈值
     * 使用检测器检查指标是否超过阈值
     *
     * @param metric 监控指标类型
     * @param monitorData 监控数据
     * @param warningThreshold 警告阈值
     * @param criticalThreshold 严重阈值
     * @param checker 阈值检测器
     * @return 检测结果
     */
    public <T> ThresholdCheckResult checkThreshold(MonitorMetricEnum metric,
                                                    T monitorData,
                                                    BigDecimal warningThreshold,
                                                    BigDecimal criticalThreshold,
                                                    IServerThresholdChecker<T> checker) {
        // 获取当前值
        BigDecimal currentValue = checker.getCurrentValue(monitorData);
        
        // 检查阈值
        MonitorAlertLevelEnum alertLevel = checker.checkThreshold(
            currentValue, warningThreshold, criticalThreshold);
        
        // 构建结果
        return ThresholdCheckResult.builder()
            .metric(metric)
            .currentValue(currentValue)
            .alertLevel(alertLevel)
            .resourceInfo(checker.getResourceInfo(monitorData))
            .build();
    }
}
