#!/usr/bin/env python import logging import random import requests from consumerlocator import ConsumerLocator """ 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, consumerlocator: ConsumerLocator, uuid): """ Initialize object :param consumerlocator: :param uuid: """ self.consumerlocator=consumerlocator self.uuid = uuid def sendmessage(self, message: str) -> None: """ Send message to consumer. :param message: :return: none """ currentconsumer=self.consumerlocator.getcurrentconsumer() 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: """ currentconsumer = self.consumerlocator.getcurrentconsumer() response = requests.get(f'http://{currentconsumer}/consumer') json = response.json() LOGGER.debug(f"List of currently available consumers: {json}") return json def isconsumeravailable(self) -> bool: """ Readiness probe primary consumer. :return: """ currentconsumer = self.consumerlocator.getcurrentconsumer() response = requests.get(f'http://{currentconsumer}/consumer') isavailable = response.status_code == 200 LOGGER.debug(f"Current consumer availability: {isavailable}") return isavailable def checkconsumer(self, consumer: str) -> bool: """ Readiness probe of a prticular consumer. :param consumer: :return: """ response = requests.get(f'http://{consumer}/consumer') isavailable = response.status_code == 200 LOGGER.debug(f"Consumer {consumer} availability: {isavailable}") return isavailable