From 459002f666fecf582c1363fce158f20be492fcd5 Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Tue, 26 Dec 2023 23:47:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BB=E6=9C=BA=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E8=AE=B0=E5=BD=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/generator/CodeGenerators.java | 6 +- .../core/generator/template/DictTemplate.java | 2 +- .../templates/orion-vue-views-index.vue.vm | 2 +- .../controller/HostConnectLogController.http | 19 ++ .../controller/HostConnectLogController.java | 56 ++++++ .../asset/convert/HostConnectLogConvert.java | 32 ++++ .../module/asset/dao/HostConnectLogDAO.java | 17 ++ .../asset/entity/domain/HostConnectLogDO.java | 83 +++++++++ .../host/HostConnectLogCreateRequest.java | 34 ++++ .../host/HostConnectLogQueryRequest.java | 56 ++++++ .../asset/entity/vo/HostConnectLogVO.java | 73 ++++++++ .../asset/enums/HostConnectStatusEnum.java | 41 +++++ .../asset/enums/HostConnectTypeEnum.java | 31 ++++ .../asset/service/HostConnectLogService.java | 43 +++++ .../impl/HostConnectLogServiceImpl.java | 81 +++++++++ .../resources/mapper/HostConnectLogMapper.xml | 28 +++ .../src/api/asset/host-connect-log.ts | 45 +++++ .../src/assets/style/arco-extends.less | 3 + .../src/router/routes/modules/asset.ts | 4 + orion-ops-ui/src/store/modules/cache/index.ts | 2 +- .../components/host-connect-log-table.vue | 171 ++++++++++++++++++ .../views/asset/host-connect-log/index.vue | 41 +++++ .../asset/host-connect-log/types/const.ts | 5 + .../host-connect-log/types/table.columns.ts | 74 ++++++++ .../components/config/host-config-drawer.vue | 1 - 25 files changed, 943 insertions(+), 7 deletions(-) create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.http create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConnectLogConvert.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/HostConnectLogDAO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostConnectLogDO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogCreateRequest.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogQueryRequest.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectStatusEnum.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectTypeEnum.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/HostConnectLogMapper.xml create mode 100644 orion-ops-ui/src/api/asset/host-connect-log.ts create mode 100644 orion-ops-ui/src/views/asset/host-connect-log/components/host-connect-log-table.vue create mode 100644 orion-ops-ui/src/views/asset/host-connect-log/index.vue create mode 100644 orion-ops-ui/src/views/asset/host-connect-log/types/const.ts create mode 100644 orion-ops-ui/src/views/asset/host-connect-log/types/table.columns.ts diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java index f7eb15a2..f0061f8f 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java @@ -27,7 +27,7 @@ public class CodeGenerators { // 作者 String author = Const.ORION_AUTHOR; // 模块 - String module = "infra"; + String module = "asset"; // 生成的表 Table[] tables = { // Template.create("dict_key", "字典配置项", "dict") @@ -45,9 +45,9 @@ public class CodeGenerators { // .color("blue", "gray", "red", "green", "white") // .valueUseFields() // .build(), - Template.create("data_extra", "数据拓展信息", "data") + Template.create("host_connect_log", "主机连接日志", "host") .disableUnitTest() - .enableProviderApi() + .vue("asset", "host-connect-log") .build(), }; // jdbc 配置 - 使用配置文件 diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/DictTemplate.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/DictTemplate.java index 8ccd03b9..4760400a 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/DictTemplate.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/template/DictTemplate.java @@ -141,7 +141,7 @@ public class DictTemplate extends Template { */ public DictTemplate extra(String key, Object... values) { // 初始化额外值 - if (dictMeta.extraValues.size() == 0) { + if (dictMeta.extraValues.isEmpty()) { for (int i = 0; i < dictMeta.fields.size(); i++) { dictMeta.extraValues.add(new LinkedHashMap<>()); } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-index.vue.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-index.vue.vm index 574f60d5..40d5aa41 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-index.vue.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-index.vue.vm @@ -56,7 +56,7 @@ import { useAppStore } from '@/store'; #end #else - import { ref } from 'vue'; + import { ref, onBeforeMount } from 'vue'; #if($dictMap.entrySet().size() > 0) import { useDictStore } from '@/store'; import { dictKeys } from './types/const'; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.http b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.http new file mode 100644 index 00000000..b33ae387 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.http @@ -0,0 +1,19 @@ +### 分页查询主机连接日志 +POST {{baseUrl}}/asset/host-connect-log/query +Content-Type: application/json +Authorization: {{token}} + +{ + "page": 1, + "limit": 10, + "userId": "", + "hostId": "", + "type": "", + "token": "", + "status": "", + "startTimeStart": "", + "endTimeEnd": "" +} + + +### diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.java new file mode 100644 index 00000000..ccef5d90 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostConnectLogController.java @@ -0,0 +1,56 @@ +package com.orion.ops.module.asset.controller; + +import com.orion.lang.define.wrapper.DataGrid; +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.entity.request.host.HostConnectLogQueryRequest; +import com.orion.ops.module.asset.entity.vo.HostConnectLogVO; +import com.orion.ops.module.asset.service.HostConnectLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 主机连接日志 api + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Tag(name = "asset - 主机连接日志服务") +@Slf4j +@Validated +@RestWrapper +@RestController +@RequestMapping("/asset/host-connect-log") +@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) +public class HostConnectLogController { + + @Resource + private HostConnectLogService hostConnectLogService; + + @IgnoreLog(IgnoreLogMode.RET) + @PostMapping("/query") + @Operation(summary = "分页查询主机连接日志") + @PreAuthorize("@ss.hasPermission('asset:host-connect-log:management:query')") + public DataGrid getHostConnectLogPage(@Validated(Page.class) @RequestBody HostConnectLogQueryRequest request) { + return hostConnectLogService.getHostConnectLogPage(request); + } + + // FIXME management 菜单一键全选 + // 前端选择 + // 前端用户 + // sql 元数据/菜单 + +} + diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConnectLogConvert.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConnectLogConvert.java new file mode 100644 index 00000000..db99af62 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/HostConnectLogConvert.java @@ -0,0 +1,32 @@ +package com.orion.ops.module.asset.convert; + +import com.orion.ops.module.asset.entity.domain.HostConnectLogDO; +import com.orion.ops.module.asset.entity.request.host.HostConnectLogCreateRequest; +import com.orion.ops.module.asset.entity.request.host.HostConnectLogQueryRequest; +import com.orion.ops.module.asset.entity.vo.HostConnectLogVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 主机连接日志 内部对象转换器 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Mapper +public interface HostConnectLogConvert { + + HostConnectLogConvert MAPPER = Mappers.getMapper(HostConnectLogConvert.class); + + HostConnectLogDO to(HostConnectLogCreateRequest request); + + HostConnectLogDO to(HostConnectLogQueryRequest request); + + HostConnectLogVO to(HostConnectLogDO domain); + + List to(List list); + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/HostConnectLogDAO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/HostConnectLogDAO.java new file mode 100644 index 00000000..9e3a9415 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/dao/HostConnectLogDAO.java @@ -0,0 +1,17 @@ +package com.orion.ops.module.asset.dao; + +import com.orion.ops.framework.mybatis.core.mapper.IMapper; +import com.orion.ops.module.asset.entity.domain.HostConnectLogDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 主机连接日志 Mapper 接口 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Mapper +public interface HostConnectLogDAO extends IMapper { + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostConnectLogDO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostConnectLogDO.java new file mode 100644 index 00000000..ba8cc181 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostConnectLogDO.java @@ -0,0 +1,83 @@ +package com.orion.ops.module.asset.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.orion.ops.framework.mybatis.core.domain.BaseDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.util.Date; + +/** + * 主机连接日志 实体对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName(value = "host_connect_log", autoResultMap = true) +@Schema(name = "HostConnectLogDO", description = "主机连接日志 实体对象") +public class HostConnectLogDO extends BaseDO { + + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "用户id") + @TableField("user_id") + private Long userId; + + @Schema(description = "主机id") + @TableField("host_id") + private Long hostId; + + @Schema(description = "主机名称") + @TableField("host_name") + private String hostName; + + @Schema(description = "主机地址") + @TableField("host_address") + private String hostAddress; + + @Schema(description = "类型") + @TableField("type") + private String type; + + @Schema(description = "token") + @TableField("token") + private String token; + + @Schema(description = "状态") + @TableField("status") + private String status; + + @Schema(description = "开始时间") + @TableField("start_time") + private Date startTime; + + @Schema(description = "结束时间") + @TableField("end_time") + private Date endTime; + + @Schema(description = "额外信息") + @TableField("extra_info") + private String extraInfo; + + @Schema(description = "创建人") + @TableField(exist = false) + private String creator; + + @Schema(description = "修改人") + @TableField(exist = false) + private String updater; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogCreateRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogCreateRequest.java new file mode 100644 index 00000000..fb6f0631 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogCreateRequest.java @@ -0,0 +1,34 @@ +package com.orion.ops.module.asset.entity.request.host; + +import com.orion.ops.framework.common.entity.PageRequest; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.Size; + +/** + * 主机连接日志 创建请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Schema(name = "HostConnectLogCreateRequest", description = "主机连接日志 创建请求对象") +public class HostConnectLogCreateRequest extends PageRequest { + + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "主机id") + private Long hostId; + + @Size(max = 128) + @Schema(description = "token") + private String token; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogQueryRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogQueryRequest.java new file mode 100644 index 00000000..3bb4f687 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostConnectLogQueryRequest.java @@ -0,0 +1,56 @@ +package com.orion.ops.module.asset.entity.request.host; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.orion.ops.framework.common.entity.PageRequest; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 主机连接日志 查询请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Schema(name = "HostConnectLogQueryRequest", description = "主机连接日志 查询请求对象") +public class HostConnectLogQueryRequest extends PageRequest { + + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "主机id") + private Long hostId; + + @Size(max = 128) + @Schema(description = "主机地址") + private String hostAddress; + + @Size(max = 16) + @Schema(description = "类型") + private String type; + + @Size(max = 128) + @Schema(description = "token") + private String token; + + @Size(max = 16) + @Schema(description = "状态") + private String status; + + @Schema(description = "开始时间-开区间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTimeStart; + + @Schema(description = "开始时间-闭区间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTimeEnd; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java new file mode 100644 index 00000000..1a3e1f50 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java @@ -0,0 +1,73 @@ +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.Date; + +/** + * 主机连接日志 视图响应对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "HostConnectLogVO", description = "主机连接日志 视图响应对象") +public class HostConnectLogVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + private Long id; + + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "主机id") + private Long hostId; + + @Schema(description = "主机名称") + private String hostName; + + @Schema(description = "主机地址") + private String hostAddress; + + @Schema(description = "类型") + private String type; + + @Schema(description = "token") + private String token; + + @Schema(description = "状态") + private String status; + + @Schema(description = "开始时间") + private Date startTime; + + @Schema(description = "结束时间") + private Date endTime; + + @Schema(description = "额外信息") + private String extraInfo; + + @Schema(description = "创建时间") + private Date createTime; + + @Schema(description = "修改时间") + private Date updateTime; + + @Schema(description = "创建人") + private String creator; + + @Schema(description = "修改人") + private String updater; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectStatusEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectStatusEnum.java new file mode 100644 index 00000000..546df6fb --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectStatusEnum.java @@ -0,0 +1,41 @@ +package com.orion.ops.module.asset.enums; + +/** + * 主机连接状态 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/12/26 22:27 + */ +public enum HostConnectStatusEnum { + + /** + * 连接中 + */ + CONNECTING, + + /** + * 完成 + */ + COMPLETE, + + /** + * 失败 + */ + FAILED, + + ; + + public static HostConnectStatusEnum of(String type) { + if (type == null) { + return null; + } + for (HostConnectStatusEnum value : values()) { + if (value.name().equals(type)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectTypeEnum.java new file mode 100644 index 00000000..58dd8aef --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConnectTypeEnum.java @@ -0,0 +1,31 @@ +package com.orion.ops.module.asset.enums; + +/** + * 主机连接类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/12/26 22:27 + */ +public enum HostConnectTypeEnum { + + /** + * ssh + */ + SSH, + + ; + + public static HostConnectTypeEnum of(String type) { + if (type == null) { + return null; + } + for (HostConnectTypeEnum value : values()) { + if (value.name().equals(type)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java new file mode 100644 index 00000000..b59a606f --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java @@ -0,0 +1,43 @@ +package com.orion.ops.module.asset.service; + +import com.orion.lang.define.wrapper.DataGrid; +import com.orion.ops.module.asset.entity.request.host.HostConnectLogCreateRequest; +import com.orion.ops.module.asset.entity.request.host.HostConnectLogQueryRequest; +import com.orion.ops.module.asset.entity.vo.HostConnectLogVO; +import com.orion.ops.module.asset.enums.HostConnectStatusEnum; +import com.orion.ops.module.asset.enums.HostConnectTypeEnum; + +/** + * 主机连接日志 服务类 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +public interface HostConnectLogService { + + /** + * 创建 + * + * @param type type + * @param request request + */ + void create(HostConnectTypeEnum type, HostConnectLogCreateRequest request); + + /** + * 分页查询主机连接日志 + * + * @param request request + * @return rows + */ + DataGrid getHostConnectLogPage(HostConnectLogQueryRequest request); + + /** + * 更新连接状态 + * + * @param token token + * @param status status + */ + void updateStatusByToken(String token, HostConnectStatusEnum status); + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java new file mode 100644 index 00000000..89a1dcb8 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java @@ -0,0 +1,81 @@ +package com.orion.ops.module.asset.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.orion.lang.define.wrapper.DataGrid; +import com.orion.ops.framework.mybatis.core.query.Conditions; +import com.orion.ops.module.asset.convert.HostConnectLogConvert; +import com.orion.ops.module.asset.dao.HostConnectLogDAO; +import com.orion.ops.module.asset.entity.domain.HostConnectLogDO; +import com.orion.ops.module.asset.entity.request.host.HostConnectLogCreateRequest; +import com.orion.ops.module.asset.entity.request.host.HostConnectLogQueryRequest; +import com.orion.ops.module.asset.entity.vo.HostConnectLogVO; +import com.orion.ops.module.asset.enums.HostConnectStatusEnum; +import com.orion.ops.module.asset.enums.HostConnectTypeEnum; +import com.orion.ops.module.asset.service.HostConnectLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +/** + * 主机连接日志 服务实现类 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-12-26 22:09 + */ +@Slf4j +@Service +public class HostConnectLogServiceImpl implements HostConnectLogService { + + @Resource + private HostConnectLogDAO hostConnectLogDAO; + + @Override + public void create(HostConnectTypeEnum type, HostConnectLogCreateRequest request) { + HostConnectLogDO record = HostConnectLogConvert.MAPPER.to(request); + record.setType(type.name()); + record.setStatus(HostConnectStatusEnum.CONNECTING.name()); + record.setStartTime(new Date()); + hostConnectLogDAO.insert(record); + } + + @Override + public DataGrid getHostConnectLogPage(HostConnectLogQueryRequest request) { + // 条件 + LambdaQueryWrapper wrapper = this.buildQueryWrapper(request); + // 查询 + return hostConnectLogDAO.of(wrapper) + .page(request) + .dataGrid(HostConnectLogConvert.MAPPER::to); + } + + @Override + public void updateStatusByToken(String token, HostConnectStatusEnum status) { + log.info("HostConnectLogService-updateStatusByToken token: {}, status: {}", token, status); + HostConnectLogDO update = new HostConnectLogDO(); + update.setStatus(status.name()); + update.setEndTime(new Date()); + hostConnectLogDAO.update(update, Conditions.eq(HostConnectLogDO::getToken, token)); + } + + /** + * 构建查询 wrapper + * + * @param request request + * @return wrapper + */ + private LambdaQueryWrapper buildQueryWrapper(HostConnectLogQueryRequest request) { + return hostConnectLogDAO.wrapper() + .eq(HostConnectLogDO::getUserId, request.getUserId()) + .eq(HostConnectLogDO::getHostId, request.getHostId()) + .like(HostConnectLogDO::getHostAddress, request.getHostAddress()) + .eq(HostConnectLogDO::getType, request.getType()) + .like(HostConnectLogDO::getToken, request.getToken()) + .eq(HostConnectLogDO::getStatus, request.getStatus()) + .ge(HostConnectLogDO::getStartTime, request.getStartTimeStart()) + .le(HostConnectLogDO::getStartTime, request.getStartTimeEnd()); + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/HostConnectLogMapper.xml b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/HostConnectLogMapper.xml new file mode 100644 index 00000000..169de5c9 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/HostConnectLogMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + id, user_id, host_id, host_name, host_address, type, token, status, start_time, end_time, extra_info, create_time, update_time, deleted + + + diff --git a/orion-ops-ui/src/api/asset/host-connect-log.ts b/orion-ops-ui/src/api/asset/host-connect-log.ts new file mode 100644 index 00000000..ed92030d --- /dev/null +++ b/orion-ops-ui/src/api/asset/host-connect-log.ts @@ -0,0 +1,45 @@ +import type { DataGrid, Pagination } from '@/types/global'; +import type { TableData } from '@arco-design/web-vue/es/table/interface'; +import axios from 'axios'; + +/** + * 主机连接日志查询请求 + */ +export interface HostConnectLogQueryRequest extends Pagination { + userId?: number; + hostId?: number; + hostAddress?: string; + type?: string; + token?: string; + status?: string; + startTimeStart?: string; + startTimeEnd?: string; +} + +/** + * 主机连接日志查询响应 + */ +export interface HostConnectLogQueryResponse extends TableData { + id: number; + userId: number; + hostId: number; + hostName: string; + hostAddress: string; + type: string; + token: string; + status: string; + startTime: number; + endTime: number; + extraInfo: string; + createTime: number; + updateTime: number; + creator: string; + updater: string; +} + +/** + * 分页查询主机连接日志 + */ +export function getHostConnectLogPage(request: HostConnectLogQueryRequest) { + return axios.post>('/asset/host-connect-log/query', request); +} diff --git a/orion-ops-ui/src/assets/style/arco-extends.less b/orion-ops-ui/src/assets/style/arco-extends.less index c7ccf68d..44f3f328 100644 --- a/orion-ops-ui/src/assets/style/arco-extends.less +++ b/orion-ops-ui/src/assets/style/arco-extends.less @@ -33,6 +33,9 @@ &.pass { background-color: rgb(var(--green-6)); } + &.error { + background-color: rgb(var(--red-6)); + } } } diff --git a/orion-ops-ui/src/router/routes/modules/asset.ts b/orion-ops-ui/src/router/routes/modules/asset.ts index 39ec3617..b15c2314 100644 --- a/orion-ops-ui/src/router/routes/modules/asset.ts +++ b/orion-ops-ui/src/router/routes/modules/asset.ts @@ -22,6 +22,10 @@ const ASSET: AppRouteRecordRaw = { name: 'assetGrant', path: '/asset/grant', component: () => import('@/views/asset/grant/index.vue'), + }, { + name: 'assetHostConnectLog', + path: '/asset/host-connect-log', + component: () => import('@/views/asset/host-connect-log/index.vue'), }, ], }; diff --git a/orion-ops-ui/src/store/modules/cache/index.ts b/orion-ops-ui/src/store/modules/cache/index.ts index 269c368f..1ee39e0f 100644 --- a/orion-ops-ui/src/store/modules/cache/index.ts +++ b/orion-ops-ui/src/store/modules/cache/index.ts @@ -14,7 +14,7 @@ import { getMenuList } from '@/api/system/menu'; import { getCurrentAuthorizedHostIdentity, getCurrentAuthorizedHostKey } from '@/api/asset/asset-authorized-data'; export type CacheType = 'users' | 'menus' | 'roles' - | 'host' | 'hostGroups' | 'hostKeys' | 'hostIdentities' + | 'hosts' | 'hostGroups' | 'hostKeys' | 'hostIdentities' | 'dictKeys' | 'authorizedHostKeys' | 'authorizedHostIdentities' | string diff --git a/orion-ops-ui/src/views/asset/host-connect-log/components/host-connect-log-table.vue b/orion-ops-ui/src/views/asset/host-connect-log/components/host-connect-log-table.vue new file mode 100644 index 00000000..0f3d9c03 --- /dev/null +++ b/orion-ops-ui/src/views/asset/host-connect-log/components/host-connect-log-table.vue @@ -0,0 +1,171 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/asset/host-connect-log/index.vue b/orion-ops-ui/src/views/asset/host-connect-log/index.vue new file mode 100644 index 00000000..dafa5dfd --- /dev/null +++ b/orion-ops-ui/src/views/asset/host-connect-log/index.vue @@ -0,0 +1,41 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/asset/host-connect-log/types/const.ts b/orion-ops-ui/src/views/asset/host-connect-log/types/const.ts new file mode 100644 index 00000000..9c541da5 --- /dev/null +++ b/orion-ops-ui/src/views/asset/host-connect-log/types/const.ts @@ -0,0 +1,5 @@ +// 主机连接状态 字典项 +export const connectStatusKey = 'hostConnectStatus'; + +// 加载的字典值 +export const dictKeys = [connectStatusKey]; diff --git a/orion-ops-ui/src/views/asset/host-connect-log/types/table.columns.ts b/orion-ops-ui/src/views/asset/host-connect-log/types/table.columns.ts new file mode 100644 index 00000000..648e40e4 --- /dev/null +++ b/orion-ops-ui/src/views/asset/host-connect-log/types/table.columns.ts @@ -0,0 +1,74 @@ +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: '用户id', + dataIndex: 'userId', + slotName: 'userId', + width: 110, + align: 'left', + }, { + title: '主机id', + dataIndex: 'hostId', + slotName: 'hostId', + width: 110, + align: 'left', + }, { + title: '主机名称', + dataIndex: 'hostName', + slotName: 'hostName', + align: 'left', + ellipsis: true, + tooltip: true, + }, { + title: '主机地址', + dataIndex: 'hostAddress', + slotName: 'hostAddress', + align: 'left', + ellipsis: true, + tooltip: true, + }, { + title: 'token', + dataIndex: 'token', + slotName: 'token', + align: 'left', + width: 180, + ellipsis: true, + tooltip: true, + }, { + title: '状态', + dataIndex: 'status', + slotName: 'status', + align: 'left', + ellipsis: true, + tooltip: true, + }, { + title: '开始时间', + dataIndex: 'startTime', + slotName: 'startTime', + align: 'left', + width: 180, + render: ({ record }) => { + return record.startTime && dateFormat(new Date(record.startTime)); + }, + }, { + title: '结束时间', + dataIndex: 'endTime', + slotName: 'endTime', + align: 'left', + width: 180, + render: ({ record }) => { + return record.endTime && dateFormat(new Date(record.endTime)); + }, + }, +] as TableColumnData[]; + +export default columns; diff --git a/orion-ops-ui/src/views/asset/host-list/components/config/host-config-drawer.vue b/orion-ops-ui/src/views/asset/host-list/components/config/host-config-drawer.vue index 59621c8e..fb4a3307 100644 --- a/orion-ops-ui/src/views/asset/host-list/components/config/host-config-drawer.vue +++ b/orion-ops-ui/src/views/asset/host-list/components/config/host-config-drawer.vue @@ -63,7 +63,6 @@ data.forEach(s => { config.value[s.type] = s; }); - console.log(config.value); } catch ({ message }) { Message.error(`配置加载失败 ${message}`); setVisible(false);