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)