You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.2 KiB
122 lines
3.2 KiB
<template>
|
|
<div class="task-top-box">
|
|
<TabTop class="item" v-for="item in topConfig" :key="item.key" v-bind="item" :onClick="handleChartClick" />
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import TabTop from '~/vgpu/components/TabTop.vue';
|
|
import { useRouter } from 'vue-router';
|
|
import nodeApi from '~/vgpu/api/node';
|
|
import { ElMessage } from 'element-plus';
|
|
import useParentAction from '~/vgpu/hooks/useParentAction';
|
|
|
|
const { sendRouteChange } = useParentAction();
|
|
const router = useRouter();
|
|
|
|
const handleChartClick = async (params) => {
|
|
const name = params.data.name;
|
|
const activeTabKey = params.tabActive;
|
|
if (activeTabKey === 'node') {
|
|
const { list } = await nodeApi.getNodes({ filters: {} });
|
|
const node = list.find(node => node.name === name);
|
|
if (node) {
|
|
const uuid = node.uid;
|
|
sendRouteChange(`/admin/vgpu/node/admin/${uuid}?nodeName=${name}`);
|
|
} else {
|
|
ElMessage.error('节点未找到');
|
|
}
|
|
} else if (activeTabKey === 'deviceuuid') {
|
|
sendRouteChange(`/admin/vgpu/card/admin/${name}`);
|
|
} else {
|
|
const [containerName, podUid] = name.split(':');
|
|
sendRouteChange(`/admin/vgpu/task/admin/detail?name=${containerName}&podUid=${podUid}`);
|
|
}
|
|
};
|
|
|
|
const topConfig = [
|
|
{
|
|
title: '任务数量分布 Top5',
|
|
key: 'total',
|
|
config: [
|
|
{
|
|
tab: '节点',
|
|
key: 'node',
|
|
nameKey: 'node',
|
|
data: [],
|
|
unit: ' ',
|
|
query:
|
|
'topk(5, count by (node) (sum by (container_pod_uuid, node) (hami_container_vcore_allocated)))',
|
|
},
|
|
{
|
|
tab: '显卡',
|
|
key: 'deviceuuid',
|
|
data: [],
|
|
nameKey: 'deviceuuid',
|
|
unit: ' ',
|
|
query:
|
|
'topk(5, count by (deviceuuid) (sum by (container_pod_uuid, deviceuuid) (hami_container_vcore_allocated)))',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: '任务资源申请 Top5',
|
|
key: 'apply',
|
|
config: [
|
|
// {
|
|
// tab: 'CPU',
|
|
// key: 'cpu',
|
|
// data: [],
|
|
// nameKey: 'container_pod_uuid',
|
|
// unit: '核',
|
|
// query: 'topk(5, sum by(container_pod_uuid) (hami_container_vcore_allocated))',
|
|
// },
|
|
// {
|
|
// tab: '内存',
|
|
// key: 'internal',
|
|
// data: [],
|
|
// unit: 'GiB',
|
|
// nameKey: 'container_pod_uuid',
|
|
// query: 'topk(5, sum by(container_pod_uuid) (hami_container_vmemory_allocated))',
|
|
// },
|
|
{
|
|
tab: '算力',
|
|
key: 'core',
|
|
data: [],
|
|
nameKey: 'container_pod_uuid',
|
|
unit: ' ',
|
|
query: 'topk(5, avg by (container_pod_uuid) (hami_container_vcore_allocated))',
|
|
},
|
|
{
|
|
tab: '显存',
|
|
key: 'memory',
|
|
data: [],
|
|
unit: 'GiB',
|
|
nameKey: 'container_pod_uuid',
|
|
query:
|
|
'topk(5, avg by (container_pod_uuid) (hami_container_vmemory_allocated))/1024',
|
|
},
|
|
{
|
|
tab: 'vGPU',
|
|
key: 'vgpu',
|
|
data: [],
|
|
nameKey: 'container_pod_uuid',
|
|
unit: '个',
|
|
query: 'topk(5, avg by (container_pod_uuid) (hami_container_vgpu_allocated))',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.task-top-box {
|
|
display: flex;
|
|
gap: 25px;
|
|
|
|
.item {
|
|
flex: 1;
|
|
}
|
|
}
|
|
</style>
|