diff --git a/ceilometer/compute/virt/libvirt/inspector.py b/ceilometer/compute/virt/libvirt/inspector.py index ee89a7391f..984ac63928 100644 --- a/ceilometer/compute/virt/libvirt/inspector.py +++ b/ceilometer/compute/virt/libvirt/inspector.py @@ -109,8 +109,12 @@ class LibvirtInspector(virt_inspector.Inspector): def inspect_cpus(self, instance): domain = self._get_domain_not_shut_off_or_raise(instance) - dom_info = domain.info() - return virt_inspector.CPUStats(number=dom_info[3], time=dom_info[4]) + # TODO(gordc): this can probably be cached since it can be used to get + # all data related + stats = self.connection.domainListGetStats([domain]) + dom_stat = stats[0][1] + return virt_inspector.CPUStats(number=dom_stat['vcpu.current'], + time=dom_stat['cpu.time']) def inspect_cpu_l3_cache(self, instance): domain = self._lookup_by_uuid(instance) diff --git a/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py b/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py index 0f62f95c4a..f980620432 100644 --- a/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py +++ b/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py @@ -48,13 +48,17 @@ class TestLibvirtInspection(base.BaseTestCase): self.addCleanup(mock.patch.stopall) def test_inspect_cpus(self): + fake_stats = [({}, {'cpu.time': 999999, 'vcpu.current': 2})] with contextlib.ExitStack() as stack: stack.enter_context(mock.patch.object(self.inspector.connection, 'lookupByUUIDString', return_value=self.domain)) stack.enter_context(mock.patch.object(self.domain, 'info', return_value=(0, 0, 0, - 2, 999999))) + None, None))) + stack.enter_context(mock.patch.object(self.inspector.connection, + 'domainListGetStats', + return_value=fake_stats)) cpu_info = self.inspector.inspect_cpus(self.instance) self.assertEqual(2, cpu_info.number) self.assertEqual(999999, cpu_info.time)