feat: 2.6.0

1.优化工作流实时日志查询
This commit is contained in:
byteblogs168 2024-01-11 15:42:51 +08:00
parent 007e783646
commit 2742fd0ff1
6 changed files with 74 additions and 51 deletions

View File

@ -18,6 +18,7 @@ import com.aizuda.easy.retry.server.common.util.DateUtils;
import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO;
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
import com.aizuda.easy.retry.server.model.dto.RetryTaskDTO;
import com.google.common.collect.Lists;
import org.slf4j.MDC;
import org.springframework.util.CollectionUtils;
@ -98,7 +99,7 @@ public class EasyRetryServerLogbackAppender<E> extends UnsynchronizedAppenderBas
.stream()
.filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue()))
.collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue));
jobLogDTO.setMessage(JsonUtil.toJsonString(messageMap));
jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap)));
jobLogDTO.setTaskId(logMetaDTO.getTaskId());
jobLogDTO.setJobId(logMetaDTO.getJobId());
jobLogDTO.setGroupName(logMetaDTO.getGroupName());

View File

@ -26,7 +26,7 @@ public class JobLogController {
@GetMapping("/log/list")
@LoginRequired
public PageResult<List<JobLogResponseVO>> getJobLogPage(JobLogQueryVO jobQueryVO) {
public JobLogResponseVO getJobLogPage(JobLogQueryVO jobQueryVO) {
return jobLogService.getJobLogPage(jobQueryVO);
}

View File

@ -12,7 +12,9 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class JobLogQueryVO extends BaseQueryVO {
private Long startId;
private Long jobId;
private Long taskBatchId;
private Long taskId;
private Integer fromIndex;
}

View File

@ -3,6 +3,7 @@ package com.aizuda.easy.retry.server.web.model.response;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author: www.byteblogs.com
@ -14,41 +15,12 @@ public class JobLogResponseVO {
private Long id;
private Long key;
private Long nextStartId;
/**
* 组名称
*/
private String groupName;
private List message;
/**
* 任务信息id
*/
private Long jobId;
private boolean isFinished;
/**
* 任务实例id
*/
private Long taskBatchId;
/**
* 调度任务id
*/
private Long taskId;
/**
* 创建时间
*/
private LocalDateTime createDt;
/**
* 客户端信息
*/
private String clientAddress;
/**
* 调度信息
*/
private String message;
private Integer fromIndex;
}

View File

@ -13,5 +13,5 @@ import java.util.List;
*/
public interface JobLogService {
PageResult<List<JobLogResponseVO>> getJobLogPage(JobLogQueryVO jobQueryVO);
JobLogResponseVO getJobLogPage(JobLogQueryVO jobQueryVO);
}

View File

@ -1,5 +1,7 @@
package com.aizuda.easy.retry.server.web.service.impl;
import cn.hutool.core.util.ArrayUtil;
import com.aizuda.easy.retry.common.core.util.JsonUtil;
import com.aizuda.easy.retry.server.web.model.base.PageResult;
import com.aizuda.easy.retry.server.web.model.request.JobLogQueryVO;
import com.aizuda.easy.retry.server.web.model.response.JobLogResponseVO;
@ -9,11 +11,16 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobLogMessag
import com.aizuda.easy.retry.template.datasource.persistence.po.JobLogMessage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author: www.byteblogs.com
@ -27,26 +34,67 @@ public class JobLogServiceImpl implements JobLogService {
private JobLogMessageMapper jobLogMessageMapper;
@Override
public PageResult<List<JobLogResponseVO>> getJobLogPage(final JobLogQueryVO queryVO) {
public JobLogResponseVO getJobLogPage(final JobLogQueryVO queryVO) {
PageDTO<JobLogMessage> pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize());
PageDTO<JobLogMessage> pageDTO = new PageDTO<>(1, queryVO.getSize());
LambdaQueryWrapper<JobLogMessage> queryWrapper = new LambdaQueryWrapper<>();
if (Objects.nonNull(queryVO.getJobId())) {
queryWrapper.eq(JobLogMessage::getJobId, queryVO.getJobId());
}
queryWrapper
.select(JobLogMessage::getId, JobLogMessage::getLogNum)
.ge(JobLogMessage::getId, queryVO.getStartId())
.eq(JobLogMessage::getJobId, queryVO.getJobId())
.eq(JobLogMessage::getTaskBatchId, queryVO.getTaskBatchId())
.eq(JobLogMessage::getTaskId, queryVO.getTaskId());
if (Objects.nonNull(queryVO.getTaskBatchId())) {
queryWrapper.eq(JobLogMessage::getTaskBatchId, queryVO.getTaskBatchId());
}
if (Objects.nonNull(queryVO.getTaskId())) {
queryWrapper.eq(JobLogMessage::getTaskId, queryVO.getTaskId());
}
queryWrapper.orderByDesc(JobLogMessage::getId);
queryWrapper.orderByAsc(JobLogMessage::getRealTime).orderByDesc(JobLogMessage::getId);
PageDTO<JobLogMessage> selectPage = jobLogMessageMapper.selectPage(pageDTO, queryWrapper);
List<JobLogMessage> records = selectPage.getRecords();
if (CollectionUtils.isEmpty(records)) {
JobLogResponseVO jobLogResponseVO = new JobLogResponseVO();
jobLogResponseVO.setFinished(Boolean.TRUE);
return jobLogResponseVO;
}
return new PageResult<>(pageDTO, JobLogResponseVOConverter.INSTANCE.toJobLogResponseVOs(selectPage.getRecords()));
Integer fromIndex = Optional.ofNullable(queryVO.getFromIndex()).orElse(0);
JobLogMessage firstRecord = records.get(0);
List<Long> ids = Lists.newArrayList(firstRecord.getId());
int total = firstRecord.getLogNum() - fromIndex;
for (int i = 1; i < records.size(); i++) {
JobLogMessage record = records.get(i);
if (total + record.getLogNum() > queryVO.getSize()) {
break;
}
total += record.getLogNum();
ids.add(record.getId());
}
long nextStartId = 0;
List<String> messages = Lists.newArrayList();
List<JobLogMessage> jobLogMessages = jobLogMessageMapper.selectBatchIds(ids);
for (final JobLogMessage jobLogMessage : jobLogMessages) {
List<String> originalList = JsonUtil.parseObject(jobLogMessage.getMessage(), List.class);
int size = originalList.size() - fromIndex;
List<String> pageList = originalList.stream().skip(fromIndex).limit(queryVO.getSize())
.collect(Collectors.toList());
if (messages.size() + size >= queryVO.getSize()) {
messages.addAll(pageList);
nextStartId = jobLogMessage.getId();
fromIndex = Math.min(fromIndex + queryVO.getSize(), originalList.size() - 1);
break;
}
messages.addAll(pageList);
nextStartId = jobLogMessage.getId() + 1;
fromIndex = 0;
}
JobLogResponseVO jobLogResponseVO = new JobLogResponseVO();
jobLogResponseVO.setMessage(messages);
jobLogResponseVO.setNextStartId(nextStartId);
jobLogResponseVO.setFromIndex(fromIndex);
return jobLogResponseVO;
}
}