Fixed ring bugs
This commit is contained in:
parent
c474a23339
commit
a4ebfb0c3d
|
@ -45,20 +45,29 @@ class Monkey(Document):
|
||||||
aws_instance_id = StringField(required=False) # This field only exists when the monkey is running on an AWS
|
aws_instance_id = StringField(required=False) # This field only exists when the monkey is running on an AWS
|
||||||
# instance. See https://github.com/guardicore/monkey/issues/426.
|
# instance. See https://github.com/guardicore/monkey/issues/426.
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __ring_key__():
|
||||||
|
"""
|
||||||
|
Cash key representation
|
||||||
|
https://ring-cache.readthedocs.io/en/stable/quickstart.html#method-classmethod-staticmethod-property
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
return Monkey.guid
|
||||||
|
|
||||||
# LOGIC
|
# LOGIC
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_single_monkey_by_id(db_id):
|
def get_single_monkey_by_id(db_id):
|
||||||
try:
|
try:
|
||||||
return Monkey.objects.get(id=db_id)
|
return Monkey.objects.get(id=db_id)
|
||||||
except DoesNotExist as ex:
|
except DoesNotExist as ex:
|
||||||
raise MonkeyNotFoundError("info: {0} | id: {1}".format(ex.message, str(db_id)))
|
raise MonkeyNotFoundError("info: {0} | id: {1}".format(ex, str(db_id)))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_single_monkey_by_guid(monkey_guid):
|
def get_single_monkey_by_guid(monkey_guid):
|
||||||
try:
|
try:
|
||||||
return Monkey.objects.get(guid=monkey_guid)
|
return Monkey.objects.get(guid=monkey_guid)
|
||||||
except DoesNotExist as ex:
|
except DoesNotExist as ex:
|
||||||
raise MonkeyNotFoundError("info: {0} | guid: {1}".format(ex.message, str(monkey_guid)))
|
raise MonkeyNotFoundError("info: {0} | guid: {1}".format(ex, str(monkey_guid)))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_latest_modifytime():
|
def get_latest_modifytime():
|
||||||
|
@ -88,8 +97,8 @@ class Monkey(Document):
|
||||||
os = "windows"
|
os = "windows"
|
||||||
return os
|
return os
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
@ring.lru()
|
@ring.lru()
|
||||||
|
@staticmethod
|
||||||
def get_label_by_id(object_id):
|
def get_label_by_id(object_id):
|
||||||
current_monkey = Monkey.get_single_monkey_by_id(object_id)
|
current_monkey = Monkey.get_single_monkey_by_id(object_id)
|
||||||
label = Monkey.get_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
|
label = Monkey.get_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
|
||||||
|
@ -97,8 +106,8 @@ class Monkey(Document):
|
||||||
label = "MonkeyIsland - " + label
|
label = "MonkeyIsland - " + label
|
||||||
return label
|
return label
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
@ring.lru()
|
@ring.lru()
|
||||||
|
@staticmethod
|
||||||
def get_hostname_by_id(object_id):
|
def get_hostname_by_id(object_id):
|
||||||
"""
|
"""
|
||||||
:param object_id: the object ID of a Monkey in the database.
|
:param object_id: the object ID of a Monkey in the database.
|
||||||
|
@ -124,10 +133,10 @@ class Monkey(Document):
|
||||||
"""
|
"""
|
||||||
return {'ips': self.ip_addresses, 'hostname': self.hostname}
|
return {'ips': self.ip_addresses, 'hostname': self.hostname}
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
@ring.lru(
|
@ring.lru(
|
||||||
expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
|
expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
|
||||||
)
|
)
|
||||||
|
@staticmethod
|
||||||
def is_monkey(object_id):
|
def is_monkey(object_id):
|
||||||
try:
|
try:
|
||||||
_ = Monkey.get_single_monkey_by_id(object_id)
|
_ = Monkey.get_single_monkey_by_id(object_id)
|
||||||
|
|
|
@ -126,7 +126,7 @@ class TestMonkey(IslandTestCase):
|
||||||
linux_monkey.save()
|
linux_monkey.save()
|
||||||
|
|
||||||
cache_info_before_query = Monkey.get_label_by_id.storage.backend.cache_info()
|
cache_info_before_query = Monkey.get_label_by_id.storage.backend.cache_info()
|
||||||
self.assertEquals(cache_info_before_query.hits, 0)
|
self.assertEqual(cache_info_before_query.hits, 0)
|
||||||
|
|
||||||
# not cached
|
# not cached
|
||||||
label = Monkey.get_label_by_id(linux_monkey.id)
|
label = Monkey.get_label_by_id(linux_monkey.id)
|
||||||
|
@ -138,7 +138,7 @@ class TestMonkey(IslandTestCase):
|
||||||
# should be cached
|
# should be cached
|
||||||
_ = Monkey.get_label_by_id(linux_monkey.id)
|
_ = Monkey.get_label_by_id(linux_monkey.id)
|
||||||
cache_info_after_query = Monkey.get_label_by_id.storage.backend.cache_info()
|
cache_info_after_query = Monkey.get_label_by_id.storage.backend.cache_info()
|
||||||
self.assertEquals(cache_info_after_query.hits, 1)
|
self.assertEqual(cache_info_after_query.hits, 1)
|
||||||
|
|
||||||
linux_monkey.set_hostname("Another hostname")
|
linux_monkey.set_hostname("Another hostname")
|
||||||
|
|
||||||
|
@ -146,8 +146,8 @@ class TestMonkey(IslandTestCase):
|
||||||
label = Monkey.get_label_by_id(linux_monkey.id)
|
label = Monkey.get_label_by_id(linux_monkey.id)
|
||||||
cache_info_after_second_query = Monkey.get_label_by_id.storage.backend.cache_info()
|
cache_info_after_second_query = Monkey.get_label_by_id.storage.backend.cache_info()
|
||||||
# still 1 hit only
|
# still 1 hit only
|
||||||
self.assertEquals(cache_info_after_second_query.hits, 1)
|
self.assertEqual(cache_info_after_second_query.hits, 1)
|
||||||
self.assertEquals(cache_info_after_second_query.misses, 2)
|
self.assertEqual(cache_info_after_second_query.misses, 2)
|
||||||
|
|
||||||
def test_is_monkey(self):
|
def test_is_monkey(self):
|
||||||
self.fail_if_not_testing_env()
|
self.fail_if_not_testing_env()
|
||||||
|
@ -157,7 +157,7 @@ class TestMonkey(IslandTestCase):
|
||||||
a_monkey.save()
|
a_monkey.save()
|
||||||
|
|
||||||
cache_info_before_query = Monkey.is_monkey.storage.backend.cache_info()
|
cache_info_before_query = Monkey.is_monkey.storage.backend.cache_info()
|
||||||
self.assertEquals(cache_info_before_query.hits, 0)
|
self.assertEqual(cache_info_before_query.hits, 0)
|
||||||
|
|
||||||
# not cached
|
# not cached
|
||||||
self.assertTrue(Monkey.is_monkey(a_monkey.id))
|
self.assertTrue(Monkey.is_monkey(a_monkey.id))
|
||||||
|
@ -169,5 +169,5 @@ class TestMonkey(IslandTestCase):
|
||||||
self.assertFalse(Monkey.is_monkey(fake_id))
|
self.assertFalse(Monkey.is_monkey(fake_id))
|
||||||
|
|
||||||
cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
|
cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
|
||||||
self.assertEquals(cache_info_after_query.hits, 2)
|
self.assertEqual(cache_info_after_query.hits, 2)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue