Allowing for delete events before launches
This commit is contained in:
@@ -33,6 +33,9 @@ def get_or_create_instance_usage(**kwargs):
|
|||||||
def get_instance_usage(**kwargs):
|
def get_instance_usage(**kwargs):
|
||||||
return models.InstanceUsage.objects.get(**kwargs)
|
return models.InstanceUsage.objects.get(**kwargs)
|
||||||
|
|
||||||
|
def create_instance_delete(**kwargs):
|
||||||
|
return models.InstanceDeletes(**kwargs)
|
||||||
|
|
||||||
def create_instance_exists(**kwargs):
|
def create_instance_exists(**kwargs):
|
||||||
return models.InstanceExists(**kwargs)
|
return models.InstanceExists(**kwargs)
|
||||||
|
|
||||||
|
|||||||
@@ -72,18 +72,26 @@ class Lifecycle(models.Model):
|
|||||||
class InstanceUsage(models.Model):
|
class InstanceUsage(models.Model):
|
||||||
instance = models.CharField(max_length=50, null=True,
|
instance = models.CharField(max_length=50, null=True,
|
||||||
blank=True, db_index=True)
|
blank=True, db_index=True)
|
||||||
#launched_at = models.IntegerField(null=True, db_index=True)
|
|
||||||
launched_at = models.DecimalField(null=True, max_digits=20,
|
launched_at = models.DecimalField(null=True, max_digits=20,
|
||||||
decimal_places=6)
|
decimal_places=6)
|
||||||
#deleted_at = models.IntegerField(null=True, db_index=True)
|
|
||||||
deleted_at = models.DecimalField(null=True, max_digits=20,
|
|
||||||
decimal_places=6)
|
|
||||||
request_id = models.CharField(max_length=50, null=True,
|
request_id = models.CharField(max_length=50, null=True,
|
||||||
blank=True, db_index=True)
|
blank=True, db_index=True)
|
||||||
instance_type_id = models.CharField(max_length=50,
|
instance_type_id = models.CharField(max_length=50,
|
||||||
null=True,
|
null=True,
|
||||||
blank=True,
|
blank=True,
|
||||||
db_index=True)
|
db_index=True)
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceDeletes(models.Model):
|
||||||
|
instance = models.CharField(max_length=50, null=True,
|
||||||
|
blank=True, db_index=True)
|
||||||
|
launched_at = models.DecimalField(null=True, max_digits=20,
|
||||||
|
decimal_places=6)
|
||||||
|
deleted_at = models.DecimalField(null=True, max_digits=20,
|
||||||
|
decimal_places=6)
|
||||||
|
raw = models.ForeignKey(RawData, null=True)
|
||||||
|
|
||||||
|
|
||||||
class InstanceExists(models.Model):
|
class InstanceExists(models.Model):
|
||||||
PENDING = 'pending'
|
PENDING = 'pending'
|
||||||
VERIFIED = 'verified'
|
VERIFIED = 'verified'
|
||||||
|
|||||||
@@ -492,14 +492,6 @@ class ViewsUsageTestCase(unittest.TestCase):
|
|||||||
def test_process_delete(self):
|
def test_process_delete(self):
|
||||||
launched_str = '2012-12-21 06:34:50.123'
|
launched_str = '2012-12-21 06:34:50.123'
|
||||||
launched = views.str_time_to_unix(launched_str)
|
launched = views.str_time_to_unix(launched_str)
|
||||||
values = {
|
|
||||||
'instance': INSTANCE_ID_1,
|
|
||||||
'request_id': REQUEST_ID_1,
|
|
||||||
'instance_type_id': '1',
|
|
||||||
'launched_at': launched,
|
|
||||||
}
|
|
||||||
InstanceUsage(**values).save()
|
|
||||||
|
|
||||||
deleted_str = '2012-12-21 12:34:50.123'
|
deleted_str = '2012-12-21 12:34:50.123'
|
||||||
deleted = views.str_time_to_unix(deleted_str)
|
deleted = views.str_time_to_unix(deleted_str)
|
||||||
json = test_utils.make_delete_end_json(launched_str, deleted_str)
|
json = test_utils.make_delete_end_json(launched_str, deleted_str)
|
||||||
@@ -508,10 +500,13 @@ class ViewsUsageTestCase(unittest.TestCase):
|
|||||||
|
|
||||||
views._process_delete(raw)
|
views._process_delete(raw)
|
||||||
|
|
||||||
usages = InstanceUsage.objects.all()
|
delete = InstanceDeletes.objects.all()
|
||||||
self.assertEqual(len(usages), 1)
|
self.assertEqual(len(delete), 1)
|
||||||
usage = usages[0]
|
delete = delete[0]
|
||||||
self.assertEqual(usage.deleted_at, deleted)
|
self.assertEqual(delete.instance, INSTANCE_ID_1)
|
||||||
|
self.assertEqual(delete.launched_at, launched)
|
||||||
|
self.assertEqual(delete.deleted_at, deleted)
|
||||||
|
self.assertEqual(delete.raw.id, raw.id)
|
||||||
|
|
||||||
def test_process_exists(self):
|
def test_process_exists(self):
|
||||||
launched_str = '2012-12-21 06:34:50.123'
|
launched_str = '2012-12-21 06:34:50.123'
|
||||||
@@ -556,7 +551,6 @@ class ViewsUsageTestCase(unittest.TestCase):
|
|||||||
'request_id': REQUEST_ID_1,
|
'request_id': REQUEST_ID_1,
|
||||||
'instance_type_id': '1',
|
'instance_type_id': '1',
|
||||||
'launched_at': launched,
|
'launched_at': launched,
|
||||||
'deleted_at': deleted,
|
|
||||||
}
|
}
|
||||||
InstanceUsage(**values).save()
|
InstanceUsage(**values).save()
|
||||||
|
|
||||||
|
|||||||
@@ -254,12 +254,16 @@ def _process_delete(raw):
|
|||||||
notif = json.loads(raw.json)
|
notif = json.loads(raw.json)
|
||||||
payload = notif[1]['payload']
|
payload = notif[1]['payload']
|
||||||
instance_id = payload['instance_id']
|
instance_id = payload['instance_id']
|
||||||
launched_at = payload['launched_at']
|
launched_at = str_time_to_unix(payload['launched_at'])
|
||||||
launched_at = str_time_to_unix(launched_at)
|
deleted_at = str_time_to_unix(payload['deleted_at'])
|
||||||
instance = STACKDB.get_instance_usage(instance=instance_id,
|
values = {
|
||||||
launched_at=launched_at)
|
'instance': instance_id,
|
||||||
instance.deleted_at = str_time_to_unix(payload['deleted_at'])
|
'launched_at': launched_at,
|
||||||
STACKDB.save(instance)
|
'deleted_at': deleted_at,
|
||||||
|
'raw': raw
|
||||||
|
}
|
||||||
|
delete = STACKDB.create_instance_delete(**values)
|
||||||
|
STACKDB.save(delete)
|
||||||
|
|
||||||
|
|
||||||
def _process_exists(raw):
|
def _process_exists(raw):
|
||||||
|
|||||||
@@ -508,23 +508,22 @@ class StacktackUsageParsingTestCase(unittest.TestCase):
|
|||||||
event = 'compute.instance.delete.end'
|
event = 'compute.instance.delete.end'
|
||||||
raw = utils.create_raw(self.mox, delete_decimal, event=event,
|
raw = utils.create_raw(self.mox, delete_decimal, event=event,
|
||||||
json_str=json_str)
|
json_str=json_str)
|
||||||
usage = self.mox.CreateMockAnything()
|
delete = self.mox.CreateMockAnything()
|
||||||
usage.instance = INSTANCE_ID_1
|
delete.instance = INSTANCE_ID_1
|
||||||
usage.request_id = REQUEST_ID_1
|
delete.launched_at = launch_decimal
|
||||||
usage.instance_type_id = '1'
|
delete.deleted_at = delete_decimal
|
||||||
usage.launched_at = launch_decimal
|
views.STACKDB.create_instance_delete(instance=INSTANCE_ID_1,
|
||||||
views.STACKDB.get_instance_usage(instance=INSTANCE_ID_1,
|
launched_at=launch_decimal,
|
||||||
launched_at=launch_decimal)\
|
deleted_at=delete_decimal,
|
||||||
.AndReturn(usage)
|
raw=raw)\
|
||||||
views.STACKDB.save(usage)
|
.AndReturn(delete)
|
||||||
|
views.STACKDB.save(delete)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
views._process_delete(raw)
|
views._process_delete(raw)
|
||||||
self.assertEqual(usage.instance, INSTANCE_ID_1)
|
self.assertEqual(delete.instance, INSTANCE_ID_1)
|
||||||
self.assertEqual(usage.request_id, REQUEST_ID_1)
|
self.assertEqual(delete.launched_at, launch_decimal)
|
||||||
self.assertEqual(usage.instance_type_id, '1')
|
self.assertEqual(delete.deleted_at, delete_decimal)
|
||||||
self.assertEqual(usage.launched_at, launch_decimal)
|
|
||||||
self.assertEqual(usage.deleted_at, delete_decimal)
|
|
||||||
self.mox.VerifyAll()
|
self.mox.VerifyAll()
|
||||||
|
|
||||||
def test_process_exists(self):
|
def test_process_exists(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user