class MessagePusher(SonicDaemonApp): def __init__(self): self.pidfile_path = "/var/run/sonic_app/message_pusher.pid" self.log_path = "/var/log/sonic_app/message_pusher.log" self.amqp_client = AmqpClient() SonicDaemonApp.__init__(self) def run(self): self.logger.debug("Starting message pusher") self.amqp_client.open_connection() while True: db = init_db() try: messages = db.execute( "SELECT devices.uuid, messages.params, messages.id" " FROM messages, devices" " WHERE messages.device_id = devices.id" " AND messages.status = 'queued'") for message in messages: self.logger.debug(message) payload = message['params'] queue = message['uuid'] message_id = message['id'] self.amqp_client.publish(queue, payload) db.execute("UPDATE messages SET status = 'pushed'" " WHERE id = {}".format(message_id)) self.logger.debug("Pushed message {0} for device uuid {1}" .format(payload, queue)) except Exception as e: self.logger.debug("Oops! Error :{0}\n{1}" .format(e.message, traceback.format_exc())) db.close() time.sleep(10)
class MessageListener(SonicDaemonApp): QUEUE = CONF.app_queue def __init__(self): self.pidfile_path = "/var/run/sonic_app/message_listener.pid" self.log_path = "/var/log/sonic_app/message_listener.log" SonicDaemonApp.__init__(self) self.amqp_client = AmqpClient() self.manager = Manager() def run(self): self.logger.debug("Starting message listener") try: self.amqp_client.open_connection() self.amqp_client.channel.queue_declare(queue=self.QUEUE) self.amqp_client.channel.basic_consume(self._callback, queue=self.QUEUE, no_ack=True) self.amqp_client.channel.start_consuming() except Exception as e: self.logger.error("Error while starting amqp - {0}\n{1}" .format(e.message, traceback.format_exc())) def _callback(self, ch, method, properties, body): self.logger.debug("Processing {}".format(body)) try: # message = json.loads(decrypt(body)) message = json.loads(body) for key, val in message.iteritems(): if hasattr(self.manager, key): getattr(self.manager, key)(val) else: raise ActionUnsupportedError(key) except Exception as e: self.logger.error("Error while processing message - {0}\n{1}" .format(e.message, traceback.format_exc()))
def __init__(self): self.pidfile_path = "/var/run/sonic_app/message_pusher.pid" self.log_path = "/var/log/sonic_app/message_pusher.log" self.amqp_client = AmqpClient() SonicDaemonApp.__init__(self)
def __init__(self): self.pidfile_path = "/var/run/sonic_app/message_listener.pid" self.log_path = "/var/log/sonic_app/message_listener.log" SonicDaemonApp.__init__(self) self.amqp_client = AmqpClient() self.manager = Manager()