package jit.edu.paas.commons.schedule;

import jit.edu.paas.domain.entity.UserContainer;
import jit.edu.paas.domain.enums.ContainerStatusEnum;
import jit.edu.paas.service.MonitorService;
import jit.edu.paas.service.UserContainerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

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

/**
 * 监控任务
 * @author jitwxs
 * @since 2018/7/8 11:21
 */
@Component
public class MonitorSchedule {
    @Autowired
    private UserContainerService containerService;
    @Autowired
    private MonitorService monitorService;

    /**
     * 保存容器监控日志
     * 从0s开始,每隔5s
     * @author jitwxs
     * @since 2018/7/9 13:44
     */
    @Scheduled(cron = "0/5 * * * * ? ")
    public void saveContainerMonitorLog() {
        LocalDateTime time = LocalDateTime.now();

        // 获取所有启动的容器列表
        List<UserContainer> containers = containerService.listByStatus(ContainerStatusEnum.RUNNING);
        for(UserContainer container : containers) {
            // 实时监控,粒度:5s
            if(time.getSecond() % 5 == 0) {
                monitorService.setMonitorInfo(container.getId(), 1);
            }
            // 24小时监控,粒度:5分钟
            if(time.getSecond() % 5 == 0) {
                monitorService.setMonitorInfo(container.getId(), 2);
            }
            // 7日监控,粒度:1小时
            if(time.getMinute() == 0 && time.getSecond() == 0) {
                monitorService.setMonitorInfo(container.getId(), 3);
            }
        }
    }
}