@@ -745,6 +748,7 @@ import VolumeManage from '@/views/virtualization/VolumeManage.vue'
import VmManage from '@/views/virtualization/VmManage.vue'
import SnapshotManage from '@/views/virtualization/SnapshotManage.vue'
import BackupManage from '@/views/virtualization/BackupManage.vue'
+import VmMonitor from '@/views/virtualization/VmMonitor.vue'
import { useTagsViewStore } from '@/store/tagsViewStore'
import UserListSelector from '@/components/admin/UserListSelector.vue'
import VmSelectorPopup from '@/components/admin/VmSelectorPopup.vue'
@@ -759,7 +763,7 @@ const serviceName = computed(() => route.query.service_name || '')
const hostId = computed(() => parseInt(route.query.id) || 0)
const activeTab = ref('info')
-const hostTabLoaded = reactive({ image: false, network: false, volume: false, vm: false, snapshot: false, backup: false, networking: false })
+const hostTabLoaded = reactive({ image: false, network: false, volume: false, vm: false, snapshot: false, backup: false, vmMonitor: false, networking: false })
const imageManageRef = ref(null)
const networkManageRef = ref(null)
@@ -767,7 +771,8 @@ const volumeManageRef = ref(null)
const vmManageRef = ref(null)
const snapshotManageRef = ref(null)
const backupManageRef = ref(null)
-const tabRefMap = { image: imageManageRef, network: networkManageRef, volume: volumeManageRef, vm: vmManageRef, snapshot: snapshotManageRef, backup: backupManageRef }
+const vmMonitorRef = ref(null)
+const tabRefMap = { image: imageManageRef, network: networkManageRef, volume: volumeManageRef, vm: vmManageRef, snapshot: snapshotManageRef, backup: backupManageRef, vmMonitor: vmMonitorRef }
watch(activeTab, (tab) => {
if (!['info', 'monitor', 'networking'].includes(tab)) {
diff --git a/src/views/virtualization/VmMonitor.vue b/src/views/virtualization/VmMonitor.vue
new file mode 100644
index 0000000..fb3f0d6
--- /dev/null
+++ b/src/views/virtualization/VmMonitor.vue
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
+
+
+
{{ metricLabels[metric] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+