diff --git a/ceilometer_zvm/compute/virt/zvm/utils.py b/ceilometer_zvm/compute/virt/zvm/utils.py index 1ce6b45..0a29233 100644 --- a/ceilometer_zvm/compute/virt/zvm/utils.py +++ b/ceilometer_zvm/compute/virt/zvm/utils.py @@ -340,3 +340,28 @@ def list_instances(hcp_info): instances[node] = userid.upper() return instances + + +def image_performance_query(zhcp_node, inst_list): + cmd = ('smcli Image_Performance_Query -T "%(inst_list)s" -c %(num)s' % + {'inst_list': " ".join(inst_list), 'num': len(inst_list)}) + + with expect_invalid_xcat_resp_data(): + resp = xdsh(zhcp_node, cmd) + raw_data = resp["data"][0][0] + + ipq_kws = { + 'userid': "Guest name:", + 'guest_cpus': "Guest CPUs:", + 'used_cpu_time': "Used CPU time:", + 'used_memory': "Used memory:", + } + + pi_dict = {} + with expect_invalid_xcat_resp_data(): + rpi_list = raw_data.split("".join((zhcp_node, ": \n"))) + for rpi in rpi_list: + pi = translate_xcat_resp(rpi, ipq_kws) + pi_dict[pi['userid']] = pi + + return pi_dict diff --git a/ceilometer_zvm/tests/unit/compute/virt/zvm/test_utils.py b/ceilometer_zvm/tests/unit/compute/virt/zvm/test_utils.py index 981894d..321941d 100644 --- a/ceilometer_zvm/tests/unit/compute/virt/zvm/test_utils.py +++ b/ceilometer_zvm/tests/unit/compute/virt/zvm/test_utils.py @@ -161,6 +161,41 @@ class TestZVMUtils(base.BaseTestCase): self.assertRaises(zvmutils.ZVMException, zvmutils.list_instances, hcp_info) + @mock.patch.object(zvmutils, 'xdsh') + def test_image_performance_query(self, dsh): + res_data = ["zhcp: Number of virtual server IDs: 2 \n" + "zhcp: Guest name: INST1\n" + "zhcp: Used CPU time: \"1710205201 uS\"\n" + "zhcp: Elapsed time: \"6659572798 uS\"\n" + "zhcp: Used memory: \"4189268 KB\"\n" + "zhcp: Guest CPUs: \"2\"\n" + "zhcp: \n" + "zhcp: Guest name: INST2\n" + "zhcp: Used CPU time: \"1710205201 uS\"\n" + "zhcp: Elapsed time: \"6659572798 uS\"\n" + "zhcp: Used memory: \"4189268 KB\"\n" + "zhcp: Guest CPUs: \"4\"\n"] + dsh.return_value = {'data': [res_data]} + inst_list = {'inst1': 'INST1', 'inst2': 'INST2'} + + exp_data = {'INST1': {'userid': 'INST1', + 'guest_cpus': '2', + 'used_cpu_time': '1710205201 uS', + 'used_memory': '4189268 KB'}, + 'INST2': {'userid': 'INST2', + 'guest_cpus': '4', + 'used_cpu_time': '1710205201 uS', + 'used_memory': '4189268 KB'}} + self.assertEqual(exp_data, + zvmutils.image_performance_query('zhcp', inst_list)) + + @mock.patch.object(zvmutils, 'xdsh') + def test_image_performance_query_invalid_xdsh_resp(self, dsh): + dsh.return_value = {'data': 'invalid data'} + inst_list = {'inst1': 'INST1', 'inst2': 'INST2'} + self.assertRaises(zvmutils.ZVMException, + zvmutils.image_performance_query, 'zhcp', inst_list) + class TestCacheData(base.BaseTestCase):