diff --git a/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java b/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java index 8cf12e2..dd5069a 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java +++ b/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java @@ -33,30 +33,31 @@ public class AppInitializer implements CommandLineRunner { dynamicTaskService.scheduleTask("heartbeat", businessTasks::heartbeatTask, 5000, 30000); + long milli = AgentUtil.getMillisToNextMinute() + 60000; // 每300秒执行CPU信息采集任务 - AssertLog.info("初始化启动CPU信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 25000, 300000); + AssertLog.info("初始化启动CPU信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", milli, 300000); dynamicTaskService.scheduleTask("cpu", - businessTasks::cpuTask, 25000, 300000); // 25秒后开始,每300秒执行 + businessTasks::cpuTask, milli, 300000); // 25秒后开始,每300秒执行 // 每300秒执行磁盘信息采集任务 - AssertLog.info("初始化启动磁盘信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 35000, 300000); + AssertLog.info("初始化启动磁盘信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", milli, 300000); dynamicTaskService.scheduleTask("disk", - businessTasks::diskTask, 35000, 300000); // 35秒后开始,每300秒执行 + businessTasks::diskTask, milli, 300000); // 35秒后开始,每300秒执行 // 每300秒执行系统信息采集任务 - AssertLog.info("初始化启动系统信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 40000, 300000); + AssertLog.info("初始化启动系统信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", milli, 300000); dynamicTaskService.scheduleTask("system", - businessTasks::systemTask, 40000, 300000); // 40秒后开始,每300秒执行 + businessTasks::systemTask, milli, 300000); // 40秒后开始,每300秒执行 // 每300秒执行容器信息采集任务 - AssertLog.info("初始化启动容器信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 45000, 300000); + AssertLog.info("初始化启动容器信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", milli, 300000); dynamicTaskService.scheduleTask("docker", - businessTasks::dockerTask, 45000, 300000); // 45秒后开始,每300秒执行 + businessTasks::dockerTask, milli, 300000); // 45秒后开始,每300秒执行 // 每300秒执行内存信息采集任务 - AssertLog.info("初始化启动内存信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 55000, 300000); + AssertLog.info("初始化启动内存信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", milli, 300000); dynamicTaskService.scheduleTask("memory", - businessTasks::memoryTask, 55000, 300000); // 55秒后开始,每300秒执行 + businessTasks::memoryTask, milli, 300000); // 55秒后开始,每300秒执行 //获取当前时间距离下一个“分钟为 0 或 5”的时间点还差多少毫秒 @@ -67,9 +68,9 @@ public class AppInitializer implements CommandLineRunner { businessTasks::netTask, millis, 300000); // 65秒后开始,每300秒执行 // 每300秒执行挂载信息采集任务 - AssertLog.info("初始化启动挂载信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 75000, 300000); + AssertLog.info("初始化启动挂载信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", milli, 300000); dynamicTaskService.scheduleTask("point", - businessTasks::pointTask, 75000, 300000); // 75秒后开始,每300秒执行 + businessTasks::pointTask, milli, 300000); // 75秒后开始,每300秒执行 // 每300秒执行交换机信息采集任务 AssertLog.info("初始化启动交换机信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", millis, 300000); diff --git a/src/main/java/com/tongran/agentserver/utils/AgentUtil.java b/src/main/java/com/tongran/agentserver/utils/AgentUtil.java index 51652e5..7293f6f 100644 --- a/src/main/java/com/tongran/agentserver/utils/AgentUtil.java +++ b/src/main/java/com/tongran/agentserver/utils/AgentUtil.java @@ -131,4 +131,46 @@ public class AgentUtil { return ChronoUnit.MILLIS.between(now, nextTime); } + /** + * 获取距离下一个分钟整点的毫秒数 + */ + public static long getMillisToNextMinute() { + LocalDateTime now = LocalDateTime.now(); + + // 获取下一个分钟整点时间 + LocalDateTime nextMinute = now + .truncatedTo(ChronoUnit.MINUTES) // 截断到当前分钟 + .plusMinutes(1); // 加1分钟 + + // 计算时间差(毫秒) + return ChronoUnit.MILLIS.between(now, nextMinute); + } + + /** + * 获取距离下一个指定分钟整点的毫秒数 + */ + public static long getMillisToNextMinuteInterval(int intervalMinutes) { + if (intervalMinutes <= 0) { + throw new IllegalArgumentException("Interval must be positive"); + } + + LocalDateTime now = LocalDateTime.now(); + + // 计算当前分钟在间隔中的位置 + int currentMinute = now.getMinute(); + int remainder = currentMinute % intervalMinutes; + + // 计算需要增加的分钟数 + int minutesToAdd = remainder == 0 ? intervalMinutes : intervalMinutes - remainder; + + // 获取下一个间隔整点时间 + LocalDateTime nextInterval = now + .truncatedTo(ChronoUnit.MINUTES) // 截断到当前分钟 + .plusMinutes(minutesToAdd) // 增加到下一个整点 + .withSecond(0) // 秒设为0 + .withNano(0); // 纳秒设为0 + + return ChronoUnit.MILLIS.between(now, nextInterval); + } + }