🔨 自动清理任务使用系统配置.

This commit is contained in:
lijiahang
2025-02-06 09:56:12 +08:00
parent 6791ea5770
commit ccd7430b8f
2 changed files with 50 additions and 24 deletions

View File

@@ -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;
}
}
}
}

View File

@@ -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;
}
}
}
}