打印了JENKINS节点日志

This commit is contained in:
dengqichen 2025-11-07 17:50:06 +08:00
parent 3b77cf7539
commit af95532706
6 changed files with 17 additions and 152 deletions

View File

@ -15,10 +15,10 @@ import com.qqchen.deploy.backend.system.repository.IUserRepository;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceStartRequest;
import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeLogDTO;
import com.qqchen.deploy.backend.workflow.dto.inputmapping.ApprovalInputMapping;
import com.qqchen.deploy.backend.workflow.dto.outputs.ApprovalOutputs;
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog;
import com.qqchen.deploy.backend.workflow.model.NodeContext;
import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository;
import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService;
@ -1028,7 +1028,7 @@ public class DeployServiceImpl implements IDeployService {
result.setNodeId(nodeId);
// 查询日志
List<WorkflowNodeLog> logs = workflowNodeLogService.getNodeLogs(processInstanceId, nodeId);
List<WorkflowNodeLogDTO> logs = workflowNodeLogService.getNodeLogs(processInstanceId, nodeId);
if (logs.isEmpty()) {
// 判断是过期还是还没有日志

View File

@ -1,66 +0,0 @@
package com.qqchen.deploy.backend.workflow.entity;
import com.qqchen.deploy.backend.framework.domain.Entity;
import com.qqchen.deploy.backend.workflow.enums.LogLevel;
import com.qqchen.deploy.backend.workflow.enums.LogSource;
import jakarta.persistence.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 工作流节点日志实体
*
* @author qqchen
* @since 2025-11-03
*/
@Data
@Table(name = "workflow_node_log")
@jakarta.persistence.Entity
@EqualsAndHashCode(callSuper = true)
public class WorkflowNodeLog extends Entity<Long> {
/**
* 流程实例IDFlowable processInstanceId
*/
@Column(name = "process_instance_id", nullable = false, length = 64)
private String processInstanceId;
/**
* 节点IDFlowable nodeId, 例如: sid_xxx
*/
@Column(name = "node_id", nullable = false, length = 64)
private String nodeId;
/**
* 日志序号保证同一节点内日志有序从1开始递增
*/
@Column(name = "sequence_id", nullable = false)
private Long sequenceId;
/**
* 时间戳Unix毫秒
*/
@Column(nullable = false)
private Long timestamp;
/**
* 日志级别INFO, WARN, ERROR, DEBUG
*/
@Column(nullable = false, length = 10)
@Enumerated(EnumType.STRING)
private LogLevel level;
/**
* 日志来源JENKINS, FLOWABLE, SHELL, NOTIFICATION
*/
@Column(nullable = false, length = 20)
@Enumerated(EnumType.STRING)
private LogSource source;
/**
* 日志内容
*/
@Column(columnDefinition = "TEXT", nullable = false)
private String message;
}

View File

@ -1,49 +0,0 @@
package com.qqchen.deploy.backend.workflow.repository;
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 工作流节点日志 Repository
*
* @author qqchen
* @since 2025-11-03
*/
@Repository
public interface IWorkflowNodeLogRepository extends IBaseRepository<WorkflowNodeLog, Long> {
/**
* 根据流程实例ID和节点ID查询日志按序号排序
*/
List<WorkflowNodeLog> findByProcessInstanceIdAndNodeIdOrderBySequenceIdAsc(
String processInstanceId, String nodeId);
/**
* 根据流程实例ID和节点ID分页查询日志
*/
Page<WorkflowNodeLog> findByProcessInstanceIdAndNodeIdOrderBySequenceIdAsc(
String processInstanceId, String nodeId, Pageable pageable);
/**
* 根据流程实例ID查询所有节点的日志
*/
List<WorkflowNodeLog> findByProcessInstanceIdOrderBySequenceIdAsc(String processInstanceId);
/**
* 删除节点的所有日志
*/
void deleteByProcessInstanceIdAndNodeId(String processInstanceId, String nodeId);
/**
* 统计节点的日志数量
*/
long countByProcessInstanceIdAndNodeId(String processInstanceId, String nodeId);
}

View File

@ -1,6 +1,6 @@
package com.qqchen.deploy.backend.workflow.service;
import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog;
import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeLogDTO;
import com.qqchen.deploy.backend.workflow.enums.LogLevel;
import com.qqchen.deploy.backend.workflow.enums.LogSource;
import org.springframework.data.domain.Page;
@ -45,12 +45,12 @@ public interface IWorkflowNodeLogService {
/**
* 查询节点的所有日志
*/
List<WorkflowNodeLog> getNodeLogs(String processInstanceId, String nodeId);
List<WorkflowNodeLogDTO> getNodeLogs(String processInstanceId, String nodeId);
/**
* 分页查询节点日志
*/
Page<WorkflowNodeLog> getNodeLogs(String processInstanceId, String nodeId, Pageable pageable);
Page<WorkflowNodeLogDTO> getNodeLogs(String processInstanceId, String nodeId, Pageable pageable);
/**
* 删除节点日志

View File

@ -1,7 +1,7 @@
package com.qqchen.deploy.backend.workflow.service.impl;
import com.qqchen.deploy.backend.framework.utils.RedisUtil;
import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeLog;
import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeLogDTO;
import com.qqchen.deploy.backend.workflow.enums.LogLevel;
import com.qqchen.deploy.backend.workflow.enums.LogSource;
import com.qqchen.deploy.backend.workflow.service.IWorkflowNodeLogService;
@ -122,7 +122,7 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService {
}
@Override
public List<WorkflowNodeLog> getNodeLogs(String processInstanceId, String nodeId) {
public List<WorkflowNodeLogDTO> getNodeLogs(String processInstanceId, String nodeId) {
try {
String streamKey = buildStreamKey(processInstanceId, nodeId);
@ -139,7 +139,7 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService {
return Collections.emptyList();
}
// 转换为实体
// 转换为 DTO
return records.stream()
.map(record -> convertToWorkflowNodeLog(processInstanceId, nodeId, record))
.collect(Collectors.toList());
@ -152,8 +152,8 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService {
}
@Override
public Page<WorkflowNodeLog> getNodeLogs(String processInstanceId, String nodeId, Pageable pageable) {
List<WorkflowNodeLog> allLogs = getNodeLogs(processInstanceId, nodeId);
public Page<WorkflowNodeLogDTO> getNodeLogs(String processInstanceId, String nodeId, Pageable pageable) {
List<WorkflowNodeLogDTO> allLogs = getNodeLogs(processInstanceId, nodeId);
int start = (int) pageable.getOffset();
int end = Math.min(start + pageable.getPageSize(), allLogs.size());
@ -162,7 +162,7 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService {
return new PageImpl<>(Collections.emptyList(), pageable, allLogs.size());
}
List<WorkflowNodeLog> pageContent = allLogs.subList(start, end);
List<WorkflowNodeLogDTO> pageContent = allLogs.subList(start, end);
return new PageImpl<>(pageContent, pageable, allLogs.size());
}
@ -179,11 +179,11 @@ public class WorkflowNodeLogServiceImpl implements IWorkflowNodeLogService {
}
/**
* Redis Stream Record 转换为 WorkflowNodeLog 实体
* Redis Stream Record 转换为 WorkflowNodeLogDTO
*/
private WorkflowNodeLog convertToWorkflowNodeLog(String processInstanceId, String nodeId,
private WorkflowNodeLogDTO convertToWorkflowNodeLog(String processInstanceId, String nodeId,
MapRecord<String, Object, Object> record) {
WorkflowNodeLog log = new WorkflowNodeLog();
WorkflowNodeLogDTO log = new WorkflowNodeLogDTO();
log.setProcessInstanceId(processInstanceId);
log.setNodeId(nodeId);

View File

@ -659,29 +659,9 @@ CREATE TABLE workflow_node_instance
CONSTRAINT FK_workflow_node_instance_instance FOREIGN KEY (workflow_instance_id) REFERENCES workflow_instance (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点实例表';
-- 工作流节点日志表
CREATE TABLE workflow_node_log
(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(255) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0未删除1已删除',
update_by VARCHAR(255) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
process_instance_id VARCHAR(64) NOT NULL COMMENT '流程实例IDFlowable processInstanceId',
node_id VARCHAR(64) NOT NULL COMMENT '节点IDFlowable nodeId, 例如: sid_xxx',
sequence_id BIGINT NOT NULL COMMENT '日志序号保证同一节点内日志有序从1开始递增',
timestamp BIGINT NOT NULL COMMENT '时间戳Unix毫秒',
level VARCHAR(10) NOT NULL COMMENT '日志级别INFO, WARN, ERROR, DEBUG',
source VARCHAR(20) NOT NULL COMMENT '日志来源JENKINS, FLOWABLE, SHELL, NOTIFICATION',
message TEXT NOT NULL COMMENT '日志内容',
INDEX idx_process_node_seq (process_instance_id, node_id, sequence_id),
INDEX idx_process_seq (process_instance_id, sequence_id),
INDEX idx_timestamp (timestamp)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点日志表';
-- ⚠️ workflow_node_log 表已废弃
-- 日志现在存储在 Redis Stream 中,保留 7 天后自动删除
-- 详见 WorkflowNodeLogServiceImpl基于 RedisUtil
-- --------------------------------------------------------------------------------------
-- 项目管理相关表