From d9a5c53087e3638d204499fbea4ac9c771282a1e Mon Sep 17 00:00:00 2001 From: zhangqiyang <1066386929@qq.com> Date: Thu, 18 Apr 2024 09:26:01 +0800 Subject: [PATCH] Configure Continuous Integration .... --- .../com/system/log/corn/LogBackupJob.java | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/main/java/com/system/log/corn/LogBackupJob.java diff --git a/src/main/java/com/system/log/corn/LogBackupJob.java b/src/main/java/com/system/log/corn/LogBackupJob.java new file mode 100644 index 0000000..8667e81 --- /dev/null +++ b/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 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> 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 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); + } + } + } +}