Browse Source

Configure Continuous Integration ....

master
zhangqiyang 7 months ago
parent
commit
d9a5c53087
  1. 98
      src/main/java/com/system/log/corn/LogBackupJob.java

98
src/main/java/com/system/log/corn/LogBackupJob.java

@ -0,0 +1,98 @@
package com.system.log.corn;
import Log.LogConfig;
import Log.LogEntity;
import Log.repo.LogConfigRepository;
import Log.repo.LogEntityRepository;
import com.google.inject.Inject;
import com.system.log.service.LogService;
import groovy.util.logging.Slf4j;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import module.LogStatus;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
/**
* @author zhangqiyang
* @description LogManage
* @date 2024/4/10
*/
@Slf4j
public class LogBackupJob implements Job {
@Inject LogConfigRepository logConfigRepository;
@Inject LogEntityRepository logEntityRepository;
@Inject LogService logService;
private boolean isRunning(JobExecutionContext context) {
try {
return context.getScheduler().getCurrentlyExecutingJobs().stream()
.filter(j -> j.getTrigger().equals(context.getTrigger()))
.filter(j -> !j.getFireInstanceId().equals(context.getFireInstanceId()))
.findFirst()
.isPresent();
} catch (SchedulerException e) {
return false;
}
}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
if (isRunning(context)) {
return;
}
// 查出表中所有的数据,计算是否到达备份时间,如果到达则进行备份
List<LogConfig> list = logConfigRepository.all().fetch();
String backupTime = null;
String filePath = null;
LogConfig logConfig = null;
for (LogConfig config : list) {
logConfig = logConfigRepository.find(config.getId());
if ((System.currentTimeMillis() > logService.getLongTime(logConfig.getLogEndTime()))
&& (LogStatus.waitBackup.getValue().equals(logConfig.getStatus().getValue())
|| LogStatus.backupFail.getValue().equals(logConfig.getStatus().getValue()))) {
// 此条记录过了备份时间并且状态为待备份或备份失败,开始备份,首先查出所有符合时间的记录
Map<String, List<LogEntity>> logEntityListMap = logService.selectRecord(logConfig);
try {
filePath = logService.backupLogExcelZip(logEntityListMap);
} catch (IOException e) {
// 如果出现异常,将状态改为备份失败
logConfig.setStatus(LogStatus.backupFail);
logService.saveConfig(logConfig);
continue;
}
// 需要将状态改为已备份,并添加备份时间,计算备份大小,将当前配置改为历史配置
logConfig.setStatus(LogStatus.alreadyBackup);
backupTime = logService.getStringTime(System.currentTimeMillis());
logConfig.setBackupStartTime(backupTime);
logConfig.setBackupTime(backupTime);
// 计算文件大小,单位以M表示,精确小数点后两位
Map<String, String> fileSizeMap = logService.getSize(filePath);
logConfig.setThresholdSystemManageUserSize(fileSizeMap.get("16"));
logConfig.setThresholdSecurityUserSize(fileSizeMap.get("1"));
logConfig.setThresholdSecurityAuditUserSize(fileSizeMap.get("2"));
logConfig.setThresholdServiceUserSize(fileSizeMap.get("3"));
logConfig.setFilePath(filePath);
if (logConfig.getRecordType().equals("Current")) {
logConfig.setRecordType("History");
// 如果是当前配置,要添加一条新的记录,将记录改为待配置,因为当前是主配置,历史配置的话不需要,备份一次即可
LogConfig newRecord = new LogConfig();
newRecord.setRecordType("Current");
// 日志开始时间就是上次备份时间,根据备份周期计算日志结束时间
newRecord.setLogStartTime(backupTime);
newRecord.setLogEndTime(logService.getEndTime(backupTime, logConfig.getBackupCycle()));
newRecord.setStatus(LogStatus.waitBackup);
logService.saveConfig(newRecord);
}
logService.saveConfig(logConfig);
}
}
}
}
Loading…
Cancel
Save