From 5bc98d2e83cb906f0d63824f6e006e5ea3e73119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=9A=E6=96=87?= <1179111926@qq.com> Date: Tue, 5 Aug 2025 18:38:08 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=8A=82=E7=82=B9=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web/projects/vgpu/api/node.js | 8 +- .../projects/vgpu/components/previewBar.vue | 66 ++++-- .../projects/vgpu/views/node/admin/Detail.vue | 210 ++++++++++++------ .../vgpu/views/node/admin/getOptions.js | 73 +++++- .../projects/vgpu/views/node/admin/index.vue | 166 ++++++++------ 5 files changed, 356 insertions(+), 167 deletions(-) diff --git a/packages/web/projects/vgpu/api/node.js b/packages/web/projects/vgpu/api/node.js index e90c9a8..8b32007 100644 --- a/packages/web/projects/vgpu/api/node.js +++ b/packages/web/projects/vgpu/api/node.js @@ -2,7 +2,6 @@ import request from '@/utils/request'; const apiPrefix = '/api/vgpu'; - class nodeApi { getNodeList(data) { return { @@ -46,6 +45,13 @@ class nodeApi { data, }); } + stop(data) { + return request({ + url: apiPrefix + '/v1/node/status/update', + method: 'POST', + data, + }); + } } export default new nodeApi(); diff --git a/packages/web/projects/vgpu/components/previewBar.vue b/packages/web/projects/vgpu/components/previewBar.vue index 27f2aaf..880264c 100644 --- a/packages/web/projects/vgpu/components/previewBar.vue +++ b/packages/web/projects/vgpu/components/previewBar.vue @@ -1,32 +1,19 @@ - + @@ -36,16 +36,19 @@ From 877a67680698655b0bbc843f9bd9007e23f60e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=9A=E6=96=87?= <1179111926@qq.com> Date: Tue, 5 Aug 2025 18:50:53 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A5=BD=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/projects/vgpu/components/previewBar.vue | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/web/projects/vgpu/components/previewBar.vue b/packages/web/projects/vgpu/components/previewBar.vue index 880264c..797f031 100644 --- a/packages/web/projects/vgpu/components/previewBar.vue +++ b/packages/web/projects/vgpu/components/previewBar.vue @@ -57,14 +57,14 @@ const echartsRef = ref(); const totalTop = { title: `${props.title}资源分配率 Top5`, config: [ - { + props.type === 'node' && { tab: 'CPU', key: 'cpu', nameKey: 'instance', data: [], query: `topk(5, sum(hami_container_vcore_allocated) by (instance) / sum(hami_core_size) by (instance) * 100)`, }, - { + props.type === 'node' && { tab: '内存', key: 'internal', nameKey: 'instance', @@ -92,21 +92,20 @@ const totalTop = { nameKey: props.type, query: `topk(5, sum(hami_container_vmemory_allocated{}) by (${props.type}) / sum(hami_memory_size{}) by (${props.type}) * 100)`, }, - ], + ].filter(Boolean), }; const usedTop = { title: `${props.title}资源使用率 Top5`, config: [ - { + props.type === 'node' && { tab: 'CPU', key: 'cpu', nameKey: 'instance', data: [], - query: `topk(5, (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100) -`, + query: `topk(5, (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100)`, }, - { + props.type === 'node' && { tab: '内存', key: 'internal', nameKey: 'instance', @@ -127,7 +126,7 @@ const usedTop = { nameKey: props.type, query: `topk(5, sum(hami_memory_used) by (${props.type}) / sum(hami_memory_size) by (${props.type}) * 100)`, }, - ], + ].filter(Boolean), }; const pieConfig = { From ad7e94f1786adefbf721421e08b032586020eec3 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 11:48:28 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=B1=A0=E8=AF=A6?= =?UTF-8?q?=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web/projects/vgpu/api/poll.js | 9 +- packages/web/projects/vgpu/router.js | 5 + .../projects/vgpu/views/poll/admin/Detail.vue | 483 +++++++++++------- .../vgpu/views/poll/admin/getOptions.js | 73 ++- .../projects/vgpu/views/poll/admin/index.vue | 5 +- 5 files changed, 388 insertions(+), 187 deletions(-) diff --git a/packages/web/projects/vgpu/api/poll.js b/packages/web/projects/vgpu/api/poll.js index 11ba586..d0e7238 100644 --- a/packages/web/projects/vgpu/api/poll.js +++ b/packages/web/projects/vgpu/api/poll.js @@ -2,7 +2,6 @@ import request from '@/utils/request'; const apiPrefix = '/api/vgpu'; - class pollApi { getPollList(params) { return request({ @@ -44,6 +43,14 @@ class pollApi { }); } + getDetailNodeList(data) { + return { + url: apiPrefix + '/v1/resource/pool/detail', + method: 'post', + data, + }; + } + // getNodes(data) { // return request({ // url: apiPrefix + '/v1/nodes', diff --git a/packages/web/projects/vgpu/router.js b/packages/web/projects/vgpu/router.js index ca7f48a..058d853 100644 --- a/packages/web/projects/vgpu/router.js +++ b/packages/web/projects/vgpu/router.js @@ -26,6 +26,11 @@ export default (Layout) => ({ name: 'poll-admin', meta: { title: '资源池管理', icon: 'vgpu-pool-tab', noCache: true }, }, + { + path: '/admin/vgpu/poll/admin/:uid', + component: () => import('~/vgpu/views/poll/admin/Detail.vue'), + name: 'poll-admin-detail', + }, { path: '/admin/vgpu/node/admin', component: () => import('~/vgpu/views/node/admin/index.vue'), diff --git a/packages/web/projects/vgpu/views/poll/admin/Detail.vue b/packages/web/projects/vgpu/views/poll/admin/Detail.vue index bfc5488..fe90fd5 100644 --- a/packages/web/projects/vgpu/views/poll/admin/Detail.vue +++ b/packages/web/projects/vgpu/views/poll/admin/Detail.vue @@ -1,49 +1,29 @@