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 index 8f6533e3..3fcc336f 100644 --- 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 @@ -17,5 +17,15 @@ Authorization: {{token}} ] } +### 查询用户最近连接的 ssh 主机 +POST {{baseUrl}}/asset/host-connect-log/latest-connect +Content-Type: application/json +Authorization: {{token}} + +{ + "limit": 10, + "type": "SSH" +} + ### 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 index 053fedb7..e91cdf28 100644 --- 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 @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.List; /** * 主机连接日志 api @@ -47,5 +48,12 @@ public class HostConnectLogController { return hostConnectLogService.getHostConnectLogPage(request); } + @IgnoreLog(IgnoreLogMode.RET) + @PostMapping("/latest-connect") + @Operation(summary = "查询用户最近连接的主机") + public List getLatestConnectHostId(@RequestBody HostConnectLogQueryRequest request) { + return hostConnectLogService.getLatestConnectHostId(request); + } + } 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 index 9e3a9415..04b5e406 100644 --- 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 @@ -3,6 +3,9 @@ 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; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 主机连接日志 Mapper 接口 @@ -14,4 +17,14 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface HostConnectLogDAO extends IMapper { + /** + * 查询最近连接的 hostId + * + * @param userId userId + * @param type type + * @param limit limit + * @return hostId + */ + List selectLatestConnectHostId(@Param("userId") Long userId, @Param("type") String type, @Param("limit") Integer limit); + } 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 index b59a606f..c262e804 100644 --- 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 @@ -7,6 +7,8 @@ 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 java.util.List; + /** * 主机连接日志 服务类 * @@ -40,4 +42,12 @@ public interface HostConnectLogService { */ void updateStatusByToken(String token, HostConnectStatusEnum status); + /** + * 查询用户最近连接的主机 + * + * @param request request + * @return hostId + */ + List getLatestConnectHostId(HostConnectLogQueryRequest request); + } 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 index 781ef982..b8bea1b3 100644 --- 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 @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.Arrays1; import com.orion.ops.framework.mybatis.core.query.Conditions; +import com.orion.ops.framework.security.core.utils.SecurityUtils; 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; @@ -19,6 +20,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; +import java.util.List; /** * 主机连接日志 服务实现类 @@ -68,6 +70,11 @@ public class HostConnectLogServiceImpl implements HostConnectLogService { hostConnectLogDAO.update(update, Conditions.eq(HostConnectLogDO::getToken, token)); } + @Override + public List getLatestConnectHostId(HostConnectLogQueryRequest request) { + return hostConnectLogDAO.selectLatestConnectHostId(SecurityUtils.getLoginUserId(), request.getType(), request.getLimit()); + } + /** * 构建查询 wrapper * 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 index b9f8898e..612dfd2a 100644 --- 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 @@ -26,4 +26,14 @@ id, user_id, username, 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 index 555fe89f..ee983a68 100644 --- a/orion-ops-ui/src/api/asset/host-connect-log.ts +++ b/orion-ops-ui/src/api/asset/host-connect-log.ts @@ -42,3 +42,13 @@ export interface HostConnectLogQueryResponse extends TableData { export function getHostConnectLogPage(request: HostConnectLogQueryRequest) { return axios.post>('/asset/host-connect-log/query', request); } + +/** + * 查询用户最近连接的主机 + */ +export function getLatestConnectHostId(type: string, limit: number) { + return axios.post>('/asset/host-connect-log/latest-connect', { + type, + limit + }); +} diff --git a/orion-ops-ui/src/views/host/terminal/components/new-connection/hosts-view.vue b/orion-ops-ui/src/views/host/terminal/components/new-connection/hosts-view.vue index e8d00df9..e2cf91ae 100644 --- a/orion-ops-ui/src/views/host/terminal/components/new-connection/hosts-view.vue +++ b/orion-ops-ui/src/views/host/terminal/components/new-connection/hosts-view.vue @@ -44,7 +44,8 @@ const props = defineProps<{ hosts: AuthorizedHostQueryResponse, filterValue: string, - newConnectionType: string + newConnectionType: string, + latestHosts: Array }>(); const hostList = ref>([]); @@ -93,7 +94,7 @@ list = list.filter(item => item.favorite); } else if (NewConnectionType.LATEST === props.newConnectionType) { // 过滤-最近连接 - // todo + list = list.filter(s => props.latestHosts.includes(s.id)); } // 排序 hostList.value = list?.sort((o1, o2) => { diff --git a/orion-ops-ui/src/views/host/terminal/components/new-connection/new-connection-view.vue b/orion-ops-ui/src/views/host/terminal/components/new-connection/new-connection-view.vue index df899498..b843ac3c 100644 --- a/orion-ops-ui/src/views/host/terminal/components/new-connection/new-connection-view.vue +++ b/orion-ops-ui/src/views/host/terminal/components/new-connection/new-connection-view.vue @@ -9,7 +9,7 @@ + :new-connection-type="newConnectionType" + :latest-hosts="latestHosts" /> @@ -78,12 +79,13 @@ import type { AuthorizedHostQueryResponse } from '@/api/asset/asset-authorized-data'; import { getCurrentAuthorizedHost } from '@/api/asset/asset-authorized-data'; import { onBeforeMount, ref } from 'vue'; - import { NewConnectionType, NewConnectionTypeKey } from '../../types/terminal.const'; + import { NewConnectionType, newConnectionTypeKey } from '../../types/terminal.const'; import useLoading from '@/hooks/loading'; - import { useDictStore, useTerminalStore } from '@/store'; + import { useAppStore, useDictStore, useTerminalStore } from '@/store'; import { dataColor } from '@/utils'; import { tagColor } from '@/views/asset/host-list/types/const'; import HostsView from './hosts-view.vue'; + import { getLatestConnectHostId } from '@/api/asset/host-connect-log'; const { loading, setLoading } = useLoading(); const { toOptions } = useDictStore(); @@ -93,6 +95,7 @@ const filterValue = ref(''); const filterOptions = ref>([]); const hosts = ref({} as AuthorizedHostQueryResponse); + const latestHosts = ref>([]); // 过滤输入 const searchFilter = (searchValue: string, option: SelectOptionData) => { @@ -125,10 +128,11 @@ }).forEach(s => filterOptions.value.push(s)); }; - // 初始化 - const init = async () => { + // 加载主机信息 + const initHosts = async () => { try { setLoading(true); + // 加载主机信息 const { data } = await getCurrentAuthorizedHost(); hosts.value = data; // 初始化过滤项 @@ -138,8 +142,23 @@ } }; + // 加载最近连接主机 + const loadLatestConnectHost = async () => { + try { + setLoading(true); + // 加载最近连接主机 + const { data } = await getLatestConnectHostId('SSH', useAppStore().defaultTablePageSize); + latestHosts.value = data; + } finally { + setLoading(false); + } + }; + // 加载主机信息 - onBeforeMount(init); + onBeforeMount(initHosts); + + // 加载最近连接主机 + onBeforeMount(loadLatestConnectHost);