From 386e440f029ec7031fac751432d1a1195c018a78 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Wed, 20 Mar 2024 20:52:40 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E4=BC=98=E5=8C=96=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asset/controller/ExecController.java | 6 +- .../asset/controller/ExecLogController.java | 8 ++ .../asset/entity/vo/ExecCommandHostVO.java | 40 ---------- .../module/asset/entity/vo/ExecCommandVO.java | 35 --------- .../ops/module/asset/entity/vo/ExecLogVO.java | 3 + .../module/asset/service/ExecLogService.java | 9 +++ .../ops/module/asset/service/ExecService.java | 6 +- .../service/impl/ExecLogServiceImpl.java | 18 +++++ .../asset/service/impl/ExecServiceImpl.java | 28 +++---- orion-ops-ui/src/api/exec/exec-log.ts | 8 ++ orion-ops-ui/src/api/exec/exec.ts | 31 +------- .../components/exec/log/panel-modal/index.vue | 77 +++++++++++++++++++ .../components/exec/log/panel/exec-host.vue | 4 +- .../src/components/exec/log/panel/index.vue | 18 +++-- .../components/exec/log/panel/log-item.vue | 4 +- .../components/exec/log/panel/log-view.vue | 4 +- .../src/views/exec/exec-command/index.vue | 4 +- .../exec-log/components/exec-log-table.vue | 4 +- .../src/views/exec/exec-log/index.vue | 14 ++++ .../components/exec-template-exec-drawer.vue | 21 +++-- .../src/views/exec/exec-template/index.vue | 13 +++- 21 files changed, 196 insertions(+), 159 deletions(-) delete mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandHostVO.java delete mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandVO.java create mode 100644 orion-ops-ui/src/components/exec/log/panel-modal/index.vue diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecController.java index 4cda0cfc..287a5cc3 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecController.java @@ -9,7 +9,7 @@ import com.orion.ops.module.asset.entity.request.exec.ExecCommandRequest; import com.orion.ops.module.asset.entity.request.exec.ExecInterruptRequest; import com.orion.ops.module.asset.entity.request.exec.ExecLogTailRequest; import com.orion.ops.module.asset.entity.request.exec.ReExecCommandRequest; -import com.orion.ops.module.asset.entity.vo.ExecCommandVO; +import com.orion.ops.module.asset.entity.vo.ExecLogVO; import com.orion.ops.module.asset.service.ExecService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -44,7 +44,7 @@ public class ExecController { @PostMapping("/exec-command") @Operation(summary = "批量执行命令") @PreAuthorize("@ss.hasPermission('asset:exec:exec-command')") - public ExecCommandVO execCommand(@Validated @RequestBody ExecCommandRequest request) { + public ExecLogVO execCommand(@Validated @RequestBody ExecCommandRequest request) { return execService.execCommand(request); } @@ -52,7 +52,7 @@ public class ExecController { @PostMapping("/re-exec-command") @Operation(summary = "重新执行命令") @PreAuthorize("@ss.hasPermission('asset:exec:exec-command')") - public ExecCommandVO reExecCommand(@Validated @RequestBody ReExecCommandRequest request) { + public ExecLogVO reExecCommand(@Validated @RequestBody ReExecCommandRequest request) { return execService.reExecCommand(request.getLogId()); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecLogController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecLogController.java index 62278bc8..a1a18353 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecLogController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecLogController.java @@ -57,6 +57,14 @@ public class ExecLogController { return execLogService.getExecLogPage(request); } + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/get") + @Operation(summary = "查询执行日志") + @PreAuthorize("@ss.hasPermission('asset:exec-log:query')") + public ExecLogVO getExecLog(@RequestParam("id") Long id) { + return execLogService.getExecLog(id, ExecSourceEnum.BATCH.name()); + } + @IgnoreLog(IgnoreLogMode.RET) @GetMapping("/host-list") @Operation(summary = "查询全部执行主机日志") diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandHostVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandHostVO.java deleted file mode 100644 index c1a42df6..00000000 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandHostVO.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.orion.ops.module.asset.entity.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - * 命令执行主机 视图响应对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2024/3/11 14:57 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "ExecCommandHostVO", description = "命令执行主机 视图响应对象") -public class ExecCommandHostVO implements Serializable { - - @Schema(description = "id") - private Long id; - - @Schema(description = "hostId") - private Long hostId; - - @Schema(description = "主机名称") - private String hostName; - - @Schema(description = "主机地址") - private String hostAddress; - - @Schema(description = "执行状态") - private String status; - -} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandVO.java deleted file mode 100644 index cda023d4..00000000 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecCommandVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.orion.ops.module.asset.entity.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.util.List; - -/** - * 命令执行 视图响应对象 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2024/3/11 14:57 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "ExecCommandVO", description = "命令执行 视图响应对象") -public class ExecCommandVO implements Serializable { - - @Schema(description = "id") - private Long id; - - @Schema(description = "执行状态") - private String status; - - @Schema(description = "主机 id 映射") - private List hosts; - -} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecLogVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecLogVO.java index bc44e65e..2e754cf5 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecLogVO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/ExecLogVO.java @@ -59,4 +59,7 @@ public class ExecLogVO implements Serializable { @Schema(description = "执行主机id") private List hostIdList; + @Schema(description = "执行主机") + private List hosts; + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecLogService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecLogService.java index ab099fa5..150b02cc 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecLogService.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecLogService.java @@ -24,6 +24,15 @@ public interface ExecLogService { */ DataGrid getExecLogPage(ExecLogQueryRequest request); + /** + * 获取执行日志 + * + * @param id id + * @param source source + * @return row + */ + ExecLogVO getExecLog(Long id, String source); + /** * 获取执行历史 * 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 a1ebaa39..6afb18b0 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 @@ -3,7 +3,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.ExecCommandRequest; import com.orion.ops.module.asset.entity.request.exec.ExecLogTailRequest; -import com.orion.ops.module.asset.entity.vo.ExecCommandVO; +import com.orion.ops.module.asset.entity.vo.ExecLogVO; import javax.servlet.http.HttpServletResponse; @@ -22,7 +22,7 @@ public interface ExecService { * @param request request * @return result */ - ExecCommandVO execCommand(ExecCommandRequest request); + ExecLogVO execCommand(ExecCommandRequest request); /** * 重新执行命令 @@ -30,7 +30,7 @@ public interface ExecService { * @param id id * @return result */ - ExecCommandVO reExecCommand(Long id); + ExecLogVO reExecCommand(Long id); /** * 中断命令执行 diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecLogServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecLogServiceImpl.java index 87a72df3..a4d98478 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecLogServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecLogServiceImpl.java @@ -65,6 +65,24 @@ public class ExecLogServiceImpl implements ExecLogService { .dataGrid(ExecLogConvert.MAPPER::to); } + @Override + public ExecLogVO getExecLog(Long id, String source) { + // 查询执行日志 + ExecLogDO row = execLogDAO.of() + .createValidateWrapper() + .eq(ExecLogDO::getId, id) + .eq(ExecLogDO::getSource, source) + .then() + .getOne(); + Valid.notNull(row, ErrorMessage.LOG_ABSENT); + // 查询执行主机 + List hosts = execHostLogDAO.selectByLogId(id); + // 返回 + ExecLogVO vo = ExecLogConvert.MAPPER.to(row); + vo.setHosts(ExecHostLogConvert.MAPPER.to(hosts)); + return vo; + } + @Override public List getExecHistory(ExecLogQueryRequest request) { // 查询执行记录 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 1f2efbac..6ee05be6 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,8 @@ 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.ExecHostLogConvert; +import com.orion.ops.module.asset.convert.ExecLogConvert; import com.orion.ops.module.asset.dao.ExecHostLogDAO; import com.orion.ops.module.asset.dao.ExecLogDAO; import com.orion.ops.module.asset.dao.HostDAO; @@ -35,8 +37,8 @@ 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.ExecCommandRequest; import com.orion.ops.module.asset.entity.request.exec.ExecLogTailRequest; -import com.orion.ops.module.asset.entity.vo.ExecCommandHostVO; -import com.orion.ops.module.asset.entity.vo.ExecCommandVO; +import com.orion.ops.module.asset.entity.vo.ExecHostLogVO; +import com.orion.ops.module.asset.entity.vo.ExecLogVO; import com.orion.ops.module.asset.entity.vo.HostConfigVO; import com.orion.ops.module.asset.enums.ExecHostStatusEnum; import com.orion.ops.module.asset.enums.ExecSourceEnum; @@ -102,7 +104,7 @@ public class ExecServiceImpl implements ExecService { @Override @Transactional(rollbackFor = Exception.class) - public ExecCommandVO execCommand(ExecCommandRequest request) { + public ExecLogVO execCommand(ExecCommandRequest request) { log.info("ExecService.startExecCommand start params: {}", JSON.toJSONString(request)); LoginUser user = Objects.requireNonNull(SecurityUtils.getLoginUser()); Long userId = user.getId(); @@ -156,25 +158,15 @@ public class ExecServiceImpl implements ExecService { // 开始执行 this.startExec(execLog, execHostLogs); // 返回 - List hostResult = execHostLogs.stream() - .map(s -> ExecCommandHostVO.builder() - .id(s.getId()) - .hostId(s.getHostId()) - .hostName(s.getHostName()) - .hostAddress(s.getHostAddress()) - .status(s.getStatus()) - .build()) - .collect(Collectors.toList()); - return ExecCommandVO.builder() - .id(execId) - .status(execLog.getStatus()) - .hosts(hostResult) - .build(); + ExecLogVO result = ExecLogConvert.MAPPER.to(execLog); + List resultHosts = ExecHostLogConvert.MAPPER.to(execHostLogs); + result.setHosts(resultHosts); + return result; } @Override @Transactional(rollbackFor = Exception.class) - public ExecCommandVO reExecCommand(Long logId) { + public ExecLogVO reExecCommand(Long logId) { log.info("ExecService.reExecCommand start logId: {}", logId); // 获取执行记录 ExecLogDO execLog = execLogDAO.selectById(logId); diff --git a/orion-ops-ui/src/api/exec/exec-log.ts b/orion-ops-ui/src/api/exec/exec-log.ts index 75e3754b..80013025 100644 --- a/orion-ops-ui/src/api/exec/exec-log.ts +++ b/orion-ops-ui/src/api/exec/exec-log.ts @@ -30,6 +30,7 @@ export interface ExecLogQueryResponse extends TableData, ExecLogQueryExtraRespon startTime: number; finishTime: number; hostIdList: Array; + hosts: Array; } /** @@ -72,6 +73,13 @@ export function getExecLogPage(request: ExecLogQueryRequest) { return axios.post>('/asset/exec-log/query', request); } +/** + * 查询执行记录 + */ +export function getExecLog(id: number) { + return axios.get('/asset/exec-log/query', { params: { id } }); +} + /** * 查询主机执行记录 */ diff --git a/orion-ops-ui/src/api/exec/exec.ts b/orion-ops-ui/src/api/exec/exec.ts index ce1803d2..b36b0ba8 100644 --- a/orion-ops-ui/src/api/exec/exec.ts +++ b/orion-ops-ui/src/api/exec/exec.ts @@ -1,3 +1,4 @@ +import type { ExecLogQueryResponse } from './exec-log'; import axios from 'axios'; /** @@ -28,44 +29,18 @@ export interface ExecTailRequest { hostExecIdList?: Array; } -/** - * 执行命令响应 - */ -export interface ExecCommandResponse { - id: number; - status: string; - startTime: number; - finishTime: number; - hosts: Array; -} - -/** - * 执行命令主机响应 - */ -export interface ExecCommandHostResponse { - id: number; - hostId: number; - hostName: string; - hostAddress: string; - status: string; - exitStatus: number; - errorMessage: string; - startTime: number; - finishTime: number; -} - /** * 批量执行命令 */ export function batchExecCommand(request: ExecCommandRequest) { - return axios.post('/asset/exec/exec-command', request); + return axios.post('/asset/exec/exec-command', request); } /** * 重新执行命令 */ export function reExecCommand(request: ExecCommandRequest) { - return axios.post('/asset/exec/re-exec-command', request); + return axios.post('/asset/exec/re-exec-command', request); } /** diff --git a/orion-ops-ui/src/components/exec/log/panel-modal/index.vue b/orion-ops-ui/src/components/exec/log/panel-modal/index.vue new file mode 100644 index 00000000..ecb94208 --- /dev/null +++ b/orion-ops-ui/src/components/exec/log/panel-modal/index.vue @@ -0,0 +1,77 @@ + + + + + + + diff --git a/orion-ops-ui/src/components/exec/log/panel/exec-host.vue b/orion-ops-ui/src/components/exec/log/panel/exec-host.vue index 2fc1371e..55867061 100644 --- a/orion-ops-ui/src/components/exec/log/panel/exec-host.vue +++ b/orion-ops-ui/src/components/exec/log/panel/exec-host.vue @@ -41,14 +41,14 @@