Source code for lakesuperior.messaging.handlers

import logging

import stomp


logger = logging.getLogger(__name__)


[docs]class StompHandler(logging.Handler): """ Send messages to a remote queue broker using the STOMP protocol. This module is named and configured separately from standard logging for clarity about its scope: while logging has an informational purpose, this module has a functional one. """ def __init__(self, conf): self.conf = conf if self.conf['protocol'] == '11': conn_cls = stomp.Connection11 elif self.conf['protocol'] == '12': conn_cls = stomp.Connection12 else: conn_cls = stomp.Connection10 self.conn = conn_cls([(self.conf['host'], self.conf['port'])]) try: self.conn.connect( username=self.conf['username'], passcode=self.conf['password'], wait=True ) except stomp.exception.ConnectFailedException: logger.warning( 'Could not connect to the STOMP server. Your messages ' 'will be ditched.') return super().__init__() def __del_(self): """Disconnect the client.""" if self.conn.is_connected(): self.conn.disconnect()
[docs] def emit(self, record): """Send the message to the destination endpoint.""" if self.conn.is_connected(): self.conn.send(destination=self.conf['destination'], body=bytes(self.format(record), 'utf-8')) else: logger.warning('STOMP server not connected. Message dropped.')