Ejemplo n.º 1
0
class Daemon(ConsumerMixin):
    def __init__(self, config):
        self.connection = None
        self.exchange = None
        self.queues = []
        self.config = config
        self._init_rabbitmq()
        self.gpio = Gpio(config)

    def _init_rabbitmq(self):
        """
        connect to rabbitmq and init the queues
        """
        self.connection = kombu.Connection(self.config.rabbitmq['broker-url'])
        exchange_name = self.config.rabbitmq['exchange-name']
        exchange = kombu.Exchange(exchange_name, type="direct")
        queue_name = self.config.rabbitmq['queue-name']
        logging.getLogger(__name__).info("listen following exchange: {exchange}, queue name: {queue}".
                                         format(exchange=exchange_name, queue=queue_name))
        queue = kombu.Queue(queue_name, exchange=exchange, durable=True)
        self.queues.append(queue)

    def get_consumers(self, Consumer, channel):
        return [Consumer(queues=self.queues, callbacks=[self.process_task])]

    def handle_data(self, data):
        if data.IsInitialized():
            self.gpio.manage_lights(data)
        else:
            logging.getLogger(__name__).warn("protobuff query not initialized")

    def process_task(self, body, message):
#        logging.getLogger(__name__).debug("Message received")
        # Here, add the receipt of protobuf
        data_message = stat_pb2.StatRequest()
        try:
            data_message.ParseFromString(body)
            #logging.getLogger(__name__).debug('query received: %s' % str(data_message))
        except DecodeError as e:
            logging.getLogger(__name__).warn("message is not a valid "
                                                        "protobuf task: {}".format(str(e)))
            message.ack()
            return
        try:
            self.handle_data(data_message)
            message.ack()
        except:

            logging.getLogger(__name__).exception("error while treating data.")
            message.requeue()
            time.sleep(10)

    def __del__(self):
        self.close()

    def close(self):
        if self.connection and self.connection.connected:
            self.connection.release()
        self.gpio.finalize()
Ejemplo n.º 2
0
class Daemon(ConsumerMixin):
    def __init__(self, config):
        self.connection = None
        self.exchange = None
        self.queues = []
        self.config = config
        self._init_rabbitmq()
        self.gpio = Gpio(config)

    def _init_rabbitmq(self):
        """
        connect to rabbitmq and init the queues
        """
        self.connection = kombu.Connection(self.config.rabbitmq['broker-url'])
        exchange_name = self.config.rabbitmq['exchange-name']
        exchange = kombu.Exchange(exchange_name, type="topic")
        queue = kombu.Queue('',
                            exchange=exchange,
                            routing_key='v1.journeys',
                            durable=False,
                            exclusive=True,
                            auto_delete=True)
        logging.getLogger(__name__).info(
            "listen following exchange: {exchange}, queue name: {queue}".
            format(exchange=exchange_name, queue=queue.name))
        self.queues.append(queue)

    def get_consumers(self, Consumer, channel):
        return [Consumer(queues=self.queues, callbacks=[self.process_task])]

    def handle_data(self, data):
        if data.IsInitialized():
            self.gpio.manage_lights(data)
        else:
            logging.getLogger(__name__).warn("protobuff query not initialized")

    def process_task(self, body, message):
        #        logging.getLogger(__name__).debug("Message received")
        # Here, add the receipt of protobuf
        data_message = stat_pb2.StatRequest()
        try:
            data_message.ParseFromString(body)
            #logging.getLogger(__name__).debug('query received: %s' % str(data_message))
        except DecodeError as e:
            logging.getLogger(__name__).warn("message is not a valid "
                                             "protobuf task: {}".format(
                                                 str(e)))
            message.ack()
            return
        try:
            self.handle_data(data_message)
            message.ack()
        except:

            logging.getLogger(__name__).exception("error while treating data.")
            message.requeue()
            time.sleep(10)

    def __del__(self):
        self.close()

    def close(self):
        if self.connection and self.connection.connected:
            self.connection.release()
        self.gpio.finalize()