package com.qqchen.deploy.backend.deploy.service;

import com.qqchen.deploy.backend.deploy.dto.ServerMonitorDataDTO;
import com.qqchen.deploy.backend.deploy.dto.ServerMonitorMetricsDTO;
import com.qqchen.deploy.backend.deploy.dto.ServerMonitorMetricsQuery;
import com.qqchen.deploy.backend.deploy.entity.ServerMonitor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 服务器监控服务接口
 */
public interface IServerMonitorService {

    /**
     * 批量保存监控数据
     */
    void batchSaveMonitorData(List<ServerMonitorDataDTO> dataList);

    /**
     * 删除指定时间之前的历史数据
     */
    int deleteOldData(LocalDateTime beforeTime);
    
    /**
     * 查询指定服务器的最新一条监控记录
     * 用于计算网络流量速率
     * 
     * @param serverId 服务器ID
     * @return 最新的监控记录，如果没有则返回null
     */
    ServerMonitor getLastMonitorData(Long serverId);

    /**
     * 保存单条监控记录（包括失败记录）
     * 
     * @param monitor 监控记录
     */
    void saveMonitorRecord(ServerMonitor monitor);

    /**
     * 统计指定服务器的连续失败次数
     * 查询最近的监控记录，从最新开始统计连续FAILURE状态的数量
     * 
     * @param serverId 服务器ID
     * @param checkLimit 检查最近多少条记录（默认10条）
     * @return 连续失败次数
     */
    int countConsecutiveFailures(Long serverId, int checkLimit);

    /**
     * 查询服务器监控指标数据
     * 支持快捷时间范围和自定义时间范围
     * 支持按指标类型查询（CPU、内存、磁盘、网络）
     * 自动根据时间范围选择合适的聚合粒度
     * 
     * @param query 查询参数
     * @return 监控指标数据
     */
    ServerMonitorMetricsDTO getServerMetrics(ServerMonitorMetricsQuery query);
}
