From 534eec0c12a6d2b65afbd19905a186b1afef7f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=9A=E6=96=87?= <1179111926@qq.com> Date: Mon, 4 Aug 2025 18:45:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/projects/vgpu/components/TabTop.vue | 1 + .../vgpu/views/monitor/overview/index.vue | 44 +++++++++++-------- .../projects/vgpu/views/poll/admin/index.vue | 6 +-- packages/web/src/utils/index.js | 5 +++ 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/packages/web/projects/vgpu/components/TabTop.vue b/packages/web/projects/vgpu/components/TabTop.vue index d3efdd1..f12ea06 100644 --- a/packages/web/projects/vgpu/components/TabTop.vue +++ b/packages/web/projects/vgpu/components/TabTop.vue @@ -111,6 +111,7 @@ onMounted(async () => { query: v.query, }) .then((res) => { + console.log(v.query, res, 'res') currentConfig.value[i].data = res.data.map((item) => ({ name: item.metric[v.nameKey], value: item.value, diff --git a/packages/web/projects/vgpu/views/monitor/overview/index.vue b/packages/web/projects/vgpu/views/monitor/overview/index.vue index 8ee6f77..e8d81ee 100644 --- a/packages/web/projects/vgpu/views/monitor/overview/index.vue +++ b/packages/web/projects/vgpu/views/monitor/overview/index.vue @@ -95,10 +95,11 @@ import { } from './getOptions'; import Block from './Block.vue'; import './style.scss'; -import { timeParse, getDaysInRange, getRandom } from '@/utils'; +import { timeParse, getDaysInRange, getRandom, bytesToGB } from '@/utils'; import { useRouter } from 'vue-router'; import UserCard from '@/components/UserCard.vue'; import nodeApi from '~/vgpu/api/node'; +import pollApi from '~/vgpu/api/poll'; import taskApi from '~/vgpu/api/task'; import monitorApi from '~/vgpu/api/monitor'; import cardApi from '~/vgpu/api/card'; @@ -134,9 +135,9 @@ const cardGaugeConfig = useInstantVector([ { title: 'CPU 使用率', percent: 0, - query: `avg(sum (hami_container_vgpu_allocated) by (instance))`, - totalQuery: `avg(sum (hami_vgpu_count) by (instance))`, - percentQuery: `avg(sum (hami_container_vgpu_allocated) by (instance))/avg(sum (hami_vgpu_count) by (instance)) *100`, + query: `avg(count(node_cpu_seconds_total{mode="idle"}) by (instance)) * (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])))`, + totalQuery: `avg(count(node_cpu_seconds_total{mode="idle"}) by (instance))`, + percentQuery: ``, total: 0, used: 0, unit: '核', @@ -144,9 +145,9 @@ const cardGaugeConfig = useInstantVector([ { title: '内存 使用率', percent: 0, - query: `avg(sum (hami_container_vgpu_allocated) by (instance))`, - totalQuery: `avg(sum (hami_vgpu_count) by (instance))`, - percentQuery: `avg(sum (hami_container_vgpu_allocated) by (instance))/avg(sum (hami_vgpu_count) by (instance)) *100`, + query: `avg(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / 1024 / 1024 / 1024`, + totalQuery: `avg(node_memory_MemTotal_bytes) / 1024 / 1024 / 1024`, + percentQuery: ``, total: 0, used: 0, unit: 'GiB', @@ -154,12 +155,12 @@ const cardGaugeConfig = useInstantVector([ { title: '磁盘 使用率', percent: 0, - query: `avg(sum (hami_container_vgpu_allocated) by (instance))`, - totalQuery: `avg(sum (hami_vgpu_count) by (instance))`, - percentQuery: `avg(sum (hami_container_vgpu_allocated) by (instance))/avg(sum (hami_vgpu_count) by (instance)) *100`, + query: `avg(node_filesystem_size_bytes{fstype!~"tmpfs|overlay"} - node_filesystem_free_bytes{fstype!~"tmpfs|overlay"}) / 1024 / 1024 / 1024`, + totalQuery: `avg(node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) / 1024 / 1024 / 1024`, + percentQuery: ``, total: 0, used: 0, - unit: '块', + unit: 'GiB', }, { title: 'vGPU 分配率', @@ -244,7 +245,7 @@ const resourceOverview = ref([ title: '磁盘', count: 0, icon: 'vgpu-disk', - unit: '个', + unit: 'GIB', }, { title: '显卡', @@ -312,6 +313,8 @@ const nodeData = useFetchList(nodeApi.getNodeListReq({ filters: {} })); const cardData = useFetchList(cardApi.getCardListReq({ filters: {} })); +const pollData = useFetchList(pollApi.getPollList(), 'data'); + const cardDetail = useInstantVector([ { title: 'vGPU', @@ -377,18 +380,18 @@ const nodeUsedTop = { key: 'used', config: [ { - tab: 'GPU', - key: 'gpu', - nameKey: 'node', + tab: 'CPU', + key: 'cpu', + nameKey: 'instance', data: [], - query: 'topk(5, avg(hami_core_util_avg) by (node))', + query: 'topk(5, avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])))', }, { tab: '内存', key: 'internal', - nameKey: 'node', + nameKey: 'instance', data: [], - query: 'topk(5, avg(hami_core_util_avg) by (node))', + query: 'topk(5, ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes))', }, { tab: '算力', @@ -491,7 +494,10 @@ const fetchRangeData = () => { watchEffect(() => { resourceOverview.value[0].count = nodeData.value.length; - + resourceOverview.value[1].count = pollData.value.length; + resourceOverview.value[2].count = cardGaugeConfig.value[0].total; + resourceOverview.value[3].count = Math.round(cardGaugeConfig.value[1].total); + resourceOverview.value[4].count = Math.round(cardGaugeConfig.value[2].total); resourceOverview.value[5].count = cardData.value.length; resourceOverview.value[6].count = cardGaugeConfig.value[3].total; resourceOverview.value[7].count = cardGaugeConfig.value[4].total; diff --git a/packages/web/projects/vgpu/views/poll/admin/index.vue b/packages/web/projects/vgpu/views/poll/admin/index.vue index 6101b15..6b3af46 100644 --- a/packages/web/projects/vgpu/views/poll/admin/index.vue +++ b/packages/web/projects/vgpu/views/poll/admin/index.vue @@ -104,6 +104,7 @@ import { ref, onMounted, computed, watchEffect } from 'vue'; import BlockBox from '@/components/BlockBox.vue'; import { Remove } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' +import { bytesToGB } from '@/utils'; // 数据列表相关 const list = ref([]) @@ -135,11 +136,6 @@ const paginatedList = computed(() => { // console.log(currentPage.value, pageSize.value, 88) // }) -// 字节转GB -const bytesToGB = (bytes) => { - return Math.round(bytes / (1024 * 1024 * 1024)); -} - // 分页大小变化 const handleSizeChange = (val) => { pageSize.value = val diff --git a/packages/web/src/utils/index.js b/packages/web/src/utils/index.js index 31735c4..7754096 100644 --- a/packages/web/src/utils/index.js +++ b/packages/web/src/utils/index.js @@ -566,3 +566,8 @@ export const clearEdges = (items) => ...item, children: clearEdges(item.edges.children), })); + +// 字节转GB +export const bytesToGB = (bytes) => { + return Math.round(bytes / (1024 * 1024 * 1024)); +}