コード例 #1
0
ファイル: rabbitmq.py プロジェクト: WeLikeAlpacas/Qpaca
class RabbitMQPublisher(BasePublisher, RabbitMQHandler):
    """Implements a RabbitMQ Publisher"""

    def __init__(self, config=None):
        self.config = config or get_config('rabbitmq').get('publisher', None)
        self.connection = self._connect()
        self.monitor = InfluxDB(
            'publisher', config or get_config('monitoring').get('influxdb'))

    def start(self):
        """Create everything necessary to send a message"""

        logger.debug('Starting RabbitMQ Publisher')
        self._exchange = self._create_exchange()
        self._producer = self._create_producer()

    def publish(self, message):
        """
        Send a message to RabbitMQ exchange

        return a unique id for future result query
        """

        message_id = str(uuid.uuid4())
        message = {'payload': message,
                   'message_id': message_id,
                   'reply_to': None}

        self._producer.publish(
            message, exchange=self._exchange, **self.config.get('publish'))
        logger.info('Message sent: {0}'.format(message))

        point = (datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f'"), 1)
        self.monitor.write(point)
        return message_id
コード例 #2
0
 def test_write_influx(self, mocked_function):
     client = InfluxDB(name='something', config={'client': {}})
     date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f'")
     client.write(point=(date, 1))
     mocked_function.assert_called_with(
         [{
             "measurement": 'something',
             "tags": {
                 "host": 'something-' + socket.gethostname(),
             },
             "time": date,
             "fields": {
                 "value": 1}}])
コード例 #3
0
ファイル: rabbitmq.py プロジェクト: WeLikeAlpacas/Qpaca
class RabbitMQSubscriber(ConsumerMixin, BaseSubscriber, RabbitMQHandler):
    def __init__(self, config=None):
        self.config = config or get_config('rabbitmq').get('subscriber', None)
        self.connection = self._connect()
        self.monitor = InfluxDB(
            'subscriber', config or get_config('monitoring').get('influxdb'))

    def start(self, callback):
        """Create everything necessary to receive a message"""

        logger.debug('Starting RabbitMQ Subscriber')
        self._exchange = self._create_exchange()
        self._queue = self._create_queue()
        self._callback = callback

    def run_forever(self):
        """Call kombu.ConsumerMixin run function
        It will start consume new messages
        """

        self.run()

    def get_consumers(self, consumer, channel):
        """Return a list with consumers"""

        return [consumer(
            queues=[self._queue],
            callbacks=[self.on_message],
            **self.config.get('consumer'))]

    def on_message(self, body, message):
        """it is called every time a new message is received"""

        logger.info('Message received: {0}'.format(body))
        self._callback(body, message)
        message.ack()

        point = (datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f'"), 1)
        self.monitor.write(point)
コード例 #4
0
ファイル: rabbitmq.py プロジェクト: WeLikeAlpacas/Qpaca
 def __init__(self, config=None):
     self.config = config or get_config('rabbitmq').get('subscriber', None)
     self.connection = self._connect()
     self.monitor = InfluxDB(
         'subscriber', config or get_config('monitoring').get('influxdb'))
コード例 #5
0
 def test_write_parameters(self, mocked_function):
     client = InfluxDB(name='something', config={'client': {}})
     date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f'")
     client.write((date, 1))
     mocked_function.assert_called_with((date, 1))
コード例 #6
0
 def test_init(self, mocked_class):
     client = InfluxDB(name='something', config={'client': {}})
     assert mocked_class.called
     assert client.name == 'something'