From 0df411bdce35a36481758c7f0870c16af3b3859b Mon Sep 17 00:00:00 2001 From: Andrew Melton Date: Thu, 14 Feb 2013 18:15:32 -0500 Subject: [PATCH] Handling deletes without launches --- stacktach/views.py | 8 ++++++-- tests/unit/test_stacktach.py | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/stacktach/views.py b/stacktach/views.py index 10e6a6d..c458a37 100644 --- a/stacktach/views.py +++ b/stacktach/views.py @@ -257,14 +257,18 @@ def _process_delete(raw): notif = json.loads(raw.json) payload = notif[1]['payload'] instance_id = payload['instance_id'] - launched_at = str_time_to_unix(payload['launched_at']) deleted_at = str_time_to_unix(payload['deleted_at']) values = { 'instance': instance_id, - 'launched_at': launched_at, 'deleted_at': deleted_at, 'raw': raw } + + launched_at = payload.get('launched_at') + if launched_at and launched_at != '': + launched_at = str_time_to_unix(launched_at) + values['launched_at'] = launched_at + delete = STACKDB.create_instance_delete(**values) STACKDB.save(delete) diff --git a/tests/unit/test_stacktach.py b/tests/unit/test_stacktach.py index 34293ab..f24e6d0 100644 --- a/tests/unit/test_stacktach.py +++ b/tests/unit/test_stacktach.py @@ -526,6 +526,30 @@ class StacktackUsageParsingTestCase(unittest.TestCase): self.assertEqual(delete.deleted_at, delete_decimal) self.mox.VerifyAll() + def test_process_delete_no_launch(self): + delete_time = datetime.datetime.utcnow() + delete_decimal = utils.decimal_utc(delete_time) + notif = utils.create_nova_notif(request_id=REQUEST_ID_1, + deleted=str(delete_time)) + json_str = json.dumps(notif) + event = 'compute.instance.delete.end' + raw = utils.create_raw(self.mox, delete_decimal, event=event, + json_str=json_str) + delete = self.mox.CreateMockAnything() + delete.instance = INSTANCE_ID_1 + delete.deleted_at = delete_decimal + views.STACKDB.create_instance_delete(instance=INSTANCE_ID_1, + deleted_at=delete_decimal, + raw=raw) \ + .AndReturn(delete) + views.STACKDB.save(delete) + self.mox.ReplayAll() + + views._process_delete(raw) + self.assertEqual(delete.instance, INSTANCE_ID_1) + self.assertEqual(delete.deleted_at, delete_decimal) + self.mox.VerifyAll() + def test_process_exists(self): launch_time = datetime.datetime.utcnow()-datetime.timedelta(hours=23) launch_decimal = utils.decimal_utc(launch_time)