Merge pull request #3657 from dataease/pr@dev@feat_log_retention_time_setting

feat(日志管理): 日志保留期限机制
This commit is contained in:
Junjun 2022-11-07 14:26:55 +08:00 committed by GitHub
commit 542da44515
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 81 additions and 9 deletions

View File

@ -32,12 +32,13 @@ public class SysLogController {
@ApiOperation("查询日志")
@PostMapping("/logGrid/{goPage}/{pageSize}")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "path", name = "goPage", value = "页码", required = true, dataType = "Integer"),
@ApiImplicitParam(paramType = "path", name = "pageSize", value = "页容量", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "request", value = "查询条件", required = true)
@ApiImplicitParam(paramType = "path", name = "goPage", value = "页码", required = true, dataType = "Integer"),
@ApiImplicitParam(paramType = "path", name = "pageSize", value = "页容量", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "request", value = "查询条件", required = true)
})
public Pager<List<SysLogGridDTO>> logGrid(@PathVariable int goPage, @PathVariable int pageSize,
@RequestBody KeyGridRequest request) {
request = logService.logRetentionProxy(request);
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, logService.query(request));
}
@ -51,7 +52,7 @@ public class SysLogController {
@ApiOperation("导出操作日志")
@PostMapping("/export")
@ApiImplicitParam(name = "request", value = "查询条件", required = true)
public void export(@RequestBody KeyGridRequest request) throws Exception{
public void export(@RequestBody KeyGridRequest request) throws Exception {
logService.exportExcel(request);
}
}

View File

@ -1,6 +1,7 @@
package io.dataease.service;
import io.dataease.ext.CleaningRebotMapper;
import io.dataease.service.sys.log.LogService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -16,6 +17,9 @@ public class CleaningRebotService {
@Resource
private CleaningRebotMapper cleaningRebotMapper;
@Resource
private LogService logService;
public void execute() {
int floatDept = 0;
do {
@ -33,5 +37,6 @@ public class CleaningRebotService {
cleaningRebotMapper.delFloatingCreatorLink();
cleaningRebotMapper.delFloatingCreatorLinkMapping();
}
logService.cleanDisusedLog();
}
}

View File

@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
import com.google.gson.Gson;
import io.dataease.auth.api.dto.CurrentUserDto;
import io.dataease.commons.constants.ParamConstants;
import io.dataease.commons.constants.SysLogConstants;
import io.dataease.commons.utils.AuthUtils;
import io.dataease.commons.utils.BeanUtils;
@ -18,8 +19,10 @@ import io.dataease.exception.DataEaseException;
import io.dataease.ext.ExtSysLogMapper;
import io.dataease.ext.query.GridExample;
import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.SysLogExample;
import io.dataease.plugins.common.base.domain.SysLogWithBLOBs;
import io.dataease.plugins.common.base.mapper.SysLogMapper;
import io.dataease.service.system.SystemParameterService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
@ -31,14 +34,13 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class LogService {
private static final String LOG_RETENTION = "30";
private Gson gson = new Gson();
// 仪表板的额外操作 分享以及公共链接
@ -68,6 +70,69 @@ public class LogService {
@Resource
private LogManager logManager;
@Resource
private SystemParameterService systemParameterService;
public void cleanDisusedLog() {
String value = systemParameterService.getValue(ParamConstants.BASIC.LOG_TIME_OUT.getValue());
value = StringUtils.isBlank(value) ? LOG_RETENTION : value;
int logRetention = Integer.parseInt(value);
Calendar instance = Calendar.getInstance();
Calendar startInstance = (Calendar) instance.clone();
startInstance.add(Calendar.DATE, -logRetention);
startInstance.set(Calendar.HOUR_OF_DAY, 0);
startInstance.set(Calendar.MINUTE, 0);
startInstance.set(Calendar.SECOND, 0);
startInstance.set(Calendar.MILLISECOND, -1);
long timeInMillis = startInstance.getTimeInMillis();
SysLogExample example = new SysLogExample();
example.createCriteria().andTimeLessThan(timeInMillis);
sysLogMapper.deleteByExample(example);
}
public KeyGridRequest logRetentionProxy(KeyGridRequest request) {
String value = systemParameterService.getValue(ParamConstants.BASIC.LOG_TIME_OUT.getValue());
value = StringUtils.isBlank(value) ? LOG_RETENTION : value;
int logRetention = Integer.parseInt(value);
Calendar instance = Calendar.getInstance();
Calendar startInstance = (Calendar) instance.clone();
startInstance.add(Calendar.DATE, -logRetention);
startInstance.set(Calendar.HOUR_OF_DAY, 0);
startInstance.set(Calendar.MINUTE, 0);
startInstance.set(Calendar.SECOND, 0);
long startTime = startInstance.getTimeInMillis();
Calendar endInstance = (Calendar) instance.clone();
endInstance.add(Calendar.DATE, 1);
endInstance.set(Calendar.HOUR_OF_DAY, 0);
endInstance.set(Calendar.MINUTE, 0);
endInstance.set(Calendar.SECOND, 0);
long endTime = endInstance.getTimeInMillis();
List<ConditionEntity> conditions = request.getConditions();
if (CollectionUtils.isNotEmpty(conditions) && conditions.stream().anyMatch(condition -> StringUtils.equals("time", condition.getField()))) {
conditions.forEach(condition -> {
if (StringUtils.equals("time", condition.getField()) && startTime > ((List<Long>) condition.getValue()).get(0)) {
((List<Long>) condition.getValue()).set(0, startTime);
}
});
} else {
ConditionEntity conditionEntity = new ConditionEntity();
conditionEntity.setField("time");
conditionEntity.setOperator("between");
List<Long> times = new ArrayList<>();
times.add(startTime);
times.add(endTime);
conditionEntity.setValue(times);
conditions.add(conditionEntity);
}
return request;
}
public List<SysLogGridDTO> query(KeyGridRequest request) {
@ -223,7 +288,8 @@ public class LogService {
}
return results;
}
private List<FolderItem> viewPanelTypes () {
private List<FolderItem> viewPanelTypes() {
Integer[] opTypes = new Integer[]{13, 14};
Integer[] sourceTypes = new Integer[]{3};
return typesByArr(opTypes, sourceTypes);
@ -340,7 +406,7 @@ public class LogService {
//文件名称
String fileName = "DataEase操作日志";
String encodeFileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-disposition", "attachment;filename="+encodeFileName+".xls");
response.setHeader("Content-disposition", "attachment;filename=" + encodeFileName + ".xls");
wb.write(outputStream);
outputStream.flush();
outputStream.close();