|
17 | 17 |
|
18 | 18 | package com.cloud.vm; |
19 | 19 |
|
| 20 | +import static com.cloud.configuration.ConfigurationManagerImpl.MIGRATE_VM_ACROSS_CLUSTERS; |
| 21 | + |
20 | 22 | import java.net.URI; |
21 | 23 | import java.sql.PreparedStatement; |
22 | 24 | import java.sql.ResultSet; |
|
45 | 47 | import javax.naming.ConfigurationException; |
46 | 48 | import javax.persistence.EntityExistsException; |
47 | 49 |
|
48 | | -import com.cloud.storage.VolumeApiServiceImpl; |
49 | 50 | import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; |
50 | 51 | import org.apache.cloudstack.annotation.AnnotationService; |
51 | 52 | import org.apache.cloudstack.annotation.dao.AnnotationDao; |
|
98 | 99 | import com.cloud.agent.api.ClusterVMMetaDataSyncAnswer; |
99 | 100 | import com.cloud.agent.api.ClusterVMMetaDataSyncCommand; |
100 | 101 | import com.cloud.agent.api.Command; |
| 102 | +import com.cloud.agent.api.GetVmDiskStatsAnswer; |
| 103 | +import com.cloud.agent.api.GetVmDiskStatsCommand; |
| 104 | +import com.cloud.agent.api.GetVmNetworkStatsAnswer; |
| 105 | +import com.cloud.agent.api.GetVmNetworkStatsCommand; |
| 106 | +import com.cloud.agent.api.GetVmStatsAnswer; |
| 107 | +import com.cloud.agent.api.GetVmStatsCommand; |
101 | 108 | import com.cloud.agent.api.MigrateCommand; |
102 | 109 | import com.cloud.agent.api.MigrateVmToPoolAnswer; |
103 | 110 | import com.cloud.agent.api.ModifyTargetsCommand; |
|
122 | 129 | import com.cloud.agent.api.UnPlugNicAnswer; |
123 | 130 | import com.cloud.agent.api.UnPlugNicCommand; |
124 | 131 | import com.cloud.agent.api.UnregisterVMCommand; |
| 132 | +import com.cloud.agent.api.VmDiskStatsEntry; |
| 133 | +import com.cloud.agent.api.VmNetworkStatsEntry; |
| 134 | +import com.cloud.agent.api.VmStatsEntry; |
125 | 135 | import com.cloud.agent.api.routing.NetworkElementCommand; |
126 | 136 | import com.cloud.agent.api.to.DiskTO; |
127 | 137 | import com.cloud.agent.api.to.DpdkTO; |
|
208 | 218 | import com.cloud.storage.Volume; |
209 | 219 | import com.cloud.storage.Volume.Type; |
210 | 220 | import com.cloud.storage.VolumeApiService; |
| 221 | +import com.cloud.storage.VolumeApiServiceImpl; |
211 | 222 | import com.cloud.storage.VolumeVO; |
212 | 223 | import com.cloud.storage.dao.DiskOfferingDao; |
213 | 224 | import com.cloud.storage.dao.GuestOSCategoryDao; |
|
254 | 265 | import com.cloud.vm.snapshot.VMSnapshotVO; |
255 | 266 | import com.cloud.vm.snapshot.dao.VMSnapshotDao; |
256 | 267 |
|
257 | | -import static com.cloud.configuration.ConfigurationManagerImpl.MIGRATE_VM_ACROSS_CLUSTERS; |
258 | | - |
259 | 268 | public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMachineManager, VmWorkJobHandler, Listener, Configurable { |
260 | 269 | private static final Logger s_logger = Logger.getLogger(VirtualMachineManagerImpl.class); |
261 | 270 |
|
@@ -5825,4 +5834,98 @@ protected VMInstanceVO findVmById(Long vmId) { |
5825 | 5834 | assert vm != null; |
5826 | 5835 | return vm; |
5827 | 5836 | } |
| 5837 | + |
| 5838 | + @Override |
| 5839 | + public HashMap<Long, ? extends VmStats> getVirtualMachineStatistics(long hostId, String hostName, List<Long> vmIds) { |
| 5840 | + HashMap<Long, VmStatsEntry> vmStatsById = new HashMap<>(); |
| 5841 | + if (CollectionUtils.isEmpty(vmIds)) { |
| 5842 | + return vmStatsById; |
| 5843 | + } |
| 5844 | + Map<Long, VMInstanceVO> vmMap = new HashMap<>(); |
| 5845 | + for (Long vmId : vmIds) { |
| 5846 | + vmMap.put(vmId, _vmDao.findById(vmId)); |
| 5847 | + } |
| 5848 | + return getVirtualMachineStatistics(hostId, hostName, vmMap); |
| 5849 | + } |
| 5850 | + |
| 5851 | + @Override |
| 5852 | + public HashMap<Long, ? extends VmStats> getVirtualMachineStatistics(long hostId, String hostName, Map<Long, ? extends VirtualMachine> vmMap) { |
| 5853 | + HashMap<Long, VmStatsEntry> vmStatsById = new HashMap<>(); |
| 5854 | + if (MapUtils.isEmpty(vmMap)) { |
| 5855 | + return vmStatsById; |
| 5856 | + } |
| 5857 | + Map<String, Long> vmNames = new HashMap<>(); |
| 5858 | + for (Map.Entry<Long, ? extends VirtualMachine> vmEntry : vmMap.entrySet()) { |
| 5859 | + vmNames.put(vmEntry.getValue().getInstanceName(), vmEntry.getKey()); |
| 5860 | + } |
| 5861 | + Answer answer = _agentMgr.easySend(hostId, new GetVmStatsCommand(new ArrayList<>(vmNames.keySet()), _hostDao.findById(hostId).getGuid(), hostName)); |
| 5862 | + if (answer == null || !answer.getResult()) { |
| 5863 | + s_logger.warn("Unable to obtain VM statistics."); |
| 5864 | + return vmStatsById; |
| 5865 | + } else { |
| 5866 | + HashMap<String, VmStatsEntry> vmStatsByName = ((GetVmStatsAnswer)answer).getVmStatsMap(); |
| 5867 | + if (vmStatsByName == null) { |
| 5868 | + s_logger.warn("Unable to obtain VM statistics."); |
| 5869 | + return vmStatsById; |
| 5870 | + } |
| 5871 | + for (Map.Entry<String, VmStatsEntry> entry : vmStatsByName.entrySet()) { |
| 5872 | + vmStatsById.put(vmNames.get(entry.getKey()), entry.getValue()); |
| 5873 | + } |
| 5874 | + } |
| 5875 | + return vmStatsById; |
| 5876 | + } |
| 5877 | + |
| 5878 | + @Override |
| 5879 | + public HashMap<Long, List<? extends VmDiskStats>> getVmDiskStatistics(long hostId, String hostName, Map<Long, ? extends VirtualMachine> vmMap) { |
| 5880 | + HashMap<Long, List<? extends VmDiskStats>> vmDiskStatsById = new HashMap<>(); |
| 5881 | + if (MapUtils.isEmpty(vmMap)) { |
| 5882 | + return vmDiskStatsById; |
| 5883 | + } |
| 5884 | + Map<String, Long> vmNames = new HashMap<>(); |
| 5885 | + for (Map.Entry<Long, ? extends VirtualMachine> vmEntry : vmMap.entrySet()) { |
| 5886 | + vmNames.put(vmEntry.getValue().getInstanceName(), vmEntry.getKey()); |
| 5887 | + } |
| 5888 | + Answer answer = _agentMgr.easySend(hostId, new GetVmDiskStatsCommand(new ArrayList<>(vmNames.keySet()), _hostDao.findById(hostId).getGuid(), hostName)); |
| 5889 | + if (answer == null || !answer.getResult()) { |
| 5890 | + s_logger.warn("Unable to obtain VM disk statistics."); |
| 5891 | + return vmDiskStatsById; |
| 5892 | + } else { |
| 5893 | + HashMap<String, List<VmDiskStatsEntry>> vmDiskStatsByName = ((GetVmDiskStatsAnswer)answer).getVmDiskStatsMap(); |
| 5894 | + if (vmDiskStatsByName == null) { |
| 5895 | + s_logger.warn("Unable to obtain VM disk statistics."); |
| 5896 | + return vmDiskStatsById; |
| 5897 | + } |
| 5898 | + for (Map.Entry<String, List<VmDiskStatsEntry>> entry: vmDiskStatsByName.entrySet()) { |
| 5899 | + vmDiskStatsById.put(vmNames.get(entry.getKey()), entry.getValue()); |
| 5900 | + } |
| 5901 | + } |
| 5902 | + return vmDiskStatsById; |
| 5903 | + } |
| 5904 | + |
| 5905 | + @Override |
| 5906 | + public HashMap<Long, List<? extends VmNetworkStats>> getVmNetworkStatistics(long hostId, String hostName, Map<Long, ? extends VirtualMachine> vmMap) { |
| 5907 | + HashMap<Long, List<? extends VmNetworkStats>> vmNetworkStatsById = new HashMap<>(); |
| 5908 | + if (MapUtils.isEmpty(vmMap)) { |
| 5909 | + return vmNetworkStatsById; |
| 5910 | + } |
| 5911 | + Map<String, Long> vmNames = new HashMap<>(); |
| 5912 | + for (Map.Entry<Long, ? extends VirtualMachine> vmEntry : vmMap.entrySet()) { |
| 5913 | + vmNames.put(vmEntry.getValue().getInstanceName(), vmEntry.getKey()); |
| 5914 | + } |
| 5915 | + Answer answer = _agentMgr.easySend(hostId, new GetVmNetworkStatsCommand(new ArrayList<>(vmNames.keySet()), _hostDao.findById(hostId).getGuid(), hostName)); |
| 5916 | + if (answer == null || !answer.getResult()) { |
| 5917 | + s_logger.warn("Unable to obtain VM network statistics."); |
| 5918 | + return vmNetworkStatsById; |
| 5919 | + } else { |
| 5920 | + HashMap<String, List<VmNetworkStatsEntry>> vmNetworkStatsByName = ((GetVmNetworkStatsAnswer)answer).getVmNetworkStatsMap(); |
| 5921 | + if (vmNetworkStatsByName == null) { |
| 5922 | + s_logger.warn("Unable to obtain VM network statistics."); |
| 5923 | + return vmNetworkStatsById; |
| 5924 | + } |
| 5925 | + for (Map.Entry<String, List<VmNetworkStatsEntry>> entry: vmNetworkStatsByName.entrySet()) { |
| 5926 | + vmNetworkStatsById.put(vmNames.get(entry.getKey()), entry.getValue()); |
| 5927 | + } |
| 5928 | + } |
| 5929 | + return vmNetworkStatsById; |
| 5930 | + } |
5828 | 5931 | } |
0 commit comments