#!/usr/bin/env python import logging import requests """ Communicator module """ __author__ = "@tormakris" __copyright__ = "Copyright 2020, GoldenPogácsa Team" __module_name__ = "messagesender" __version__text__ = "1" logging.basicConfig(level=logging.INFO) LOGGER = logging.getLogger(__name__) class Communicator: """ Class handling low level communication with consumers. """ def __init__(self, currentconsumer: str, uuid: str): """ Initialize object :param consumerlocator: :param uuid: """ self.currenctconsumer=currentconsumer self.uuid = uuid def sendmessage(self, message: str) -> None: """ Send message to consumer. :param message: :return: none """ currentconsumer=self.currenctconsumer LOGGER.debug(f"Sending message to {currentconsumer}") requests.post(f'http://{currentconsumer}/log', json={'uuid': self.uuid, 'message': message}) def discoveravailableconsumers(self) -> list: """ Get the list of available consumer from the current primary consumer. :return: """ try: currentconsumer = self.currenctconsumer response = requests.get(f'http://{currentconsumer}/consumer') json = response.json() LOGGER.debug(f"List of currently available consumers: {json}") return json except Exception: return [] def isconsumeravailable(self) -> bool: """ Readiness probe primary consumer. :return: """ currentconsumer = self.currenctconsumer try: response = requests.get(f'http://{currentconsumer}/consumer') isavailable = response.status_code == 200 except Exception as e: LOGGER.exception(e) isavailable = False LOGGER.debug(f"Current consumer availability: {isavailable}") return isavailable def checkconsumer(self, consumer: str) -> bool: """ Readiness probe of a prticular consumer. :param consumer: :return: """ try: response = requests.get(f'http://{consumer}/consumer') isavailable = response.status_code == 200 except Exception as e: LOGGER.exception(e) isavailable = False LOGGER.debug(f"Consumer {consumer} availability: {isavailable}") return isavailable def set_currentconsumer(self,currenctconsumer): """ Set current consumer :param currenctconsumer: :return: """ self.currenctconsumer=currenctconsumer