From e8c77a02e0f0e0552694ef03a5edd9a2775642a6 Mon Sep 17 00:00:00 2001 From: Gautam Prasad Date: Wed, 13 Mar 2019 01:41:41 -0400 Subject: [PATCH] Adapt to the inspector api signature All of the inspector interface methods takes in instance being inspected and duration of seconds over which metric needs to be calculated. Though the duration parameter is not used, the method signaures need to be updated to match ceilometer changes [1]. [1] 90560e42fd1b589ebb03b8629cf591dee8e559a6 Change-Id: I3ad8da0dc9cd26e269bf18f26231063d122faf98 --- .../compute/virt/powervm/inspector.py | 27 +++++++-- .../compute/virt/powervm/test_inspector.py | 57 ++++++++++--------- 2 files changed, 50 insertions(+), 34 deletions(-) diff --git a/ceilometer_powervm/compute/virt/powervm/inspector.py b/ceilometer_powervm/compute/virt/powervm/inspector.py index fffe302..45e6374 100644 --- a/ceilometer_powervm/compute/virt/powervm/inspector.py +++ b/ceilometer_powervm/compute/virt/powervm/inspector.py @@ -1,4 +1,4 @@ -# Copyright 2015, 2017 IBM Corp. +# Copyright 2015, 2019 IBM Corp. # # All Rights Reserved. # @@ -83,7 +83,7 @@ class PowerVMInspector(virt_inspector.Inspector): LOG.debug("Host UUID: %s" % hosts[0].uuid) return hosts[0].uuid - def inspect_instance(self, instance, duration=None): + def inspect_instance(self, instance, duration): """Inspect the statistics for an instance. :param instance: the target instance @@ -225,10 +225,15 @@ class PowerVMInspector(virt_inspector.Inspector): child_type=pvm_net.CNA.schema_type) return pvm_net.CNA.wrap(client_cna_resp) - def inspect_vnics(self, instance): + def inspect_vnics(self, instance, duration): """Inspect the vNIC statistics for an instance. :param instance: the target instance + :param duration: the last 'n' seconds, over which the value should be + inspected. + + The PowerVM implementation does not make use of the duration + field. :return: for each vNIC, the number of bytes & packets received and transmitted """ @@ -277,7 +282,7 @@ class PowerVMInspector(virt_inspector.Inspector): tx_drop=0, tx_errors=0) - def inspect_vnic_rates(self, instance, duration=None): + def inspect_vnic_rates(self, instance, duration): """Inspect the vNIC rate statistics for an instance. :param instance: the target instance @@ -358,12 +363,17 @@ class PowerVMInspector(virt_inspector.Inspector): mac=mac, fref=None, parameters=None, rx_bytes_rate=rx_rate, tx_bytes_rate=tx_rate) - def inspect_disks(self, instance): + def inspect_disks(self, instance, duration): """Inspect the disk statistics for an instance. The response is a generator of the values. :param instance: the target instance + :param duration: the last 'n' seconds, over which the value should be + inspected. + + The PowerVM implementation does not make use of the duration + field. :return disk: The Disk indicating the device for the storage device. :return stats: The DiskStats indicating the read/write data to the device. @@ -400,12 +410,17 @@ class PowerVMInspector(virt_inspector.Inspector): write_bytes=adpt.write_bytes, errors=0, wr_total_times=0, rd_total_times=0) - def inspect_disk_iops(self, instance): + def inspect_disk_iops(self, instance, duration): """Inspect the Disk Input/Output operations per second for an instance. The response is a generator of the values. :param instance: the target instance + :param duration: the last 'n' seconds, over which the value should be + inspected. + + The PowerVM implementation does not make use of the duration + field. :return disk: The Disk indicating the device for the storage device. :return stats: The DiskIOPSStats indicating the I/O operations per second for the device. diff --git a/ceilometer_powervm/tests/compute/virt/powervm/test_inspector.py b/ceilometer_powervm/tests/compute/virt/powervm/test_inspector.py index d9fb854..aa3efce 100644 --- a/ceilometer_powervm/tests/compute/virt/powervm/test_inspector.py +++ b/ceilometer_powervm/tests/compute/virt/powervm/test_inspector.py @@ -1,4 +1,4 @@ -# Copyright 2015, 2017 IBM Corp. +# Copyright 2015, 2019 IBM Corp. # # All Rights Reserved. # @@ -85,7 +85,7 @@ class TestPowerVMInspector(base.BaseTestCase): # in the sample self.mock_metrics.get_latest_metric.return_value = None, None self.assertRaises(virt_inspector.InstanceNotFoundException, - self.inspector.inspect_instance, mock.Mock()) + self.inspector.inspect_instance, mock.Mock(), None) def mock_metric(util_cap, util_uncap, idle, donated, entitled): """Helper method to create mock proc metrics.""" @@ -103,7 +103,7 @@ class TestPowerVMInspector(base.BaseTestCase): self.mock_metrics.get_latest_metric.return_value = ( mock.Mock(), mock_metric(7000, 50, 1000, 5000, 10000)) self.mock_metrics.get_previous_metric.return_value = None, None - resp = self.inspector.inspect_instance(mock.Mock()) + resp = self.inspector.inspect_instance(mock.Mock(), None) self.assertEqual(7050, resp.cpu_time) self.assertEqual(12, resp.cpu_number) @@ -114,7 +114,7 @@ class TestPowerVMInspector(base.BaseTestCase): self.mock_metrics.get_previous_metric.return_value = mock.Mock(), prev # Execute and validate - resp = self.inspector.inspect_instance(mock.Mock()) + resp = self.inspector.inspect_instance(mock.Mock(), None) self.assertEqual(.5, resp.cpu_util) # Mock an instance with a dedicated processor, but idling and donating @@ -126,7 +126,7 @@ class TestPowerVMInspector(base.BaseTestCase): self.mock_metrics.get_previous_metric.return_value = mock.Mock(), prev # Execute and validate - resp = self.inspector.inspect_instance(mock.Mock()) + resp = self.inspector.inspect_instance(mock.Mock(), None) self.assertEqual(51.0, resp.cpu_util) # Mock an instance with a shared processor. By nature, this doesn't @@ -138,7 +138,7 @@ class TestPowerVMInspector(base.BaseTestCase): self.mock_metrics.get_previous_metric.return_value = mock.Mock(), prev # Execute and validate - resp = self.inspector.inspect_instance(mock.Mock()) + resp = self.inspector.inspect_instance(mock.Mock(), None) self.assertEqual(80.0, resp.cpu_util) # Mock an instance with a shared processor - but using cycles from @@ -151,7 +151,7 @@ class TestPowerVMInspector(base.BaseTestCase): # Execute and validate. This should be running at 300% CPU # utilization. Fast! - resp = self.inspector.inspect_instance(mock.Mock()) + resp = self.inspector.inspect_instance(mock.Mock(), None) self.assertEqual(300.0, resp.cpu_util) # Mock an instance that hasn't been started yet. @@ -161,7 +161,7 @@ class TestPowerVMInspector(base.BaseTestCase): self.mock_metrics.get_previous_metric.return_value = mock.Mock(), prev # This should have 0% utilization - resp = self.inspector.inspect_instance(mock.Mock()) + resp = self.inspector.inspect_instance(mock.Mock(), None) self.assertEqual(0.0, resp.cpu_util) @staticmethod @@ -211,15 +211,16 @@ class TestPowerVMInspector(base.BaseTestCase): # Validate that an error is raised if the instance can't be found in # the sample data. self.mock_metrics.get_latest_metric.return_value = None, None - self.assertRaises(virt_inspector.InstanceNotFoundException, - list, self.inspector.inspect_vnics(mock.Mock())) + self.assertRaises(virt_inspector.InstanceNotFoundException, list, + self.inspector.inspect_vnics(mock.Mock(), None)) # Validate that no data is returned if there is a current metric, # just no network within it. mock_empty_net = mock.MagicMock() mock_empty_net.network = None self.mock_metrics.get_latest_metric.return_value = None, mock_empty_net - self.assertEqual([], list(self.inspector.inspect_vnics(mock.Mock()))) + self.assertEqual( + [], list(self.inspector.inspect_vnics(mock.Mock(), None))) # Build a couple CNAs and verify we get the proper list back mock_wrap.return_value = self._build_mock_cnas() @@ -227,7 +228,7 @@ class TestPowerVMInspector(base.BaseTestCase): mock_metrics = self._build_cur_mock_vnic_metrics() self.mock_metrics.get_latest_metric.return_value = None, mock_metrics - resp = list(self.inspector.inspect_vnics(mock.Mock())) + resp = list(self.inspector.inspect_vnics(mock.Mock(), None)) self.assertEqual(3, len(resp)) stats1 = resp[0] @@ -249,16 +250,16 @@ class TestPowerVMInspector(base.BaseTestCase): # the sample data. self.mock_metrics.get_latest_metric.return_value = None, None self.mock_metrics.get_previous_metric.return_value = None, None - self.assertRaises(virt_inspector.InstanceNotFoundException, - list, self.inspector.inspect_vnic_rates(mock.Mock())) + self.assertRaises(virt_inspector.InstanceNotFoundException, list, + self.inspector.inspect_vnic_rates(mock.Mock(), None)) # Validate that no data is returned if there is a current metric, # just no network within it. mock_empty_net = mock.MagicMock() mock_empty_net.network = None self.mock_metrics.get_latest_metric.return_value = None, mock_empty_net - self.assertEqual([], - list(self.inspector.inspect_vnic_rates(mock.Mock()))) + self.assertEqual( + [], list(self.inspector.inspect_vnic_rates(mock.Mock(), None))) # Build the response LPAR data mock_wrap.return_value = self._build_mock_cnas() @@ -276,7 +277,7 @@ class TestPowerVMInspector(base.BaseTestCase): mock_prev) # Execute - resp = list(self.inspector.inspect_vnic_rates(mock.Mock())) + resp = list(self.inspector.inspect_vnic_rates(mock.Mock(), None)) self.assertEqual(3, len(resp)) # First metric. No delta @@ -335,15 +336,15 @@ class TestPowerVMInspector(base.BaseTestCase): # the sample data. self.mock_metrics.get_latest_metric.return_value = None, None self.mock_metrics.get_previous_metric.return_value = None, None - self.assertRaises(virt_inspector.InstanceNotFoundException, - list, self.inspector.inspect_disk_iops(mock.Mock())) + self.assertRaises(virt_inspector.InstanceNotFoundException, list, + self.inspector.inspect_disk_iops(mock.Mock(), None)) # Validate that no data is returned if there is a current metric, # just no storage within it. mock_empty_st = mock.MagicMock(storage=None) self.mock_metrics.get_latest_metric.return_value = None, mock_empty_st - self.assertEqual([], - list(self.inspector.inspect_disk_iops(mock.Mock()))) + self.assertEqual( + [], list(self.inspector.inspect_disk_iops(mock.Mock(), None))) # Current metric data mock_cur = self._build_cur_mock_stor_metrics() @@ -351,8 +352,8 @@ class TestPowerVMInspector(base.BaseTestCase): self.mock_metrics.get_latest_metric.return_value = cur_date, mock_cur # Validate that if there is no previous data, get no data back. - self.assertEqual([], - list(self.inspector.inspect_disk_iops(mock.Mock()))) + self.assertEqual( + [], list(self.inspector.inspect_disk_iops(mock.Mock(), None))) # Build the previous mock_prev = self._build_prev_mock_stor_metrics() @@ -361,7 +362,7 @@ class TestPowerVMInspector(base.BaseTestCase): mock_prev) # Execute - resp = list(self.inspector.inspect_disk_iops(mock.Mock())) + resp = list(self.inspector.inspect_disk_iops(mock.Mock(), None)) self.assertEqual(3, len(resp)) # Two vSCSI's @@ -383,15 +384,15 @@ class TestPowerVMInspector(base.BaseTestCase): # Validate that an error is raised if the instance can't be found in # the sample data. self.mock_metrics.get_latest_metric.return_value = None, None - self.assertRaises(virt_inspector.InstanceNotFoundException, - list, self.inspector.inspect_disks(mock.Mock())) + self.assertRaises(virt_inspector.InstanceNotFoundException, list, + self.inspector.inspect_disks(mock.Mock(), None)) # Validate that no data is returned if there is a current metric, # just no storage within it. mock_empty_st = mock.MagicMock(storage=None) self.mock_metrics.get_latest_metric.return_value = None, mock_empty_st self.assertEqual([], - list(self.inspector.inspect_disks(mock.Mock()))) + list(self.inspector.inspect_disks(mock.Mock(), None))) # Current metric data mock_cur = self._build_cur_mock_stor_metrics() @@ -399,7 +400,7 @@ class TestPowerVMInspector(base.BaseTestCase): self.mock_metrics.get_latest_metric.return_value = cur_date, mock_cur # Execute - resp = list(self.inspector.inspect_disks(mock.Mock())) + resp = list(self.inspector.inspect_disks(mock.Mock(), None)) self.assertEqual(3, len(resp)) # Two vSCSIs.