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.1 KiB
						
					
					
				
			
		
		
	
	
							122 lines
						
					
					
						
							3.1 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>
 |