Convert the DateTime into ISO8601 format for Ceilometer

The fields of DateTime type should be converted to the time in
ISO8601 format, when they are put in the usage information to be
reported to Ceilometer.

Change-Id: I67e9e3609291d0d835156dfd9cfda88deae119c1
closes-bug: #1372791
This commit is contained in:
Vincent Hou
2014-11-16 22:33:35 -08:00
parent 24ce46bb98
commit 0ecba69df0
4 changed files with 34 additions and 32 deletions

View File

@@ -96,7 +96,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {}, 'metadata': {},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 100, 'size': 100,
'encrypted': False}} 'encrypted': False}}
@@ -188,7 +188,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {}, 'metadata': {},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': '1'}} 'size': '1'}}
body = {"volume": vol} body = {"volume": vol}
@@ -272,7 +272,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'attached_mode': 'rw', 'metadata': {'attached_mode': 'rw',
'readonly': 'False'}, 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1}} 'size': 1}}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
self.assertEqual(len(fake_notifier.NOTIFICATIONS), 2) self.assertEqual(len(fake_notifier.NOTIFICATIONS), 2)
@@ -309,7 +309,7 @@ class VolumeApiTest(test.TestCase):
"readonly": "False", "readonly": "False",
"attached_mode": "rw"}, "attached_mode": "rw"},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1 'size': 1
}} }}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -358,7 +358,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'key': 'value', 'metadata': {'key': 'value',
'readonly': 'True'}, 'readonly': 'True'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1}} 'size': 1}}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
self.assertEqual(len(fake_notifier.NOTIFICATIONS), 2) self.assertEqual(len(fake_notifier.NOTIFICATIONS), 2)
@@ -412,7 +412,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'attached_mode': 'rw', 'metadata': {'attached_mode': 'rw',
'readonly': 'False'}, 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}]} 'size': 1}]}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -452,7 +452,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'key': 'value', 'metadata': {'key': 'value',
'readonly': 'True'}, 'readonly': 'True'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}]} 'size': 1}]}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -481,7 +481,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'attached_mode': 'rw', 'metadata': {'attached_mode': 'rw',
'readonly': 'False'}, 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}]} 'size': 1}]}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -521,7 +521,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'key': 'value', 'metadata': {'key': 'value',
'readonly': 'True'}, 'readonly': 'True'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}]} 'size': 1}]}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -548,7 +548,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'attached_mode': 'rw', 'metadata': {'attached_mode': 'rw',
'readonly': 'False'}, 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}} 'size': 1}}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -575,7 +575,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'readonly': 'False'}, 'metadata': {'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}} 'size': 1}}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -606,7 +606,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'attached_mode': 'rw', 'metadata': {'attached_mode': 'rw',
'readonly': 'False'}, 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}} 'size': 1}}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)
@@ -683,7 +683,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'key': 'value', 'metadata': {'key': 'value',
'readonly': 'True'}, 'readonly': 'True'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 'created_at': datetime.datetime(1900, 1, 1,
1, 1, 1), 1, 1, 1),
'size': 1}} 'size': 1}}
self.assertEqual(res_dict, expected) self.assertEqual(res_dict, expected)

View File

@@ -41,7 +41,7 @@ def stub_volume(id, **kwargs):
'display_name': 'displayname', 'display_name': 'displayname',
'display_description': 'displaydesc', 'display_description': 'displaydesc',
'updated_at': datetime.datetime(1900, 1, 1, 1, 1, 1), 'updated_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'snapshot_id': None, 'snapshot_id': None,
'source_volid': None, 'source_volid': None,
'volume_type_id': '3e196c20-3c06-11e2-81c1-0800200c9a66', 'volume_type_id': '3e196c20-3c06-11e2-81c1-0800200c9a66',
@@ -49,7 +49,7 @@ def stub_volume(id, **kwargs):
'volume_admin_metadata': [{'key': 'attached_mode', 'value': 'rw'}, 'volume_admin_metadata': [{'key': 'attached_mode', 'value': 'rw'},
{'key': 'readonly', 'value': 'False'}], {'key': 'readonly', 'value': 'False'}],
'bootable': False, 'bootable': False,
'launched_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'launched_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'volume_type': {'name': 'vol_type_name'}, 'volume_type': {'name': 'vol_type_name'},
'replication_status': 'disabled', 'replication_status': 'disabled',
'replication_extended_status': None, 'replication_extended_status': None,

View File

