diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/ExecLogFileAutoClearTask.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/ExecLogFileAutoClearTask.java index d128c819..22cdf761 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/ExecLogFileAutoClearTask.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/ExecLogFileAutoClearTask.java @@ -22,14 +22,15 @@ */ package org.dromara.visor.module.asset.task; +import cn.orionsec.kit.lang.utils.Booleans; import cn.orionsec.kit.lang.utils.time.Dates; import lombok.extern.slf4j.Slf4j; +import org.dromara.visor.common.constant.Const; import org.dromara.visor.common.utils.LockerUtils; -import org.dromara.visor.module.asset.define.config.AppExecLogAutoClearConfig; +import org.dromara.visor.module.asset.define.config.AppAutoClearConfig; import org.dromara.visor.module.asset.entity.request.exec.ExecLogClearRequest; import org.dromara.visor.module.asset.enums.ExecStatusEnum; import org.dromara.visor.module.asset.service.ExecLogService; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -45,16 +46,14 @@ import java.util.Date; */ @Slf4j @Component -@ConditionalOnProperty(value = "app.auto-clear.exec-log.enabled", havingValue = "true") public class ExecLogFileAutoClearTask { - /** - * 分布式锁名称 - */ + private static final Integer BATCH_SIZE = Const.N_1000; + private static final String LOCK_KEY = "clear:exl:lock"; @Resource - private AppExecLogAutoClearConfig appExecLogAutoClearConfig; + private AppAutoClearConfig appAutoClearConfig; @Resource private ExecLogService execLogService; @@ -65,6 +64,11 @@ public class ExecLogFileAutoClearTask { @Scheduled(cron = "0 0 3 * * ?") public void clear() { log.info("ExecLogFileAutoClearTask.clear start"); + // 检查是否开启 + if (!Booleans.isTrue(appAutoClearConfig.getExecLogEnabled())) { + log.info("ExecLogFileAutoClearTask.clear disabled"); + return; + } // 获取锁并执行 LockerUtils.tryLock(LOCK_KEY, this::doClear); log.info("ExecLogFileAutoClearTask.clear finish"); @@ -76,13 +80,22 @@ public class ExecLogFileAutoClearTask { private void doClear() { // 删除的时间区间 Date createLessEq = Dates.stream() - .subDay(appExecLogAutoClearConfig.getKeepPeriod()) + .subDay(appAutoClearConfig.getExecLogKeepDays()) .date(); // 清理 - ExecLogClearRequest request = new ExecLogClearRequest(); - request.setCreateTimeLe(createLessEq); - request.setStatusList(ExecStatusEnum.FINISH_STATUS_LIST); - execLogService.clearExecLog(request); + for (int i = 0; ; i++) { + log.info("ExecLogFileAutoClearTask.doClear start batch: {}", i + 1); + ExecLogClearRequest request = new ExecLogClearRequest(); + request.setCreateTimeLe(createLessEq); + request.setStatusList(ExecStatusEnum.FINISH_STATUS_LIST); + request.setLimit(BATCH_SIZE); + Integer count = execLogService.clearExecLog(request); + log.info("ExecLogFileAutoClearTask.doClear end batch: {}, count: {}", i + 1, count); + // 最后一批 + if (count < BATCH_SIZE) { + return; + } + } } } diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/TerminalConnectLogAutoClearTask.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/TerminalConnectLogAutoClearTask.java index 10ee6bbc..f4d0d986 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/TerminalConnectLogAutoClearTask.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/task/TerminalConnectLogAutoClearTask.java @@ -22,14 +22,15 @@ */ package org.dromara.visor.module.asset.task; +import cn.orionsec.kit.lang.utils.Booleans; import cn.orionsec.kit.lang.utils.time.Dates; import lombok.extern.slf4j.Slf4j; +import org.dromara.visor.common.constant.Const; import org.dromara.visor.common.utils.LockerUtils; -import org.dromara.visor.module.asset.define.config.AppTerminalConnectLogAutoClearConfig; +import org.dromara.visor.module.asset.define.config.AppAutoClearConfig; import org.dromara.visor.module.asset.entity.request.host.TerminalConnectLogClearRequest; import org.dromara.visor.module.asset.enums.TerminalConnectStatusEnum; import org.dromara.visor.module.asset.service.TerminalConnectLogService; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -45,16 +46,14 @@ import java.util.Date; */ @Slf4j @Component -@ConditionalOnProperty(value = "app.auto-clear.terminal-connect-log.enabled", havingValue = "true") public class TerminalConnectLogAutoClearTask { - /** - * 分布式锁名称 - */ + private static final Integer BATCH_SIZE = Const.N_1000; + private static final String LOCK_KEY = "clear:tcl:lock"; @Resource - private AppTerminalConnectLogAutoClearConfig appTerminalConnectLogAutoClearConfig; + private AppAutoClearConfig appAutoClearConfig; @Resource private TerminalConnectLogService terminalConnectLogService; @@ -65,6 +64,11 @@ public class TerminalConnectLogAutoClearTask { @Scheduled(cron = "0 10 3 * * ?") public void clear() { log.info("TerminalConnectLogAutoClearTask.clear start"); + // 检查是否开启 + if (!Booleans.isTrue(appAutoClearConfig.getTerminalLogEnabled())) { + log.info("TerminalConnectLogAutoClearTask.clear disabled"); + return; + } // 获取锁并执行 LockerUtils.tryLock(LOCK_KEY, this::doClear); log.info("TerminalConnectLogAutoClearTask.clear finish"); @@ -76,13 +80,22 @@ public class TerminalConnectLogAutoClearTask { private void doClear() { // 删除的时间区间 Date createLessEq = Dates.stream() - .subDay(appTerminalConnectLogAutoClearConfig.getKeepPeriod()) + .subDay(appAutoClearConfig.getTerminalLogKeepDays()) .date(); // 清理 - TerminalConnectLogClearRequest request = new TerminalConnectLogClearRequest(); - request.setCreateTimeLe(createLessEq); - request.setStatusList(TerminalConnectStatusEnum.FINISH_STATUS_LIST); - terminalConnectLogService.clearTerminalConnectLog(request); + for (int i = 0; ; i++) { + log.info("TerminalConnectLogAutoClearTask.doClear start batch: {}", i + 1); + TerminalConnectLogClearRequest request = new TerminalConnectLogClearRequest(); + request.setCreateTimeLe(createLessEq); + request.setStatusList(TerminalConnectStatusEnum.FINISH_STATUS_LIST); + request.setLimit(BATCH_SIZE); + Integer count = terminalConnectLogService.clearTerminalConnectLog(request); + log.info("TerminalConnectLogAutoClearTask.doClear end batch: {}, count: {}", i + 1, count); + // 最后一批 + if (count < BATCH_SIZE) { + return; + } + } } }