From 03c334a507b31b763ddbe51cf540ca13090a2937 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Fri, 15 Mar 2024 19:32:22 +0800 Subject: [PATCH] =?UTF-8?q?:hammer:=20=E6=89=A7=E8=A1=8C=E5=91=BD=E4=BB=A4?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/core/query/DataQuery.java | 4 + .../asset/controller/ExecLogController.java | 11 + .../controller/ExecTemplateController.java | 9 - .../asset/convert/ExecTemplateConvert.java | 5 - .../cache/ExecTemplateCacheKeyDefine.java | 27 -- .../entity/dto/ExecParameterSchemaDTO.java | 35 ++ .../entity/dto/ExecTemplateCacheDTO.java | 43 --- .../request/exec/ExecCommandRequest.java | 4 - .../ops/module/asset/entity/vo/ExecLogVO.java | 4 + .../module/asset/service/ExecLogService.java | 8 + .../asset/service/ExecTemplateService.java | 9 - .../service/impl/ExecLogServiceImpl.java | 36 ++ .../asset/service/impl/ExecServiceImpl.java | 39 +- .../service/impl/ExecTemplateServiceImpl.java | 34 -- orion-ops-ui/src/api/exec/exec-log.ts | 8 + orion-ops-ui/src/api/exec/exec-template.ts | 7 - orion-ops-ui/src/api/exec/exec.ts | 1 - .../components/exec/template/modal/index.vue | 165 ++++++++ .../exec/template/modal/table.columns.ts | 43 +++ .../components/meta/history/modal/index.vue | 48 +-- .../meta/history/modal/table.columns.ts | 49 +++ .../src/components/view/exec-editor/const.ts | 3 +- .../exec-command/components/exec-history.vue | 19 + .../exec-command/components/exec-panel.vue | 365 ++++++++++++++++++ .../src/views/exec/exec-command/index.vue | 6 +- .../views/exec/exec-command/types/const.ts | 2 + .../components/exec-template-exec-drawer.vue | 7 +- .../components/exec-template-form-drawer.vue | 2 +- 28 files changed, 791 insertions(+), 202 deletions(-) delete mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/cache/ExecTemplateCacheKeyDefine.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecParameterSchemaDTO.java delete mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecTemplateCacheDTO.java create mode 100644 orion-ops-ui/src/components/exec/template/modal/index.vue create mode 100644 orion-ops-ui/src/components/exec/template/modal/table.columns.ts create mode 100644 orion-ops-ui/src/components/meta/history/modal/table.columns.ts create mode 100644 orion-ops-ui/src/views/exec/exec-command/components/exec-history.vue create mode 100644 orion-ops-ui/src/views/exec/exec-command/components/exec-panel.vue create mode 100644 orion-ops-ui/src/views/exec/exec-command/types/const.ts diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java index ca8ad9c6..afd84b72 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java @@ -106,6 +106,10 @@ public class DataQuery { return then; } + public DataQuery limit(IPageRequest page) { + return this.last(Pager.of(page).getSql()); + } + public DataQuery limit(int limit) { return this.last(Const.LIMIT + Const.SPACE + limit); } 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 516082e0..62278bc8 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 @@ -5,6 +5,7 @@ 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.security.core.utils.SecurityUtils; import com.orion.ops.framework.web.core.annotation.RestWrapper; import com.orion.ops.module.asset.define.operator.ExecOperatorType; import com.orion.ops.module.asset.entity.request.exec.ExecLogQueryRequest; @@ -73,6 +74,16 @@ public class ExecLogController { return execLogService.getExecLogStatus(idList); } + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/history") + @Operation(summary = "查询执行历史") + @PreAuthorize("@ss.hasAnyPermission('asset:exec-log:query', 'asset:exec:exec-command')") + public List getExecLogHistory(@Validated(Page.class) ExecLogQueryRequest request) { + request.setSource(ExecSourceEnum.BATCH.name()); + request.setUserId(SecurityUtils.getLoginUserId()); + return execLogService.getExecHistory(request); + } + @OperatorLog(ExecOperatorType.DELETE_LOG) @DeleteMapping("/delete") @Operation(summary = "删除执行日志") diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecTemplateController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecTemplateController.java index f532755a..499de9cf 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecTemplateController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/ExecTemplateController.java @@ -21,7 +21,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.List; /** * 执行模板 api @@ -67,14 +66,6 @@ public class ExecTemplateController { return execTemplateService.getExecTemplateById(id); } - @IgnoreLog(IgnoreLogMode.RET) - @GetMapping("/list") - @Operation(summary = "查询全部执行模板") - @PreAuthorize("@ss.hasPermission('asset:exec-template:query')") - public List getExecTemplateList() { - return execTemplateService.getExecTemplateListByCache(); - } - @IgnoreLog(IgnoreLogMode.RET) @PostMapping("/query") @Operation(summary = "分页查询执行模板") diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecTemplateConvert.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecTemplateConvert.java index 8ab6eb4f..356159f3 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecTemplateConvert.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/ExecTemplateConvert.java @@ -1,7 +1,6 @@ package com.orion.ops.module.asset.convert; import com.orion.ops.module.asset.entity.domain.ExecTemplateDO; -import com.orion.ops.module.asset.entity.dto.ExecTemplateCacheDTO; import com.orion.ops.module.asset.entity.request.exec.ExecTemplateCreateRequest; import com.orion.ops.module.asset.entity.request.exec.ExecTemplateUpdateRequest; import com.orion.ops.module.asset.entity.vo.ExecTemplateVO; @@ -26,8 +25,4 @@ public interface ExecTemplateConvert { ExecTemplateVO to(ExecTemplateDO domain); - ExecTemplateVO to(ExecTemplateCacheDTO cache); - - ExecTemplateCacheDTO toCache(ExecTemplateDO domain); - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/cache/ExecTemplateCacheKeyDefine.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/cache/ExecTemplateCacheKeyDefine.java deleted file mode 100644 index 5253f53e..00000000 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/cache/ExecTemplateCacheKeyDefine.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.orion.ops.module.asset.define.cache; - -import com.orion.lang.define.cache.key.CacheKeyBuilder; -import com.orion.lang.define.cache.key.CacheKeyDefine; -import com.orion.lang.define.cache.key.struct.RedisCacheStruct; -import com.orion.ops.module.asset.entity.dto.ExecTemplateCacheDTO; - -import java.util.concurrent.TimeUnit; - -/** - * 执行模板缓存 key - * - * @author Jiahang Li - * @version 1.0.1 - * @since 2024-3-7 18:08 - */ -public interface ExecTemplateCacheKeyDefine { - - CacheKeyDefine EXEC_TEMPLATE = new CacheKeyBuilder() - .key("exec:template:list") - .desc("执行模板列表") - .type(ExecTemplateCacheDTO.class) - .struct(RedisCacheStruct.HASH) - .timeout(1, TimeUnit.DAYS) - .build(); - -} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecParameterSchemaDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecParameterSchemaDTO.java new file mode 100644 index 00000000..7cd52006 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecParameterSchemaDTO.java @@ -0,0 +1,35 @@ +package com.orion.ops.module.asset.entity.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 命令执行参数 schema 对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/3/15 14:50 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "ExecParameterSchemaDTO", description = "命令执行参数 schema 对象") +public class ExecParameterSchemaDTO { + + @Schema(description = "参数名称") + private String name; + + @Schema(description = "参数描述") + private String desc; + + @Schema(description = "默认值") + private Object defaultValue; + + @Schema(description = "值") + private Object value; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecTemplateCacheDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecTemplateCacheDTO.java deleted file mode 100644 index f52ddb71..00000000 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/ExecTemplateCacheDTO.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.orion.ops.module.asset.entity.dto; - -import com.orion.lang.define.cache.key.model.LongCacheIdModel; -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.1 - * @since 2024-3-7 18:08 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@Schema(name = "ExecTemplateCacheDTO", description = "执行模板 缓存对象") -public class ExecTemplateCacheDTO implements LongCacheIdModel, Serializable { - - private static final long serialVersionUID = 1L; - - @Schema(description = "id") - private Long id; - - @Schema(description = "名称") - private String name; - - @Schema(description = "命令") - private String command; - - @Schema(description = "超时时间秒 0不超时") - private Integer timeout; - - @Schema(description = "参数") - private String parameter; - -} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandRequest.java index 13dd5475..9b5307b5 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandRequest.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/exec/ExecCommandRequest.java @@ -34,10 +34,6 @@ public class ExecCommandRequest { @Schema(description = "执行命令") private String command; - @NotBlank - @Schema(description = "执行参数") - private String parameter; - @NotBlank @Schema(description = "参数 schema") private String parameterSchema; 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 3871e04d..bc44e65e 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 @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * 批量执行日志 视图响应对象 @@ -55,4 +56,7 @@ public class ExecLogVO implements Serializable { @Schema(description = "执行完成时间") private Date finishTime; + @Schema(description = "执行主机id") + private List hostIdList; + } 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 ee2f215f..ab099fa5 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,14 @@ public interface ExecLogService { */ DataGrid getExecLogPage(ExecLogQueryRequest request); + /** + * 获取执行历史 + * + * @param request request + * @return history + */ + 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/ExecTemplateService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecTemplateService.java index f24895cb..49361ff1 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecTemplateService.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/ExecTemplateService.java @@ -6,8 +6,6 @@ import com.orion.ops.module.asset.entity.request.exec.ExecTemplateQueryRequest; import com.orion.ops.module.asset.entity.request.exec.ExecTemplateUpdateRequest; import com.orion.ops.module.asset.entity.vo.ExecTemplateVO; -import java.util.List; - /** * 执行模板 服务类 * @@ -41,13 +39,6 @@ public interface ExecTemplateService { */ ExecTemplateVO getExecTemplateById(Long id); - /** - * 通过缓存查询执行模板 - * - * @return rows - */ - List getExecTemplateListByCache(); - /** * 分页查询执行模板 * 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 f563d8de..59eed32c 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 @@ -28,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -64,6 +65,41 @@ public class ExecLogServiceImpl implements ExecLogService { .dataGrid(ExecLogConvert.MAPPER::to); } + @Override + public List getExecHistory(ExecLogQueryRequest request) { + // 查询执行记录 + List logs = execLogDAO.of() + .createWrapper() + .eq(ExecLogDO::getSource, request.getSource()) + .eq(ExecLogDO::getUserId, request.getUserId()) + .groupBy(ExecLogDO::getDescription) + .orderByDesc(ExecLogDO::getId) + .then() + .limit(request) + .list(ExecLogConvert.MAPPER::to); + if (logs.isEmpty()) { + return logs; + } + List logIdList = logs.stream() + .map(ExecLogVO::getId) + .collect(Collectors.toList()); + // 设置执行主机id + Map> hostIdRel = execHostLogDAO.of() + .createWrapper() + .in(ExecHostLogDO::getLogId, logIdList) + .then() + .stream() + .collect(Collectors.groupingBy( + ExecHostLogDO::getLogId, + Collectors.mapping( + ExecHostLogDO::getHostId, + Collectors.toList() + ) + )); + logs.forEach(s -> s.setHostIdList(hostIdRel.get(s.getId()))); + return logs; + } + @Override public ExecLogStatusVO getExecLogStatus(List idList) { // 查询执行状态 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 0f5b3a24..fc107073 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 @@ -1,10 +1,11 @@ package com.orion.ops.module.asset.service.impl; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.orion.lang.function.Functions; import com.orion.lang.id.UUIds; import com.orion.lang.utils.Strings; +import com.orion.lang.utils.collect.Lists; import com.orion.lang.utils.collect.Maps; import com.orion.lang.utils.json.matcher.NoMatchStrategy; import com.orion.lang.utils.json.matcher.ReplacementFormatter; @@ -23,6 +24,7 @@ import com.orion.ops.module.asset.dao.HostDAO; import com.orion.ops.module.asset.entity.domain.ExecHostLogDO; import com.orion.ops.module.asset.entity.domain.ExecLogDO; import com.orion.ops.module.asset.entity.domain.HostDO; +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.vo.ExecCommandHostVO; import com.orion.ops.module.asset.entity.vo.ExecCommandVO; @@ -109,7 +111,7 @@ public class ExecServiceImpl implements ExecService { execLogDAO.insert(execLog); Long execId = execLog.getId(); // 获取内置参数 - Map builtinsParams = this.getBaseBuiltinsParams(user, execId, request.getParameter()); + Map builtinsParams = this.getBaseBuiltinsParams(user, execId, request.getParameterSchema()); // 设置主机日志 List execHostLogs = hosts.stream() .map(s -> { @@ -159,7 +161,6 @@ public class ExecServiceImpl implements ExecService { .description(execLog.getDescription()) .timeout(execLog.getTimeout()) .command(execLog.getCommand()) - .parameter(hostLogs.get(0).getParameter()) .parameterSchema(execLog.getParameterSchema()) .hostIdList(hostIdList) .build(); @@ -298,19 +299,37 @@ public class ExecServiceImpl implements ExecService { } /** - * 获取基础内置参数 + * 提取参数 * - * @param user user - * @param execId execId + * @param parameterSchema parameterSchema * @return params */ - private Map getBaseBuiltinsParams(LoginUser user, Long execId, String inputParam) { + 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 + * @return params + */ + private Map getBaseBuiltinsParams(LoginUser user, Long execId, String parameterSchema) { String uuid = UUIds.random(); Date date = new Date(); // 输入参数 - JSONObject inputParams = JSON.parseObject(inputParam); - // 内置参数 - Map params = Maps.newMap(inputParams); + Map params = this.extraSchemaParams(parameterSchema); + // 添加内置参数 params.put("userId", user.getId()); params.put("username", user.getId()); params.put("execId", execId); diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecTemplateServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecTemplateServiceImpl.java index 25ff9e6b..f5339346 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecTemplateServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/ExecTemplateServiceImpl.java @@ -5,13 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.utils.Valid; -import com.orion.ops.framework.redis.core.utils.RedisMaps; -import com.orion.ops.framework.redis.core.utils.barrier.CacheBarriers; import com.orion.ops.module.asset.convert.ExecTemplateConvert; import com.orion.ops.module.asset.dao.ExecTemplateDAO; -import com.orion.ops.module.asset.define.cache.ExecTemplateCacheKeyDefine; import com.orion.ops.module.asset.entity.domain.ExecTemplateDO; -import com.orion.ops.module.asset.entity.dto.ExecTemplateCacheDTO; import com.orion.ops.module.asset.entity.request.exec.ExecTemplateCreateRequest; import com.orion.ops.module.asset.entity.request.exec.ExecTemplateQueryRequest; import com.orion.ops.module.asset.entity.request.exec.ExecTemplateUpdateRequest; @@ -21,9 +17,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; /** * 执行模板 服务实现类 @@ -50,8 +43,6 @@ public class ExecTemplateServiceImpl implements ExecTemplateService { int effect = execTemplateDAO.insert(record); Long id = record.getId(); log.info("ExecTemplateService-createExecTemplate id: {}, effect: {}", id, effect); - // 删除缓存 - RedisMaps.delete(ExecTemplateCacheKeyDefine.EXEC_TEMPLATE); return id; } @@ -69,8 +60,6 @@ public class ExecTemplateServiceImpl implements ExecTemplateService { // 更新 int effect = execTemplateDAO.updateById(updateRecord); log.info("ExecTemplateService-updateExecTemplateById effect: {}", effect); - // 删除缓存 - RedisMaps.delete(ExecTemplateCacheKeyDefine.EXEC_TEMPLATE); return effect; } @@ -83,27 +72,6 @@ public class ExecTemplateServiceImpl implements ExecTemplateService { return ExecTemplateConvert.MAPPER.to(record); } - @Override - public List getExecTemplateListByCache() { - // 查询缓存 - List list = RedisMaps.valuesJson(ExecTemplateCacheKeyDefine.EXEC_TEMPLATE); - if (list.isEmpty()) { - // 查询数据库 - list = execTemplateDAO.of().list(ExecTemplateConvert.MAPPER::toCache); - // 设置屏障 防止穿透 - CacheBarriers.checkBarrier(list, ExecTemplateCacheDTO::new); - // 设置缓存 - RedisMaps.putAllJson(ExecTemplateCacheKeyDefine.EXEC_TEMPLATE, s -> s.getId().toString(), list); - } - // 删除屏障 - CacheBarriers.removeBarrier(list); - // 转换 - return list.stream() - .map(ExecTemplateConvert.MAPPER::to) - .sorted(Comparator.comparing(ExecTemplateVO::getId).reversed()) - .collect(Collectors.toList()); - } - @Override public DataGrid getExecTemplatePage(ExecTemplateQueryRequest request) { // 条件 @@ -123,8 +91,6 @@ public class ExecTemplateServiceImpl implements ExecTemplateService { // 删除 int effect = execTemplateDAO.deleteById(id); log.info("ExecTemplateService-deleteExecTemplateById id: {}, effect: {}", id, effect); - // 删除缓存 - RedisMaps.delete(ExecTemplateCacheKeyDefine.EXEC_TEMPLATE, id); return effect; } diff --git a/orion-ops-ui/src/api/exec/exec-log.ts b/orion-ops-ui/src/api/exec/exec-log.ts index bf5f4626..534f336a 100644 --- a/orion-ops-ui/src/api/exec/exec-log.ts +++ b/orion-ops-ui/src/api/exec/exec-log.ts @@ -28,6 +28,7 @@ export interface ExecLogQueryResponse extends TableData, ExecLogQueryExtraRespon status: string; startTime: number; finishTime: number; + hostIdList: Array; } /** @@ -88,6 +89,13 @@ export function getExecLogStatus(idList: Array) { }); } +/** + * 查询历史执行记录 + */ +export function getExecLogHistory(limit: number) { + return axios.get>('/asset/exec-log/history', { params: { page: 1, limit } }); +} + /** * 删除执行记录 */ diff --git a/orion-ops-ui/src/api/exec/exec-template.ts b/orion-ops-ui/src/api/exec/exec-template.ts index 0ff95a0f..984b31fd 100644 --- a/orion-ops-ui/src/api/exec/exec-template.ts +++ b/orion-ops-ui/src/api/exec/exec-template.ts @@ -64,13 +64,6 @@ export function getExecTemplate(id: number) { return axios.get('/asset/exec-template/get', { params: { id } }); } -/** - * 查询全部执行模板 - */ -export function getExecTemplateList() { - return axios.get>('/asset/exec-template/list'); -} - /** * 分页查询执行模板 */ diff --git a/orion-ops-ui/src/api/exec/exec.ts b/orion-ops-ui/src/api/exec/exec.ts index 77eeeb8b..9bf4ed96 100644 --- a/orion-ops-ui/src/api/exec/exec.ts +++ b/orion-ops-ui/src/api/exec/exec.ts @@ -8,7 +8,6 @@ export interface ExecCommandRequest { description?: string; timeout?: number; command?: string; - parameter?: string; parameterSchema?: string; hostIdList?: number[]; } diff --git a/orion-ops-ui/src/components/exec/template/modal/index.vue b/orion-ops-ui/src/components/exec/template/modal/index.vue new file mode 100644 index 00000000..4a10f50c --- /dev/null +++ b/orion-ops-ui/src/components/exec/template/modal/index.vue @@ -0,0 +1,165 @@ + + + + + + + diff --git a/orion-ops-ui/src/components/exec/template/modal/table.columns.ts b/orion-ops-ui/src/components/exec/template/modal/table.columns.ts new file mode 100644 index 00000000..e4468d08 --- /dev/null +++ b/orion-ops-ui/src/components/exec/template/modal/table.columns.ts @@ -0,0 +1,43 @@ +import type { TableColumnData } from '@arco-design/web-vue/es/table/interface'; +import { dateFormat } from '@/utils'; + +const columns = [ + { + title: 'id', + dataIndex: 'id', + slotName: 'id', + width: 70, + align: 'left', + fixed: 'left', + }, { + title: '模板名称', + dataIndex: 'name', + slotName: 'name', + align: 'left', + width: 200, + ellipsis: true, + }, { + title: '模板命令', + dataIndex: 'command', + slotName: 'command', + align: 'left', + ellipsis: true, + }, { + title: '修改时间', + dataIndex: 'updateTime', + slotName: 'updateTime', + align: 'center', + width: 180, + render: ({ record }) => { + return dateFormat(new Date(record.updateTime)); + }, + }, { + title: '操作', + slotName: 'handle', + width: 80, + align: 'center', + fixed: 'right', + }, +] as TableColumnData[]; + +export default columns; diff --git a/orion-ops-ui/src/components/meta/history/modal/index.vue b/orion-ops-ui/src/components/meta/history/modal/index.vue index 664a937e..81dc5902 100644 --- a/orion-ops-ui/src/components/meta/history/modal/index.vue +++ b/orion-ops-ui/src/components/meta/history/modal/index.vue @@ -76,7 +76,6 @@ + + + + diff --git a/orion-ops-ui/src/views/exec/exec-command/components/exec-panel.vue b/orion-ops-ui/src/views/exec/exec-command/components/exec-panel.vue new file mode 100644 index 00000000..e0ec6d6c --- /dev/null +++ b/orion-ops-ui/src/views/exec/exec-command/components/exec-panel.vue @@ -0,0 +1,365 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/exec/exec-command/index.vue b/orion-ops-ui/src/views/exec/exec-command/index.vue index 56a68008..a61b5764 100644 --- a/orion-ops-ui/src/views/exec/exec-command/index.vue +++ b/orion-ops-ui/src/views/exec/exec-command/index.vue @@ -1,6 +1,7 @@ @@ -11,6 +12,7 @@ diff --git a/orion-ops-ui/src/views/exec/exec-command/types/const.ts b/orion-ops-ui/src/views/exec/exec-command/types/const.ts new file mode 100644 index 00000000..b88ef694 --- /dev/null +++ b/orion-ops-ui/src/views/exec/exec-command/types/const.ts @@ -0,0 +1,2 @@ +// 执行 +export const historyCount = 20; diff --git a/orion-ops-ui/src/views/exec/exec-template/components/exec-template-exec-drawer.vue b/orion-ops-ui/src/views/exec/exec-template/components/exec-template-exec-drawer.vue index 02d3452c..2ecf98a9 100644 --- a/orion-ops-ui/src/views/exec/exec-template/components/exec-template-exec-drawer.vue +++ b/orion-ops-ui/src/views/exec/exec-template/components/exec-template-exec-drawer.vue @@ -132,7 +132,7 @@ parameterSchema.value = JSON.parse(record.parameter); const params = {} as any; for (let param of parameterSchema.value) { - params[param.name as keyof any] = param.default; + params[param.name as keyof any] = param.defaultValue; } parameterFormModel.value = params; @@ -167,10 +167,13 @@ if (error) { return false; } + // 设置 schema + for (let ps of parameterSchema.value) { + ps.value = parameterFormModel.value[ps.name as string]; + } // 执行命令 await batchExecCommand({ ...formModel.value, - parameter: JSON.stringify(parameterFormModel.value), parameterSchema: JSON.stringify(parameterSchema.value), }); Message.success('已开始执行'); diff --git a/orion-ops-ui/src/views/exec/exec-template/components/exec-template-form-drawer.vue b/orion-ops-ui/src/views/exec/exec-template/components/exec-template-form-drawer.vue index ba8860d8..0fad215d 100644 --- a/orion-ops-ui/src/views/exec/exec-template/components/exec-template-form-drawer.vue +++ b/orion-ops-ui/src/views/exec/exec-template/components/exec-template-form-drawer.vue @@ -65,7 +65,7 @@ placeholder="参数名称 (必填)" allow-clear />