@@ -96,7 +96,7 @@ class VolumeApiTest(test.TestCase):
'availability_zone': 'zone1:host1', 'availability_zone': 'zone1:host1',
'bootable': 'false', 'bootable': 'false',
'consistencygroup_id': None, 'consistencygroup_id': None,
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'description': 'Volume Test Desc', 'description': 'Volume Test Desc',
'id': '1', 'id': '1',
'links': 'links':
@@ -230,7 +230,7 @@ class VolumeApiTest(test.TestCase):
'availability_zone': 'nova', 'availability_zone': 'nova',
'bootable': 'false', 'bootable': 'false',
'consistencygroup_id': None, 'consistencygroup_id': None,
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'description': 'Volume Test Desc', 'description': 'Volume Test Desc',
'encrypted': False, 'encrypted': False,
'id': '1', 'id': '1',
@@ -320,7 +320,7 @@ class VolumeApiTest(test.TestCase):
'availability_zone': 'nova', 'availability_zone': 'nova',
'bootable': 'false', 'bootable': 'false',
'consistencygroup_id': None, 'consistencygroup_id': None,
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'description': 'Volume Test Desc', 'description': 'Volume Test Desc',
'encrypted': False, 'encrypted': False,
'id': '1', 'id': '1',
@@ -428,7 +428,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'attached_mode': 'rw', 'readonly': 'False'}, 'metadata': {'attached_mode': 'rw', 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -482,7 +482,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'attached_mode': 'rw', 'readonly': 'False'}, 'metadata': {'attached_mode': 'rw', 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -539,7 +539,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'attached_mode': 'rw', 'readonly': 'False'}, 'metadata': {'attached_mode': 'rw', 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -591,7 +591,7 @@ class VolumeApiTest(test.TestCase):
"readonly": "False", "readonly": "False",
"attached_mode": "rw"}, "attached_mode": "rw"},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -653,7 +653,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'key': 'value', 'metadata': {'key': 'value',
'readonly': 'True'}, 'readonly': 'True'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -759,7 +759,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'attached_mode': 'rw', 'readonly': 'False'}, 'metadata': {'attached_mode': 'rw', 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -821,7 +821,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'key': 'value', 'readonly': 'True'}, 'metadata': {'key': 'value', 'readonly': 'True'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -1222,7 +1222,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'attached_mode': 'rw', 'readonly': 'False'}, 'metadata': {'attached_mode': 'rw', 'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -1265,7 +1265,7 @@ class VolumeApiTest(test.TestCase):
'source_volid': None, 'source_volid': None,
'metadata': {'readonly': 'False'}, 'metadata': {'readonly': 'False'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {
@@ -1333,7 +1333,7 @@ class VolumeApiTest(test.TestCase):
'metadata': {'key': 'value', 'metadata': {'key': 'value',
'readonly': 'True'}, 'readonly': 'True'},
'id': '1', 'id': '1',
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1), 'created_at': datetime.datetime(1900, 1, 1, 1, 1, 1),
'size': 1, 'size': 1,
'links': [ 'links': [
{ {

View File

@@ -50,8 +50,10 @@ def _usage_from_volume(context, volume_ref, **kw):
volume_id=volume_ref['id'], volume_id=volume_ref['id'],
volume_type=volume_ref['volume_type_id'], volume_type=volume_ref['volume_type_id'],
display_name=volume_ref['display_name'], display_name=volume_ref['display_name'],
launched_at=null_safe_str(volume_ref['launched_at']), launched_at=timeutils.isotime(at=
created_at=null_safe_str(volume_ref['created_at']), volume_ref['launched_at']),
created_at=timeutils.isotime(at=
volume_ref['created_at']),
status=volume_ref['status'], status=volume_ref['status'],
snapshot_id=volume_ref['snapshot_id'], snapshot_id=volume_ref['snapshot_id'],
size=volume_ref['size'], size=volume_ref['size'],
@@ -153,7 +155,7 @@ def _usage_from_consistencygroup(context, group_ref, **kw):
availability_zone=group_ref['availability_zone'], availability_zone=group_ref['availability_zone'],
consistencygroup_id=group_ref['id'], consistencygroup_id=group_ref['id'],
name=group_ref['name'], name=group_ref['name'],
created_at=null_safe_str(group_ref['created_at']), created_at=timeutils.isotime(at=group_ref['created_at']),
status=group_ref['status']) status=group_ref['status'])
usage_info.update(kw) usage_info.update(kw)
@@ -185,7 +187,7 @@ def _usage_from_cgsnapshot(context, cgsnapshot_ref, **kw):
cgsnapshot_id=cgsnapshot_ref['id'], cgsnapshot_id=cgsnapshot_ref['id'],
name=cgsnapshot_ref['name'], name=cgsnapshot_ref['name'],
consistencygroup_id=cgsnapshot_ref['consistencygroup_id'], consistencygroup_id=cgsnapshot_ref['consistencygroup_id'],
created_at=null_safe_str(cgsnapshot_ref['created_at']), created_at=timeutils.isotime(at=cgsnapshot_ref['created_at']),
status=cgsnapshot_ref['status']) status=cgsnapshot_ref['status'])
usage_info.update(kw) usage_info.update(kw)