Fix some serialisation of JSON issues

Fix some serialisation of JSON issues in the ceilometer collector.

Change-Id: I5eb322bceea630a67071fad884a628106e529557
Closes-Bug: #1662779
This commit is contained in:
Christophe Sauthier 2017-02-09 09:53:29 +01:00
parent 0cf3bd465a
commit 094056c3fc
4 changed files with 135 additions and 2 deletions

View File

@ -198,9 +198,10 @@ class CeilometerCollector(collector.BaseCollector):
image)
image = self._cacher.get_resource_detail('image',
image_id)
image_mb = image_stats.max / 1048576.0
image_data.append(self.t_cloudkitty.format_item(image,
'image',
image_stats.max))
image_mb))
if not image_data:
raise collector.NoDataCollected(self.collector_name, 'image')
return self.t_cloudkitty.format_service('image', image_data)

View File

@ -55,7 +55,68 @@ TRANS_VOLUME = {
'user_id': '576808d8-3169-11e6-992b-5f931fc671df',
'availability_zone': 'az1',
'name': 'vol1',
'size': 10}
'size': 10,
'volume_type': None}
CEIL_IMAGE = {
'status': 'active',
'name': 'Cirros',
'deleted': 'False',
'disk_format': 'ami',
'id': 'c4a0d12e-88ff-43e1-b182-f95dfe75e40c',
'protected': 'False',
'container_format': 'ami',
'is_public': 'False',
'size': '25165824'}
TRANS_IMAGE = {
'image_id': '2f58a438-3169-11e6-b36c-bfe1fa3241fe',
'project_id': '4480c638-3169-11e6-91de-a3bd3a7d3afb',
'user_id': '576808d8-3169-11e6-992b-5f931fc671df',
'container_format': 'ami',
'deleted': 'False',
'disk_format': 'ami',
'is_public': 'False',
'name': 'Cirros',
'protected': 'False',
'size': '25165824',
'status': 'active'}
CEIL_NETWORK_TAP = {
'instance_host': 'dev',
'mac': 'fa:16:3e:90:4b:6f',
'host': '5b85dd1e7796f87bae6fea6dcb608cf907446eaa715de90d77dadb7b',
'vnic_name': 'tap704159b2-8b',
'instance_id': '685243d6-34f1-4a39-8446-87b018ada8d9'}
TRANS_NETWORK_TAP = {
'instance_host': 'dev',
'mac': 'fa:16:3e:90:4b:6f',
'host': '5b85dd1e7796f87bae6fea6dcb608cf907446eaa715de90d77dadb7b',
'vnic_name': 'tap704159b2-8b',
'instance_id': '685243d6-34f1-4a39-8446-87b018ada8d9',
'project_id': '4480c638-3169-11e6-91de-a3bd3a7d3afb',
'interface_id': '2f58a438-3169-11e6-b36c-bfe1fa3241fe',
'user_id': '576808d8-3169-11e6-992b-5f931fc671df'}
CEIL_NETWORK_FLOATING = {
'status': 'ACTIVE',
'router_id': 'a46530af-c5ba-4ba2-aa59-e2de4393151d',
'floating_network_id': '823daec0-b000-446b-9539-20f7463775c3',
'fixed_ip_address': '10.0.0.6',
'floating_ip_address': '172.24.4.9',
'port_id': '65005c79-2ab0-46d4-8ab8-f3044ec47418'}
TRANS_NETWORK_FLOATING = {
'project_id': '4480c638-3169-11e6-91de-a3bd3a7d3afb',
'user_id': '576808d8-3169-11e6-992b-5f931fc671df',
'floatingip_id': '2f58a438-3169-11e6-b36c-bfe1fa3241fe',
'status': 'ACTIVE',
'router_id': 'a46530af-c5ba-4ba2-aa59-e2de4393151d',
'floating_network_id': '823daec0-b000-446b-9539-20f7463775c3',
'fixed_ip_address': '10.0.0.6',
'floating_ip_address': '172.24.4.9',
'port_id': '65005c79-2ab0-46d4-8ab8-f3044ec47418'}
class CeilometerTransformerTest(tests.TestCase):
@ -81,3 +142,21 @@ class CeilometerTransformerTest(tests.TestCase):
t_test = ceilometer.CeilometerTransformer()
result = t_test.strip_resource_data('volume', resource)
self.assertEqual(TRANS_VOLUME, result)
def test_strip_ceilometer_image(self):
resource = self.generate_ceilometer_resource(CEIL_IMAGE)
t_test = ceilometer.CeilometerTransformer()
result = t_test.strip_resource_data('image', resource)
self.assertEqual(TRANS_IMAGE, result)
def test_strip_ceilometer_network_tap(self):
resource = self.generate_ceilometer_resource(CEIL_NETWORK_TAP)
t_test = ceilometer.CeilometerTransformer()
result = t_test.strip_resource_data('network_tap', resource)
self.assertEqual(TRANS_NETWORK_TAP, result)
def test_strip_ceilometer_network_floating(self):
resource = self.generate_ceilometer_resource(CEIL_NETWORK_FLOATING)
t_test = ceilometer.CeilometerTransformer()
result = t_test.strip_resource_data('network_floating', resource)
self.assertEqual(TRANS_NETWORK_FLOATING, result)

View File

@ -59,6 +59,7 @@ class BaseTransformer(object):
return result
def strip_resource_data(self, res_type, res_data):
res_type = res_type.replace('.', '_')
strip_func = getattr(self, '_strip_' + res_type, None)
if strip_func:
return strip_func(res_data)

View File

@ -29,12 +29,43 @@ class CeilometerTransformer(transformer.BaseTransformer):
'availability_zone',
'OS-EXT-AZ.availability_zone'],
}
volume_map = {
'volume_id': ['volume_id'],
'name': ['display_name'],
'availability_zone': ['availability_zone'],
'size': ['size'],
'volume_type': ['volume_type']
}
image_map = {
'container_format': ['container_format'],
'deleted': ['deleted'],
'disk_format': ['disk_format'],
'is_public': ['is_public'],
'name': ['name'],
'protected': ['protected'],
'size': ['size'],
'status': ['status'],
}
network_tap_map = {
'instance_host': ['instance_host'],
'mac': ['mac'],
'host': ['host'],
'vnic_name': ['vnic_name'],
'instance_id': ['instance_id'],
}
network_floating_map = {
'status': ['status'],
'router_id': ['router_id'],
'floating_network_id': ['floating_network_id'],
'fixed_ip_address': ['fixed_ip_address'],
'floating_ip_address': ['floating_ip_address'],
'port_id': ['port_id'],
}
metadata_item = 'metadata'
def _strip_compute(self, data):
@ -53,3 +84,24 @@ class CeilometerTransformer(transformer.BaseTransformer):
res_data['user_id'] = data.user_id
res_data['project_id'] = data.project_id
return res_data
def _strip_image(self, data):
res_data = self.generic_strip('image', data)
res_data['image_id'] = data.resource_id
res_data['project_id'] = data.project_id
res_data['user_id'] = data.user_id
return res_data
def _strip_network_tap(self, data):
res_data = self.generic_strip('network_tap', data)
res_data['user_id'] = data.user_id
res_data['project_id'] = data.project_id
res_data['interface_id'] = data.resource_id
return res_data
def _strip_network_floating(self, data):
res_data = self.generic_strip('network_floating', data)
res_data['user_id'] = data.user_id
res_data['project_id'] = data.project_id
res_data['floatingip_id'] = data.resource_id
return res_data