summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshizhendong <[email protected]>2024-06-03 10:26:56 +0800
committershizhendong <[email protected]>2024-06-03 10:26:56 +0800
commitd80bd3ba360c2834f194d80570dda60f69d0be57 (patch)
tree62da1675c100756d78f7d4070aed48ec1c392dcf
parent464894b5ea2347e78cd8fe55ce7c81f057e14fea (diff)
Revert "feat: NEZ-3484 新增 log setting 接口"
This reverts commit 464894b5
-rw-r--r--nz-admin/src/main/java/com/nis/common/job/JobConfig.java33
-rw-r--r--nz-admin/src/main/java/com/nis/modules/sys/controller/SysConfController.java32
-rw-r--r--nz-admin/src/main/java/com/nis/modules/sys/job/CleanJob.java15
-rw-r--r--nz-admin/src/main/java/com/nis/modules/sys/service/SysConfService.java4
-rw-r--r--nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysConfServiceImpl.java118
-rw-r--r--nz-admin/src/main/java/com/nis/modules/terminal/job/CleanExpiredTerminalRecordDataJob.java (renamed from nz-admin/src/main/java/com/nis/modules/terminal/job/CleanExpiredAuditLogDataJob.java)42
-rw-r--r--nz-admin/src/main/resources/db/V2024.05.30__add sys_config operation_log_retention conf.sql4
7 files changed, 152 insertions, 96 deletions
diff --git a/nz-admin/src/main/java/com/nis/common/job/JobConfig.java b/nz-admin/src/main/java/com/nis/common/job/JobConfig.java
index 9e939621..c3a1d984 100644
--- a/nz-admin/src/main/java/com/nis/common/job/JobConfig.java
+++ b/nz-admin/src/main/java/com/nis/common/job/JobConfig.java
@@ -17,7 +17,7 @@ import com.nis.modules.election.job.HaJob;
import com.nis.modules.endpoint.job.MetricTypeEndpointStatusJob;
import com.nis.modules.sys.job.*;
import com.nis.modules.sys.service.SysConfService;
-import com.nis.modules.terminal.job.CleanExpiredAuditLogDataJob;
+import com.nis.modules.terminal.job.CleanExpiredTerminalRecordDataJob;
import com.nis.modules.terminal.job.CleanNoRealUseTerminalConnJob;
import org.apache.commons.lang.StringUtils;
import org.quartz.*;
@@ -73,8 +73,8 @@ public class JobConfig {
@Value("${nezha.sessionTimeOutJobCron:0 0/5 * * * ? *}")
private String sessionTimeOutJobCron;
- @Value("${nezha.cleanJobCron:0 0 1 * * ?}")
- private String cleanJobCron;
+ @Value("${nezha.terminalCleanJobCron:0 0 1 * * ?}")
+ private String terminalCleanJobCron;
@Value("${nezha.sysComponentJobCron:0/30 * * * * ?}")
private String sysComponentJobCron;
@@ -94,8 +94,8 @@ public class JobConfig {
@Value("${nezha.cleanNoRealUseTerminalConnJobCron:0 0/5 * * * ? *}")
private String cleanNoRealUseTerminalConnJobCron;
- @Value("${nezha.cleanExpiredAuditLogDataJobCron:0 0 1 * * ?}")
- private String cleanExpiredAuditLogDataJobCron;
+ @Value("${nezha.cleanExpiredTerminalRecordDataJobCron:0 0 1 * * ?}")
+ private String cleanExpiredTerminalRecordDataJobCron;
@Value("${nezha.sysBackFileSyncJobCron:0 0 3 * * ?}")
private String sysBackFileSyncJobCron;
@@ -116,8 +116,9 @@ public class JobConfig {
private Scheduler scheduler;
@Autowired
private SysConfService sysConfService;
-
- private static final String JOB_NAME = "NZJOB_";
+// @Qualifier("costomSchedulerFactoryBean")
+ //private SchedulerFactoryBean schedulerFactoryBean;
+ private static final String JOB_NAME = "NZJOB";
private String agentJobName = "AGENT_JOB";
private String agentHealthCheckJobName = "AGENTHEALTHY_JOB";
private String alertSilenceStatusJobName = "ALERTSILENCESTATUS_JOB";
@@ -136,7 +137,7 @@ public class JobConfig {
private String alertMessageHistoryPartManJobName = "ALERTMESSAGEHISTORYPARTMAN_JOB";
private String recordtRuleManagerJobName = "RECORDTRULEMANAGER_JOB";
private String cleanNoRealUseTerminalConnJobName = "CLEANNOREALUSETERMINALCONN_JOB";
- private String cleanExpiredAuditLogDataJobDetail = "CLEAN_EXPIRED_AUDIT_LOG_DATA_JOB";
+ private String cleanExpiredTerminalRecordDataJob = "CLEAN_EXPIRED_TERMINAL_RECORD_DATA_JOB";
private String sysBackFileSyncJob = "SYS_BACKUP_SYNC_JOB";
private String sysLoginSessionCleanJob = "SYS_LOGIN_SESSION_CLEAN_JOB";
private String softwareLicenseStatusJobName = "SOFTWARE_LICENSE_STATUS_JOB";
@@ -234,8 +235,8 @@ public class JobConfig {
}
@Bean
- public JobDetail cleanExpiredAuditLogDataJobDetail() {
- return JobBuilder.newJob(CleanExpiredAuditLogDataJob.class).withIdentity(JOB_NAME + cleanExpiredAuditLogDataJobDetail).storeDurably().build();
+ public JobDetail cleanExpiredTerminalRecordDataJobDetail() {
+ return JobBuilder.newJob(CleanExpiredTerminalRecordDataJob.class).withIdentity(JOB_NAME + cleanExpiredTerminalRecordDataJob).storeDurably().build();
}
@Bean
@@ -299,6 +300,9 @@ public class JobConfig {
// session time out job 如果配置文件没有配置定时周期 默认为5分钟执行一次
createCronScheduleJob(sessionTimeOutJobName, sessionTimeOutJobDetail(), StringUtils.isEmpty(sessionTimeOutJobCron) ? "0 0/5 * * * ? *" : sessionTimeOutJobCron);
+ // terminal clean job 如果配置文件没有配置定时周期 每天凌晨1点执行一次
+ createCronScheduleJob(cleanJobCronName, cleanJobDetail(), StringUtils.isEmpty(terminalCleanJobCron) ? "0 0 1 * * ?" : terminalCleanJobCron);
+
//sys component 状态更新线程
createCronScheduleJob(sysComponentJobName, sysComponentJobDetail(), StringUtils.isEmpty(sysComponentJobCron) ? "0/30 * * * * ?" : sysComponentJobCron);
@@ -317,6 +321,9 @@ public class JobConfig {
// 清理没有真实使用的 terminal ssh/telnet 连接,以超过最后数据交互时间 30 分钟为准 (sys_config.session_timeout)
createCronScheduleJob(cleanNoRealUseTerminalConnJobName, cleanNoRealUseTerminalConnJobDetail(), StringUtils.isEmpty(cleanNoRealUseTerminalConnJobCron) ? "0 0/5 * * * ? *" : cleanNoRealUseTerminalConnJobCron);
+ // terminal record expired data clean job
+ createCronScheduleJob(cleanExpiredTerminalRecordDataJob, cleanExpiredTerminalRecordDataJobDetail(), Tool.StrUtil.emptyToDefault(cleanExpiredTerminalRecordDataJobCron, "0 0 1 * * ?"));
+
// SysBackFileSyncJob
createCronScheduleJob(sysBackFileSyncJob, sysBackFileSyncJobDetail(), Tool.StrUtil.emptyToDefault(sysBackFileSyncJobCron, "0 0 3 * * ?"));
@@ -330,12 +337,6 @@ public class JobConfig {
// nz_agent_status metrics 定时更新任务
createCronScheduleJob(agentStatusMetricsUpdaterJobName, agentStatusMetricsUpdaterJobDetail(), Tool.StrUtil.emptyToDefault(agentStatusMetricsUpdaterJobCron, "0 0/1 * * * ? *"));
-
- // system clean job
- createCronScheduleJob(cleanJobCronName, cleanJobDetail(), Tool.StrUtil.emptyToDefault(cleanJobCron, "0 0 1 * * ?"));
-
- // 清理过期的审计日志数据任务
- createCronScheduleJob(cleanExpiredAuditLogDataJobDetail, cleanExpiredAuditLogDataJobDetail(), Tool.StrUtil.emptyToDefault(cleanExpiredAuditLogDataJobCron, "0 0 1 * * ?"));
}
/**
diff --git a/nz-admin/src/main/java/com/nis/modules/sys/controller/SysConfController.java b/nz-admin/src/main/java/com/nis/modules/sys/controller/SysConfController.java
index e2807766..c68d79f2 100644
--- a/nz-admin/src/main/java/com/nis/modules/sys/controller/SysConfController.java
+++ b/nz-admin/src/main/java/com/nis/modules/sys/controller/SysConfController.java
@@ -101,6 +101,23 @@ public class SysConfController {
return R.ok();
}
+ /**
+ * 系统重置
+ * @param param
+ * @return
+ */
+ /*@PutMapping("/reset")
+ @SysLog(operation = OperationEnum.RESET,type = TypeEnum.SYS_CONF)
+ @RequiresPermissions({"sys:config:reset"})
+ public R resetConfig(@RequestBody Map<String, Object> param) throws IOException,RuntimeException{
+ try {
+ sysConfService.resetConfig(param);
+ }catch (IOException | RuntimeException e){
+ throw e;
+ }
+ return R.ok();
+ }*/
+
@GetMapping("/key/{configKey}")
@SysLog(operation = OperationEnum.QUERY,type = TypeEnum.SYS_CONF)
public R querySysConfig(@PathVariable("configKey") String configKey){
@@ -108,19 +125,4 @@ public class SysConfController {
return R.ok(result);
}
- @GetMapping("/auditlog")
- @SysLog(operation = OperationEnum.QUERY, type = TypeEnum.SYS_CONF)
- public R auditlog() {
- Map<String, String> result = sysConfService.batchQuery(SysConfServiceImpl.AUDITLOG_KEYS);
- return R.ok(result);
- }
-
- @PutMapping("/auditlog")
- @SysLog(operation = OperationEnum.UPDATE, type = TypeEnum.SYS_CONF)
- @RequiresPermissions({"sys:config:update"})
- public R auditlog(@RequestBody Map<String, String> params) {
- sysConfService.saveAuditlog(params);
- return R.ok();
- }
-
}
diff --git a/nz-admin/src/main/java/com/nis/modules/sys/job/CleanJob.java b/nz-admin/src/main/java/com/nis/modules/sys/job/CleanJob.java
index 0ebdb6d4..8b85a0c1 100644
--- a/nz-admin/src/main/java/com/nis/modules/sys/job/CleanJob.java
+++ b/nz-admin/src/main/java/com/nis/modules/sys/job/CleanJob.java
@@ -61,6 +61,21 @@ public class CleanJob extends QuartzJobBean {
DateTime now = Tool.DateUtil.date();
StopWatch sw = new StopWatch();
+ // terminal_*
+// String terminalRecordLocalRetention = sysConfService.getValue("terminal_record_local_retention");
+// terminalRecordLocalRetention = Tool.StrUtil.emptyToDefault(terminalRecordLocalRetention, "365");
+// DateTime startCleanTerminalTime = Tool.DateUtil.offsetDay(now, -Integer.valueOf(terminalRecordLocalRetention));
+// sw.start();
+// try {
+// log.info("start clean terminal data");
+// terminalSessionService.cleanExpiredDataByTime(startCleanTerminalTime);
+// } catch (Exception e) {
+// log.error("clean terminal data error", e);
+// } finally {
+// sw.stop();
+// }
+// log.info("clean terminal data Run Time: {}", sw.toString());
+
// alert_rule_eval_log
String ruleEvalLogLocalRetention = sysConfService.getValue("alert_rule_eval_log_local_retention");
ruleEvalLogLocalRetention = Tool.StrUtil.emptyToDefault(ruleEvalLogLocalRetention, "30");
diff --git a/nz-admin/src/main/java/com/nis/modules/sys/service/SysConfService.java b/nz-admin/src/main/java/com/nis/modules/sys/service/SysConfService.java
index 3c5d212f..e7b44165 100644
--- a/nz-admin/src/main/java/com/nis/modules/sys/service/SysConfService.java
+++ b/nz-admin/src/main/java/com/nis/modules/sys/service/SysConfService.java
@@ -33,6 +33,8 @@ public interface SysConfService extends IService<SysConfigEntity> {
void saveLdap(Map<String, String> params);
+ // void resetConfig(Map<String, Object> param) throws IOException;
+
void saveMonitor(Map<String, String> params);
Map<String, Object> querySysConfig(String configKey);
@@ -48,6 +50,4 @@ public interface SysConfService extends IService<SysConfigEntity> {
void reloadSysConfigToCache();
- void saveAuditlog(Map<String, String> params);
-
}
diff --git a/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysConfServiceImpl.java b/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysConfServiceImpl.java
index 0150c678..f3690ce9 100644
--- a/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysConfServiceImpl.java
+++ b/nz-admin/src/main/java/com/nis/modules/sys/service/impl/SysConfServiceImpl.java
@@ -88,19 +88,6 @@ public class SysConfServiceImpl extends ServiceImpl<SysConfDao, SysConfigEntity>
public static final String[] LDAP_REQUIRED={"ldap_address","ldap_dn","ldap_user_filter","ldap_mapping","ldap_enable","ldap_timeout"};
- public static final String[] AUDITLOG_KEYS = {"operation_log_retention", "terminal_record_local_retention", "terminal_storage_type", "terminal_storage_s3_endpoint", "terminal_storage_s3_bucket", "terminal_storage_s3_access_key", "terminal_storage_s3_secret_access_key"};
-
- public static final String[] AUDITLOG_REQUIRED = {"operation_log_retention", "terminal_record_local_retention", "terminal_storage_type"};
-
- public static final String[] AUDITLOG_INTEGER = {"operation_log_retention", "terminal_record_local_retention", "terminal_storage_type"};
-
- public static final String[][] AUDITLOG_DEPEND = {
- {"terminal_storage_s3_endpoint", "terminal_storage_type", "2"},
- {"terminal_storage_s3_bucket", "terminal_storage_type", "2"},
- {"terminal_storage_s3_access_key", "terminal_storage_type", "2"},
- {"terminal_storage_s3_secret_access_key", "terminal_storage_type", "2"}
- };
-
private static final Log logger = Log.get();
@Autowired
@@ -282,6 +269,100 @@ public class SysConfServiceImpl extends ServiceImpl<SysConfDao, SysConfigEntity>
}
}
+ /**
+ * 系统设置重置
+ * @param param
+ */
+ /*@Override
+ @Transactional(rollbackFor = Exception.class)
+ public void resetConfig(Map<String, Object> param) throws IOException,RuntimeException{
+ String pin = StrUtil.str(param.get(Constant.PIN).toString());
+ List<String> types = (List<String>)param.get("type");
+ try {
+ if(ToolUtil.isEmpty(pin)||ToolUtil.isEmpty(types)){
+ throw new NZException(RCode.SYS_CONFIG_PASSWORDORTYPE_INVALID);
+ }
+ // 当前登录用户
+ SysUserEntity userEntity = ShiroUtils.getUserEntity();
+ // 原加密密码
+ String oriPassword = userEntity.getPin();
+ // 加密盐值
+ String salt = userEntity.getSalt();
+ // 现加密密码
+ String currentPassword = ShiroUtils.sha256(pin,salt);
+ if(!StrUtil.equals(oriPassword,currentPassword)){
+ // 密码不对,禁止重置
+ throw new NZException(RCode.SYS_CONFIG_PASSWORD_ERROR);
+ }
+ for (String type: types){
+ if(!ArrayUtils.contains(Constant.SYSCONFIG_RESET_TYPE,type)){
+ throw new NZException(RCode.SYS_CONFIG_PASSWORDORTYPE_INVALID);
+ }
+ if("metric".equals(type)){
+ resetMetric();
+ }else if("alert".equals(type)){
+ resetAlert();
+ }else {
+ resetEnterData();
+ }
+ }
+ }catch (IOException | RuntimeException e){
+ throw e;
+ }
+ }*/
+ /**
+ * 重置metric
+ */
+ /*private void resetMetric() throws IOException{
+ String seriesUri = "/api/v1/admin/tsdb/delete_series";
+ String tombstonesUri = "/api/v1/admin/tsdb/clean_tombstones";
+ // 获取正常的监控服务列表
+ List<Agent> agentList = agentService.list(
+ new LambdaQueryWrapper<Agent>().eq(Agent::getStatus,1));
+ if(ToolUtil.isNotEmpty(agentList)){
+ final String key= URLEncoder.encode("{__name__=~'.+'}","UTF-8");
+ agentList.forEach(agent -> {
+ String result = AgentUtil.request(agent, HttpMethod.POST, seriesUri, String.format("match[]=%s", key), null, String.class);
+ logger.info("request result: {}",result);
+ result = AgentUtil.request(agent, HttpMethod.POST, tombstonesUri, null, null, String.class);
+ logger.info("request result: {}",result);
+ });
+ }
+ }*/
+
+ /**
+ * 重置alert
+ */
+ /*private void resetAlert() throws RuntimeException{
+ alertMessageService.remove(new LambdaQueryWrapper<AlertMessageEntity>());
+ }*/
+
+ /**
+ * 清除用户输入数据
+ */
+ /*@Transactional(rollbackFor = Exception.class)
+ public void resetEnterData() {
+ try {
+ // cache 写入当前用户id
+ Long userId = ShiroUtils.getUserId();
+ cache.set("reset",String.valueOf(userId),expire, TimeUnit.SECONDS);
+ // 删除用户输入的数据
+ String jsonTables = this.getValue(Constant.RESET_TABLE_INFOS);
+ if(StringUtils.isNotEmpty(jsonTables)) {
+ List<String> tables = (List<String>) JSONArray.parse(jsonTables);
+ Arrays.stream(tables.toArray()).forEach(table->{
+ this.baseMapper.clearData((String)table);
+ });
+ }
+ // 删除cache中key=reset的数据
+ cache.delete("reset");
+ logger.info("nezha reset success");
+ } catch (RuntimeException e) {
+ logger.error("nezha reset fail",e);
+ throw new NZException(RCode.SYS_CONFIG_RESET_FAIL);
+ }
+ }*/
+
@Override
public String getValue(String key) {
TimedCache<String, Object> cache = LocalCacheManager.getNeverExpireTimedCache(Constant.SYS_CACHE_PREFIX, Constant.SYS_CONFIG_CACHE_KEY);
@@ -732,15 +813,4 @@ public class SysConfServiceImpl extends ServiceImpl<SysConfDao, SysConfigEntity>
logger.info("[reloadSysConfigToCache] [finshed]");
}
- @Override
- public void saveAuditlog(Map<String, String> params) {
- Map<String, String> result = this.validateKeys(AUDITLOG_KEYS, params);
-
- this.validateRequired(result, AUDITLOG_REQUIRED, AUDITLOG_DEPEND);
-
- this.validateInteger(AUDITLOG_INTEGER, result);
-
- this.saveOrUpdateConfsBatch(result);
- }
-
}
diff --git a/nz-admin/src/main/java/com/nis/modules/terminal/job/CleanExpiredAuditLogDataJob.java b/nz-admin/src/main/java/com/nis/modules/terminal/job/CleanExpiredTerminalRecordDataJob.java
index 79593982..e2faad30 100644
--- a/nz-admin/src/main/java/com/nis/modules/terminal/job/CleanExpiredAuditLogDataJob.java
+++ b/nz-admin/src/main/java/com/nis/modules/terminal/job/CleanExpiredTerminalRecordDataJob.java
@@ -9,13 +9,10 @@ import cn.hutool.log.Log;
import com.amazonaws.SDKGlobalConfiguration;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.BucketLifecycleConfiguration;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nis.common.utils.Constant;
import com.nis.common.utils.Tool;
import com.nis.modules.election.dao.LeaderElectionDao;
-import com.nis.modules.sys.entity.SysLogEntity;
import com.nis.modules.sys.service.SysConfService;
-import com.nis.modules.sys.service.SysLogService;
import com.nis.modules.terminal.service.TerminalRecordService;
import com.nis.modules.terminal.service.TerminalSessionService;
import com.nis.modules.terminal.utils.TerminalConstant;
@@ -30,7 +27,7 @@ import java.util.Arrays;
import java.util.List;
@DisallowConcurrentExecution
-public class CleanExpiredAuditLogDataJob extends QuartzJobBean {
+public class CleanExpiredTerminalRecordDataJob extends QuartzJobBean {
private static final Log log = Log.get();
@@ -39,9 +36,6 @@ public class CleanExpiredAuditLogDataJob extends QuartzJobBean {
}
@Autowired
- private SysLogService sysLogService;
-
- @Autowired
private SysConfService sysConfService;
@Autowired
@@ -52,24 +46,21 @@ public class CleanExpiredAuditLogDataJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
- Thread.currentThread().setName("CleanExpiredAuditLogDataJob");
+ Thread.currentThread().setName("CleanExpiredTerminalRecordDataJob");
// 检查 HA_LOCK
LeaderElectionDao dao = LeaderElectionDao.getInstance();
boolean isLeader = dao.isLeader(Constant.SYS_HA_LOCK, Constant.SERVER_ID);
- log.info("[CleanExpiredAuditLogDataJob] [Get HA_LOCK] [isLeader: {}]", isLeader);
+ log.info("[CleanExpiredTerminalRecordDataJob] [Get HA_LOCK] [isLeader: {}]", isLeader);
if (BooleanUtil.negate(isLeader)) return;
- log.info("[CleanExpiredAuditLogDataJob] [start cleaning expired data]");
+ log.info("[CleanExpiredTerminalRecordDataJob] [start cleaning expired data]");
- StopWatch sw = StopWatch.create("CleanExpiredAuditLogDataJob");
+ StopWatch sw = StopWatch.create("CleanExpiredTerminalRecordDataJob");
sw.start();
try {
- // sys_log
- this.cleanExpiredOperationLogData();
-
- // terminal
+ // clean Expired Terminal Record Data
this.cleanExpiredTerminalRecordData();
} catch (Exception e) {
log.error(e, "[CleanExpiredTerminalRecordDataJob] [failed to clean data]");
@@ -77,26 +68,7 @@ public class CleanExpiredAuditLogDataJob extends QuartzJobBean {
sw.stop();
}
- log.info("[CleanExpiredAuditLogDataJob] [clean data complete] [Run Time: {}]", sw.prettyPrint());
- }
-
- private void cleanExpiredOperationLogData() {
- // 操作日志保留天数
- String operationLogRetention = sysConfService.getValueOrDefault("operation_log_retention", "0");
- log.info("[cleanExpiredOperationLogData] [operation_log_retention] [value: {}]", operationLogRetention);
-
- if (StrUtil.equals("0", operationLogRetention)) {
- log.warn("[cleanExpiredOperationLogData] [no clean operation logs]");
- } else {
- DateTime now = Tool.DateUtil.date();
-
- // 过期时间
- DateTime expireDate = Tool.DateUtil.offsetDay(now, -Integer.valueOf(operationLogRetention));
- log.info("[cleanExpiredOperationLogData] [clear expired sys_log date in db] [now: {}] [retention days: {}] [expire date: {}]", now, operationLogRetention, expireDate);
-
- int deleteNum = sysLogService.getBaseMapper().delete(new LambdaQueryWrapper<SysLogEntity>().le(SysLogEntity::getCreateDate, expireDate));
- log.info("[cleanExpiredOperationLogData] [finshed] [delete num: {}]", deleteNum);
- }
+ log.info("[CleanExpiredTerminalRecordDataJob] [clean data complete] [Run Time: {}]", sw.prettyPrint());
}
@Transactional(rollbackFor = Exception.class)
diff --git a/nz-admin/src/main/resources/db/V2024.05.30__add sys_config operation_log_retention conf.sql b/nz-admin/src/main/resources/db/V2024.05.30__add sys_config operation_log_retention conf.sql
deleted file mode 100644
index a6db12b1..00000000
--- a/nz-admin/src/main/resources/db/V2024.05.30__add sys_config operation_log_retention conf.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * 1. 新增 operation_log_retention 配置,操作日志保留天数, 默认:0
- */
-INSERT IGNORE INTO `sys_config`(`id`, `param_key`, `param_value`, `status`, `remark`) VALUES (NULL, 'operation_log_retention', '0', 1, '操作日志保留天数');