fix unit tests
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-04-29 12:31:33 +02:00
8 changed files with 73 additions and 42 deletions

View File

@@ -8,6 +8,7 @@ import datetime
from communicator import Communicator
import os
from redisconnector import RedisConnector
import logging
__author__ = "@dscharnitzky"
__copyright__ = "Copyright 2020, GoldenPogácsa Team"
@@ -15,6 +16,7 @@ __module_name__ = "consumerlocator"
__version__text__ = "1"
KNOWNCONSUMER = os.getenv("PRODUCER_KNOWNCONSUMER", '10.69.42.1')
LOGGER = logging.getLogger(__name__)
class ConsumerLocator:
@@ -33,7 +35,7 @@ class ConsumerLocator:
:param communicator: the :class:'communicator.Communicator' instance that will be used for the low level communication.
"""
self.red = redisconnector
self.red.consumerlist = [{"Host": KNOWNCONSUMER, "State": True, "LastOk": datetime.datetime.now()}]
self.red.consumerlist = [{"Host": KNOWNCONSUMER, "State": True, "LastOk": datetime.datetime.now().timestamp()}]
self.red.currentconsumer = self.red.consumerlist[0]
self.communicator = communicator
@@ -46,8 +48,12 @@ class ConsumerLocator:
:returns: None
"""
recievedconsumerlist = self.communicator.discoveravailableconsumers()
if recievedconsumerlist is None:
if not recievedconsumerlist:
return
consumer_list = self.red.consumerlist
for recconsumer in recievedconsumerlist:
contains = False
for consumer in self.red.consumerlist:
@@ -55,8 +61,10 @@ class ConsumerLocator:
contains = True
if not contains:
self.red.consumerlist.append({"Host": recconsumer, "State": True, "LastOk": datetime.datetime.now()})
LOGGER.info(f"Learned about new consumer at {recconsumer}")
consumer_list.append({"Host": recconsumer, "State": True, "LastOk": datetime.datetime.now().timestamp()})
self.red.consumerlist = consumer_list
self.updateconsumerlist()
def updateconsumerlist(self) -> None:
@@ -68,16 +76,20 @@ class ConsumerLocator:
:return: None
"""
removelist = []
for consumer in self.red.consumerlist:
consumer_list = self.red.consumerlist
for consumer in consumer_list:
if not self.communicator.checkconsumer(consumer["Host"]):
consumer["State"] = False
if datetime.datetime.now() - consumer["LastOk"] > datetime.timedelta(hours=1):
if datetime.datetime.now() - datetime.datetime.fromtimestamp(consumer["LastOk"]) > datetime.timedelta(hours=1):
removelist.append(consumer)
else:
consumer["LastOk"] = datetime.datetime.now()
consumer["LastOk"] = datetime.datetime.now().timestamp()
consumer["State"] = True
for rem in removelist:
self.red.consumerlist.remove(rem)
consumer_list.remove(rem)
self.red.consumerlist = consumer_list
def updateconsumer(self):
"""If the current consumer is not available, checks all the consumers in the list and updates the current one.
@@ -100,6 +112,7 @@ class ConsumerLocator:
self.red.currentconsumer = newcurrentconsumer
if self.red.currentconsumer is not None:
LOGGER.warning(f"Falling back to consumer at {newcurrentconsumer['Host']}")
self.learnconsumerlist()
if self.red.currentconsumer is not None: