XenAPI: failed to poll cpu_util
VM_metrics is obsoleted, which will fail the polling on meter of cpu_util. This commit will fix it with other APIs. Change-Id: I3b87f5a5780e21366549f6daae7d8afdb1608f27 Related-bug: 1614874
This commit is contained in:
parent
4ce3339670
commit
1374cf7d22
|
@ -120,18 +120,15 @@ class XenapiInspector(virt_inspector.Inspector):
|
|||
def inspect_cpu_util(self, instance, duration=None):
|
||||
instance_name = util.instance_name(instance)
|
||||
vm_ref = self._lookup_by_name(instance_name)
|
||||
metrics_ref = self._call_xenapi("VM.get_metrics", vm_ref)
|
||||
metrics_rec = self._call_xenapi("VM_metrics.get_record",
|
||||
metrics_ref)
|
||||
vcpus_number = metrics_rec['VCPUs_number']
|
||||
vcpus_utils = metrics_rec['VCPUs_utilisation']
|
||||
if len(vcpus_utils) == 0:
|
||||
msg = _("Could not get VM %s CPU Utilization") % instance_name
|
||||
vcpus_number = int(self._call_xenapi("VM.get_VCPUs_max", vm_ref))
|
||||
if vcpus_number <= 0:
|
||||
msg = _("Could not get VM %s CPU number") % instance_name
|
||||
raise XenapiException(msg)
|
||||
|
||||
utils = 0.0
|
||||
for num in range(int(vcpus_number)):
|
||||
utils += vcpus_utils.get(str(num))
|
||||
for index in range(vcpus_number):
|
||||
utils += float(self._call_xenapi("VM.query_data_source",
|
||||
vm_ref,
|
||||
"cpu%d" % index))
|
||||
utils = utils / int(vcpus_number) * 100
|
||||
return virt_inspector.CPUUtilStats(util=utils)
|
||||
|
||||
|
|
|
@ -63,18 +63,12 @@ class TestXenapiInspection(base.BaseTestCase):
|
|||
fake_stat = virt_inspector.CPUUtilStats(util=40)
|
||||
|
||||
def fake_xenapi_request(method, args):
|
||||
metrics_rec = {
|
||||
'memory_actual': '536870912',
|
||||
'VCPUs_number': '1',
|
||||
'VCPUs_utilisation': {'0': 0.4, }
|
||||
}
|
||||
|
||||
if method == 'VM.get_by_name_label':
|
||||
return ['vm_ref']
|
||||
elif method == 'VM.get_metrics':
|
||||
return 'metrics_ref'
|
||||
elif method == 'VM_metrics.get_record':
|
||||
return metrics_rec
|
||||
elif method == 'VM.get_VCPUs_max':
|
||||
return '1'
|
||||
elif method == 'VM.query_data_source':
|
||||
return 0.4
|
||||
else:
|
||||
return None
|
||||
|
||||
|
|
Loading…
Reference in New Issue