From fb6cd01753672f7bd70ca29f4c1de6f3d150ba10 Mon Sep 17 00:00:00 2001 From: gord chung Date: Wed, 23 Nov 2016 16:47:30 +0000 Subject: [PATCH] use domainListGetStats to get cputime info() from domain returns cputime value rounded to tenth of a second. we should just use domainListGetStats to get full nanosecond detail. Change-Id: I8d3f5fa8c683a0cbd9cca7072fa4862b8c00c224 --- ceilometer/compute/virt/libvirt/inspector.py | 8 ++++++-- .../tests/unit/compute/virt/libvirt/test_inspector.py | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ceilometer/compute/virt/libvirt/inspector.py b/ceilometer/compute/virt/libvirt/inspector.py index 633c21b16c..595749ad7b 100644 --- a/ceilometer/compute/virt/libvirt/inspector.py +++ b/ceilometer/compute/virt/libvirt/inspector.py @@ -69,8 +69,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 fc8fd2d6b2..ce6118f19f 100644 --- a/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py +++ b/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py @@ -52,13 +52,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)