From 09347035093cd2253905f689011c6b24c27ed172 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Tue, 9 Apr 2024 18:41:07 +0800 Subject: [PATCH] =?UTF-8?q?:hammer:=20=E5=AE=9A=E6=97=B6=E6=89=A7=E8=A1=8C?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asset/controller/ExecJobController.java | 15 ++- .../ops/module/asset/convert/ExecConvert.java | 22 ++++ .../define/operator/ExecJobOperatorType.java | 4 +- .../request/exec/ExecCommandExecRequest.java | 55 ++++++++++ .../request/exec/ExecJobTriggerRequest.java | 32 ++++++ .../exec/command/handler/ExecTaskHandler.java | 1 - .../handler/host/exec/job/ExecCommandJob.java | 28 +++++ .../module/asset/service/ExecJobService.java | 12 +- .../ops/module/asset/service/ExecService.java | 15 ++- .../service/impl/ExecJobServiceImpl.java | 41 +++---- .../asset/service/impl/ExecServiceImpl.java | 103 +++++++++++------- 11 files changed, 249 insertions(+), 79 deletions(-) create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecConvert.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandExecRequest.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecJobTriggerRequest.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/job/ExecCommandJob.java diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecJobController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecJobController.java index 7a9316cf..05c380aa 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecJobController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecJobController.java @@ -1,16 +1,14 @@ package com.orion.ops.module.asset.controller; import com.orion.lang.define.wrapper.DataGrid; +import com.orion.lang.define.wrapper.HttpWrapper; import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog; import com.orion.ops.framework.common.validator.group.Page; import com.orion.ops.framework.log.core.annotation.IgnoreLog; import com.orion.ops.framework.log.core.enums.IgnoreLogMode; import com.orion.ops.framework.web.core.annotation.RestWrapper; import com.orion.ops.module.asset.define.operator.ExecJobOperatorType; -import com.orion.ops.module.asset.entity.request.exec.ExecJobCreateRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobQueryRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobUpdateRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobUpdateStatusRequest; +import com.orion.ops.module.asset.entity.request.exec.*; import com.orion.ops.module.asset.entity.vo.ExecJobVO; import com.orion.ops.module.asset.service.ExecJobService; import io.swagger.v3.oas.annotations.Operation; @@ -92,5 +90,14 @@ public class ExecJobController { return execJobService.deleteExecJobById(id); } + @OperatorLog(ExecJobOperatorType.TRIGGER) + @PostMapping("/trigger") + @Operation(summary = "手动触发计划任务") + @PreAuthorize("@ss.hasPermission('asset:exec-job:trigger')") + public HttpWrapper triggerExecJob(@Validated @RequestBody ExecJobTriggerRequest request) { + execJobService.triggerExecJob(request); + return HttpWrapper.ok(); + } + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecConvert.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecConvert.java new file mode 100644 index 00000000..cea0fb80 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecConvert.java @@ -0,0 +1,22 @@ +package com.orion.ops.module.asset.convert; + +import com.orion.ops.module.asset.entity.request.exec.ExecCommandExecRequest; +import com.orion.ops.module.asset.entity.request.exec.ExecCommandRequest; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 批量执行 内部对象转换器 + * + * @author Jiahang Li + * @version 1.0.3 + * @since 2024-3-28 12:03 + */ +@Mapper +public interface ExecConvert { + + ExecConvert MAPPER = Mappers.getMapper(ExecConvert.class); + + ExecCommandExecRequest to(ExecCommandRequest request); + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java index ca46cb50..2f2458a0 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/ExecJobOperatorType.java @@ -22,7 +22,7 @@ public class ExecJobOperatorType extends InitializingOperatorTypes { public static final String UPDATE_STATUS = "exec-job:update-status"; - public static final String EXEC = "exec-job:exec"; + public static final String TRIGGER = "exec-job:trigger"; public static final String DELETE = "exec-job:delete"; @@ -32,7 +32,7 @@ public class ExecJobOperatorType extends InitializingOperatorTypes { new OperatorType(L, CREATE, "创建计划任务 ${name}"), new OperatorType(M, UPDATE, "更新计划任务 ${before}"), new OperatorType(M, UPDATE_STATUS, "${statusName}计划任务 ${name}"), - new OperatorType(M, EXEC, "手动执行计划任务 ${name}"), + new OperatorType(M, TRIGGER, "手动触发计划任务 ${name}"), new OperatorType(H, DELETE, "删除计划任务 ${name}"), }; } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandExecRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandExecRequest.java new file mode 100644 index 00000000..5db1a782 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandExecRequest.java @@ -0,0 +1,55 @@ +package com.orion.ops.module.asset.entity.request.exec; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 批量执行命令 请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/3/11 11:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "ExecCommandExecRequest", description = "批量执行命令 请求对象") +public class ExecCommandExecRequest { + + @Schema(description = "执行用户id") + private Long userId; + + @Schema(description = "执行用户名") + private String username; + + @Schema(description = "执行来源") + private String source; + + @Schema(description = "来源id") + private Long sourceId; + + @Schema(description = "执行序列") + private Integer execSeq; + + @Schema(description = "执行描述") + private String description; + + @Schema(description = "超时时间") + private Integer timeout; + + @Schema(description = "执行命令") + private String command; + + @Schema(description = "参数 schema") + private String parameterSchema; + + @Schema(description = "执行主机") + private List hostIdList; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecJobTriggerRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecJobTriggerRequest.java new file mode 100644 index 00000000..03303431 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecJobTriggerRequest.java @@ -0,0 +1,32 @@ +package com.orion.ops.module.asset.entity.request.exec; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 计划执行任务 手动触发请求对象 + * + * @author Jiahang Li + * @version 1.0.3 + * @since 2024-3-28 12:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "ExecJobCreateRequest", description = "计划执行任务 手动触发请求对象") +public class ExecJobTriggerRequest implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull + @Schema(description = "id") + private Long id; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java index 325270da..de98bda7 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/command/handler/ExecTaskHandler.java @@ -88,7 +88,6 @@ public class ExecTaskHandler implements IExecTaskHandler { private void runHostCommand(List hosts) throws Exception { // 超时检查 if (execCommand.getTimeout() != 0) { - // TODO test this.timeoutChecker = TimeoutCheckers.create(); AssetThreadPools.TIMEOUT_CHECK.execute(this.timeoutChecker); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/job/ExecCommandJob.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/job/ExecCommandJob.java new file mode 100644 index 00000000..a6c8ecb1 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/exec/job/ExecCommandJob.java @@ -0,0 +1,28 @@ +package com.orion.ops.module.asset.handler.host.exec.job; + +import com.orion.ops.framework.common.constant.FieldConst; +import com.orion.ops.module.asset.service.ExecJobService; +import com.orion.spring.SpringHolder; +import lombok.extern.slf4j.Slf4j; +import org.quartz.Job; +import org.quartz.JobExecutionContext; + +/** + * 计划执行命令任务 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/4/9 18:33 + */ +@Slf4j +public class ExecCommandJob implements Job { + + private static final ExecJobService execJobService = SpringHolder.getBean(ExecJobService.class); + + @Override + public void execute(JobExecutionContext context) { + long jobId = context.getMergedJobDataMap().getLong(FieldConst.KEY); + // TODO + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecJobService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecJobService.java index d674eab7..f79545ec 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecJobService.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecJobService.java @@ -1,10 +1,7 @@ package com.orion.ops.module.asset.service; import com.orion.lang.define.wrapper.DataGrid; -import com.orion.ops.module.asset.entity.request.exec.ExecJobCreateRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobQueryRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobUpdateRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobUpdateStatusRequest; +import com.orion.ops.module.asset.entity.request.exec.*; import com.orion.ops.module.asset.entity.vo.ExecJobVO; /** @@ -72,4 +69,11 @@ public interface ExecJobService { */ Integer deleteExecJobById(Long id); + /** + * 手动触发任务 + * + * @param request request + */ + void triggerExecJob(ExecJobTriggerRequest request); + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecService.java index 6afb18b0..5c3e45b1 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecService.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecService.java @@ -1,6 +1,7 @@ package com.orion.ops.module.asset.service; import com.orion.ops.module.asset.entity.dto.ExecLogTailDTO; +import com.orion.ops.module.asset.entity.request.exec.ExecCommandExecRequest; import com.orion.ops.module.asset.entity.request.exec.ExecCommandRequest; import com.orion.ops.module.asset.entity.request.exec.ExecLogTailRequest; import com.orion.ops.module.asset.entity.vo.ExecLogVO; @@ -25,12 +26,20 @@ public interface ExecService { ExecLogVO execCommand(ExecCommandRequest request); /** - * 重新执行命令 + * 批量执行命令 * - * @param id id + * @param request request * @return result */ - ExecLogVO reExecCommand(Long id); + ExecLogVO execCommandWithSource(ExecCommandExecRequest request); + + /** + * 重新执行命令 + * + * @param logId logId + * @return result + */ + ExecLogVO reExecCommand(Long logId); /** * 中断命令执行 diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecJobServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecJobServiceImpl.java index 4f36865c..0c4b4b9f 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecJobServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecJobServiceImpl.java @@ -5,11 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.Booleans; import com.orion.lang.utils.Strings; -import com.orion.lang.utils.time.Dates; import com.orion.lang.utils.time.cron.Cron; import com.orion.ops.framework.biz.operator.log.core.utils.OperatorLogs; import com.orion.ops.framework.common.constant.ErrorMessage; -import com.orion.ops.framework.common.constant.FieldConst; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.job.core.utils.QuartzUtils; import com.orion.ops.framework.security.core.utils.SecurityUtils; @@ -18,19 +16,16 @@ import com.orion.ops.module.asset.dao.ExecJobDAO; import com.orion.ops.module.asset.dao.ExecLogDAO; import com.orion.ops.module.asset.entity.domain.ExecJobDO; import com.orion.ops.module.asset.entity.domain.ExecLogDO; -import com.orion.ops.module.asset.entity.request.exec.ExecJobCreateRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobQueryRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobUpdateRequest; -import com.orion.ops.module.asset.entity.request.exec.ExecJobUpdateStatusRequest; +import com.orion.ops.module.asset.entity.request.exec.*; import com.orion.ops.module.asset.entity.vo.ExecJobVO; import com.orion.ops.module.asset.enums.ExecJobStatusEnum; import com.orion.ops.module.asset.enums.HostConfigTypeEnum; +import com.orion.ops.module.asset.handler.host.exec.job.ExecCommandJob; import com.orion.ops.module.asset.service.AssetAuthorizedDataService; import com.orion.ops.module.asset.service.ExecJobHostService; import com.orion.ops.module.asset.service.ExecJobService; +import com.orion.ops.module.asset.service.ExecService; import lombok.extern.slf4j.Slf4j; -import org.quartz.Job; -import org.quartz.JobExecutionContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,19 +50,25 @@ public class ExecJobServiceImpl implements ExecJobService { // TODO 测试 SSH 禁用后是什么样子的 // TODO 操作日志 菜单 // TODO 执行日志抽象 - // TODO 任务分组 // TODO 手动执行 测试 quartz + // 内置参数 params.put("source", request.getSource()); + // params.put("sourceId", request.getSourceId()); + // params.put("seq", request.getExecSeq()); + private static final String QUARTZ_TYPE = "Exec"; @Resource private ExecJobDAO execJobDAO; + @Resource + private ExecLogDAO execLogDAO; + @Resource private ExecJobHostService execJobHostService; @Resource - private ExecLogDAO execLogDAO; + private ExecService execService; @Resource private AssetAuthorizedDataService assetAuthorizedDataService; @@ -228,6 +229,12 @@ public class ExecJobServiceImpl implements ExecJobService { return effect; } + @Override + public void triggerExecJob(ExecJobTriggerRequest request) { + + + } + /** * 检查对象是否存在 * @@ -273,10 +280,9 @@ public class ExecJobServiceImpl implements ExecJobService { if (delete) { QuartzUtils.deleteJob(QUARTZ_TYPE, id); } - // FIXME // 启动 quartz job if (add) { - QuartzUtils.addJob(QUARTZ_TYPE, id, record.getExpression(), record.getName(), TestJob.class); + QuartzUtils.addJob(QUARTZ_TYPE, id, record.getExpression(), record.getName(), ExecCommandJob.class); } } @@ -293,15 +299,4 @@ public class ExecJobServiceImpl implements ExecJobService { } } - // FIXME - static class TestJob implements Job { - - @Override - public void execute(JobExecutionContext context) { - System.out.println("----------------------"); - System.out.println(Dates.current()); - System.out.println(context.getMergedJobDataMap().getLong(FieldConst.KEY)); - } - } - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecServiceImpl.java index 6ee05be6..74d8eb2b 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecServiceImpl.java @@ -23,6 +23,7 @@ import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.redis.core.utils.RedisStrings; import com.orion.ops.framework.security.core.utils.SecurityUtils; +import com.orion.ops.module.asset.convert.ExecConvert; import com.orion.ops.module.asset.convert.ExecHostLogConvert; import com.orion.ops.module.asset.convert.ExecLogConvert; import com.orion.ops.module.asset.dao.ExecHostLogDAO; @@ -35,6 +36,7 @@ import com.orion.ops.module.asset.entity.domain.HostDO; import com.orion.ops.module.asset.entity.dto.ExecHostLogTailDTO; import com.orion.ops.module.asset.entity.dto.ExecLogTailDTO; import com.orion.ops.module.asset.entity.dto.ExecParameterSchemaDTO; +import com.orion.ops.module.asset.entity.request.exec.ExecCommandExecRequest; import com.orion.ops.module.asset.entity.request.exec.ExecCommandRequest; import com.orion.ops.module.asset.entity.request.exec.ExecLogTailRequest; import com.orion.ops.module.asset.entity.vo.ExecHostLogVO; @@ -115,12 +117,27 @@ public class ExecServiceImpl implements ExecService { hostIdList.removeIf(s -> !authorizedHostIdList.contains(s)); log.info("ExecService.startExecCommand host hostList: {}", hostIdList); Valid.notEmpty(hostIdList, ErrorMessage.CHECK_AUTHORIZED_HOST); + // 执行命令 + ExecCommandExecRequest execRequest = ExecConvert.MAPPER.to(request); + execRequest.setUserId(userId); + execRequest.setUsername(user.getUsername()); + execRequest.setSource(ExecSourceEnum.BATCH.name()); + return this.execCommandWithSource(execRequest); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ExecLogVO execCommandWithSource(ExecCommandExecRequest request) { + String command = request.getCommand(); + List hostIdList = request.getHostIdList(); List hosts = hostDAO.selectBatchIds(hostIdList); // 插入日志 ExecLogDO execLog = ExecLogDO.builder() - .userId(userId) - .username(user.getUsername()) - .source(ExecSourceEnum.BATCH.name()) + .userId(request.getUserId()) + .username(request.getUsername()) + .source(request.getSource()) + .sourceId(request.getSourceId()) + .execSeq(request.getExecSeq()) .description(Strings.ifBlank(request.getDescription(), () -> { if (command.length() < DESC_OMIT + 3) { return command; @@ -136,7 +153,7 @@ public class ExecServiceImpl implements ExecService { execLogDAO.insert(execLog); Long execId = execLog.getId(); // 获取内置参数 - Map builtinsParams = this.getBaseBuiltinsParams(user, execId, request.getParameterSchema()); + Map builtinsParams = this.getBaseBuiltinsParams(execId, request); // 设置主机日志 List execHostLogs = hosts.stream() .map(s -> { @@ -154,7 +171,7 @@ public class ExecServiceImpl implements ExecService { }).collect(Collectors.toList()); execHostLogDAO.insertBatch(execHostLogs); // 操作日志 - OperatorLogs.add(OperatorLogs.ID, execId); + OperatorLogs.add(OperatorLogs.LOG_ID, execId); // 开始执行 this.startExec(execLog, execHostLogs); // 返回 @@ -405,52 +422,24 @@ public class ExecServiceImpl implements ExecService { ExecTaskExecutors.start(exec); } - /** - * 构建日志路径 - * - * @param logId logId - * @param hostId hostId - * @return logPath - */ - private String buildLogPath(Long logId, Long hostId) { - String logFile = "/exec/" + logId + "/" + logId + "_" + hostId + ".log"; - return logsFileClient.getReturnPath(logFile); - } - - /** - * 提取参数 - * - * @param parameterSchema parameterSchema - * @return params - */ - private Map extraSchemaParams(String parameterSchema) { - List schemaList = JSON.parseArray(parameterSchema, ExecParameterSchemaDTO.class); - if (Lists.isEmpty(schemaList)) { - return Maps.newMap(); - } - // 解析参数 - return schemaList.stream() - .collect(Collectors.toMap(ExecParameterSchemaDTO::getName, - ExecParameterSchemaDTO::getValue, - Functions.right())); - } - /** * 获取基础内置参数 * - * @param user user - * @param execId execId - * @param parameterSchema parameterSchema + * @param execId execId + * @param request request * @return params */ - private Map getBaseBuiltinsParams(LoginUser user, Long execId, String parameterSchema) { + private Map getBaseBuiltinsParams(Long execId, ExecCommandExecRequest request) { String uuid = UUIds.random(); Date date = new Date(); // 输入参数 - Map params = this.extraSchemaParams(parameterSchema); + Map params = this.extraSchemaParams(request.getParameterSchema()); // 添加内置参数 - params.put("userId", user.getId()); - params.put("username", user.getId()); + params.put("userId", request.getUserId()); + params.put("username", request.getUsername()); + params.put("source", request.getSource()); + params.put("sourceId", request.getSourceId()); + params.put("seq", request.getExecSeq()); params.put("execId", execId); params.put("uuid", uuid); params.put("uuidShort", uuid.replace("-", Strings.EMPTY)); @@ -480,4 +469,34 @@ public class ExecServiceImpl implements ExecService { return params; } + /** + * 提取参数 + * + * @param parameterSchema parameterSchema + * @return params + */ + private Map extraSchemaParams(String parameterSchema) { + List schemaList = JSON.parseArray(parameterSchema, ExecParameterSchemaDTO.class); + if (Lists.isEmpty(schemaList)) { + return Maps.newMap(); + } + // 解析参数 + return schemaList.stream() + .collect(Collectors.toMap(ExecParameterSchemaDTO::getName, + ExecParameterSchemaDTO::getValue, + Functions.right())); + } + + /** + * 构建日志路径 + * + * @param logId logId + * @param hostId hostId + * @return logPath + */ + private String buildLogPath(Long logId, Long hostId) { + String logFile = "/exec/" + logId + "/" + logId + "_" + hostId + ".log"; + return logsFileClient.getReturnPath(logFile); + } + }