From 67719c55477f5b5c956e73a4fc12bcd95866cfdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=9A=E6=96=87?= <1179111926@qq.com> Date: Wed, 6 Aug 2025 18:30:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=9B=BE=E5=BD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../projects/vgpu/hooks/useParentAction.js | 28 +++++- .../projects/vgpu/views/card/admin/index.vue | 16 ++-- .../vgpu/views/monitor/overview/config.js | 8 +- .../vgpu/views/monitor/overview/index.vue | 12 +-- .../projects/vgpu/views/node/admin/Detail.vue | 2 +- .../projects/vgpu/views/poll/admin/Detail.vue | 2 +- .../projects/vgpu/views/poll/admin/index.vue | 2 +- .../projects/vgpu/views/task/admin/index.vue | 94 +++++++++++-------- packages/web/src/components/BackHeader.vue | 5 +- packages/web/src/layout/index.vue | 11 ++- packages/web/src/utils/index.js | 14 +++ 11 files changed, 126 insertions(+), 68 deletions(-) diff --git a/packages/web/projects/vgpu/hooks/useParentAction.js b/packages/web/projects/vgpu/hooks/useParentAction.js index dbd9828..4c3493e 100644 --- a/packages/web/projects/vgpu/hooks/useParentAction.js +++ b/packages/web/projects/vgpu/hooks/useParentAction.js @@ -3,20 +3,38 @@ import { useRouter } from 'vue-router'; export default function useParentAction() { const router = useRouter(); - const sendRouteChange = (url) => { + const sendRouteChange = (url, type) => { if (window.parent !== window) { // 在 iframe 中,通知父窗口 - const message = { + let message = { type: 'ChangeThePath', - data: url + data: url, }; + if (type === 'open') { + message = { + type: 'OpenThePath', + data: url, + }; + } + if (type === 'back') { + message = { + type: 'BackThePath', + data: url, + }; + } window.parent.postMessage(JSON.stringify(message), '*'); } else { // 不在 iframe 中,直接使用 router 跳转 - router.push(url); + if (type === 'open') { + window.open(url); + } else if (type === 'back') { + router.go(-1); + } else { + router.push(url); + } } }; const hasParentWindow = window.parent !== window; return { sendRouteChange, hasParentWindow }; -} \ No newline at end of file +} diff --git a/packages/web/projects/vgpu/views/card/admin/index.vue b/packages/web/projects/vgpu/views/card/admin/index.vue index bc61c0b..7d09183 100644 --- a/packages/web/projects/vgpu/views/card/admin/index.vue +++ b/packages/web/projects/vgpu/views/card/admin/index.vue @@ -33,6 +33,9 @@ import searchSchema from '~/vgpu/views/card/admin/searchSchema'; import PreviewBar from '~/vgpu/components/previewBar.vue'; import { defineProps, ref, watch } from 'vue'; import { roundToDecimal } from '@/utils'; +import useParentAction from '~/vgpu/hooks/useParentAction'; + +const { sendRouteChange } = useParentAction(); const props = defineProps(['hideTitle', 'filters']); @@ -41,9 +44,7 @@ const router = useRouter(); const tableRef = ref({}); const handleClick = (params) => { - router.push({ - path: `/admin/vgpu/card/admin/${params.data.name}`, - }); + sendRouteChange(`/admin/vgpu/card/admin/${params.data.name}`); }; const columns = [ @@ -76,6 +77,11 @@ const columns = [ title: '所属节点', dataIndex: 'nodeName', }, + { + title: '所属资源池', + dataIndex: 'resourcePools', + render: ({ resourcePools }) => `${resourcePools.join('、')}`, + }, { title: '显卡型号', dataIndex: 'type', @@ -114,9 +120,7 @@ const rowAction = [ { title: '查看详情', onClick: (row) => { - router.push({ - path: `/admin/vgpu/card/admin/${row.uuid}`, - }); + sendRouteChange(`/admin/vgpu/card/admin/${row.uuid}`); }, }, ]; diff --git a/packages/web/projects/vgpu/views/monitor/overview/config.js b/packages/web/projects/vgpu/views/monitor/overview/config.js index 5f078ec..6d292b7 100644 --- a/packages/web/projects/vgpu/views/monitor/overview/config.js +++ b/packages/web/projects/vgpu/views/monitor/overview/config.js @@ -106,7 +106,7 @@ export const rangeConfigInit = [ }, { name: 'CPU', - query: `sum(hami_container_cpu_allocated) / sum(hami_cpu_count) * 100`, + query: `sum(hami_container_vcore_allocated) / sum(hami_core_size) * 100`, data: [], type: 'line', areaStyle: { @@ -140,7 +140,7 @@ export const rangeConfigInit = [ }, { name: '内存', - query: `sum(hami_container_memory_allocated) / sum(hami_memory_capacity) * 100`, + query: `sum(hami_container_vmemory_allocated) / sum(hami_memory_size) * 100`, data: [], type: 'line', areaStyle: { @@ -245,7 +245,7 @@ export const rangeConfigInit = [ }, { name: 'CPU', - query: `sum(hami_container_cpu_allocated) / sum(hami_cpu_count) * 100`, + query: `100 * (1 - sum(irate(node_cpu_seconds_total{mode="idle"}[1m])) / count(node_cpu_seconds_total{mode="idle"}))`, data: [], type: 'line', areaStyle: { @@ -279,7 +279,7 @@ export const rangeConfigInit = [ }, { name: '内存', - query: `sum(hami_container_memory_allocated) / sum(hami_memory_capacity) * 100`, + query: `(1 - sum(node_memory_MemAvailable_bytes) / sum(node_memory_MemTotal_bytes)) * 100`, data: [], type: 'line', areaStyle: { diff --git a/packages/web/projects/vgpu/views/monitor/overview/index.vue b/packages/web/projects/vgpu/views/monitor/overview/index.vue index e8d81ee..d25305d 100644 --- a/packages/web/projects/vgpu/views/monitor/overview/index.vue +++ b/packages/web/projects/vgpu/views/monitor/overview/index.vue @@ -416,18 +416,18 @@ const nodeTotalTop = { key: 'used', config: [ { - tab: 'GPU', - key: 'gpu', - nameKey: 'node', + tab: 'CPU', + key: 'cpu', + nameKey: 'instance', data: [], - query: `topk(5, avg(hami_container_vgpu_allocated{}) by (node) / avg(hami_vgpu_count{}) by (node) * 100)`, + query: `topk(5, sum(hami_container_vcore_allocated) by (instance) / sum(hami_core_size) by (instance) * 100)`, }, { tab: '内存', key: 'internal', - nameKey: 'node', + nameKey: 'instance', data: [], - query: `topk(5, avg(hami_container_vgpu_allocated{}) by (node) / avg(hami_vgpu_count{}) by (node) * 100)`, + query: `topk(5, sum(hami_container_vmemory_allocated) by (instance) / sum(hami_memory_size) by (instance) * 100)`, }, { tab: 'vGPU', diff --git a/packages/web/projects/vgpu/views/node/admin/Detail.vue b/packages/web/projects/vgpu/views/node/admin/Detail.vue index 3c6f723..56b1f67 100644 --- a/packages/web/projects/vgpu/views/node/admin/Detail.vue +++ b/packages/web/projects/vgpu/views/node/admin/Detail.vue @@ -250,7 +250,7 @@ const gaugeConfig = useInstantVector( percent: 0, query: ``, totalQuery: ``, - percentQuery: `avg(sum(hami_container_memory_allocated{node=~"$node"}) by (instance) / sum(hami_memory_size{node=~"$node"}) by (instance) * 100)`, + percentQuery: `avg(sum(hami_container_vmemory_allocated{node=~"$node"}) by (instance) / sum(hami_memory_size{node=~"$node"}) by (instance) * 100)`, total: 0, used: 0, unit: 'GiB', diff --git a/packages/web/projects/vgpu/views/poll/admin/Detail.vue b/packages/web/projects/vgpu/views/poll/admin/Detail.vue index fe90fd5..511eba9 100644 --- a/packages/web/projects/vgpu/views/poll/admin/Detail.vue +++ b/packages/web/projects/vgpu/views/poll/admin/Detail.vue @@ -393,7 +393,7 @@ const gaugeConfig = useInstantVector( percent: 0, query: ``, totalQuery: ``, - percentQuery: `avg(sum(hami_container_memory_allocated{node=~"$node"}) by (instance) / sum(hami_memory_size{node=~"$node"}) by (instance) * 100)`, + percentQuery: `avg(sum(hami_container_vmemory_allocated{node=~"$node"}) by (instance) / sum(hami_memory_size{node=~"$node"}) by (instance) * 100)`, total: 0, used: 0, unit: 'GiB', diff --git a/packages/web/projects/vgpu/views/poll/admin/index.vue b/packages/web/projects/vgpu/views/poll/admin/index.vue index 56986c5..249d1ec 100644 --- a/packages/web/projects/vgpu/views/poll/admin/index.vue +++ b/packages/web/projects/vgpu/views/poll/admin/index.vue @@ -26,7 +26,7 @@ 配置 diff --git a/packages/web/projects/vgpu/views/task/admin/index.vue b/packages/web/projects/vgpu/views/task/admin/index.vue index ecb2fda..c15e1e4 100644 --- a/packages/web/projects/vgpu/views/task/admin/index.vue +++ b/packages/web/projects/vgpu/views/task/admin/index.vue @@ -1,44 +1,31 @@ diff --git a/packages/web/src/layout/index.vue b/packages/web/src/layout/index.vue index 6558264..99eeec9 100644 --- a/packages/web/src/layout/index.vue +++ b/packages/web/src/layout/index.vue @@ -11,6 +11,7 @@ import '@tabler/core/dist/css/tabler.min.css'; import { AppMain, Sidebar, TopBar } from './components'; import { useRouter } from 'vue-router' import useParentAction from '~/vgpu/hooks/useParentAction'; +import { parseUrl } from '@/utils'; export default { @@ -48,9 +49,13 @@ export default { try { const messageData = JSON.parse(event.data); if (messageData.type === "ChangeTheRoute") { - this.router.push({ - path: messageData.data, - }); + // const { pathname, query } = parseUrl(messageData.data) + // console.log(messageData.data, 'messageData.data') + // this.router.push({ + // path: pathname, + // query + // }); + this.router.replace(messageData.data) } } catch (e) { } }, diff --git a/packages/web/src/utils/index.js b/packages/web/src/utils/index.js index 7754096..544f532 100644 --- a/packages/web/src/utils/index.js +++ b/packages/web/src/utils/index.js @@ -571,3 +571,17 @@ export const clearEdges = (items) => export const bytesToGB = (bytes) => { return Math.round(bytes / (1024 * 1024 * 1024)); } + +export function parseUrl(url) { + const [pathname, queryString] = url.split('?'); + const query = {}; + + if (queryString) { + queryString.split('&').forEach(pair => { + const [key, value] = pair.split('='); + query[decodeURIComponent(key)] = decodeURIComponent(value || ''); + }); + } + + return { pathname, query }; +}