def main(): usage = "Usage: %s <instance_name>\n" % PROGNAME if len(sys.argv) != 2: sys.stderr.write(usage) return 1 instance_name = sys.argv[1] # WARNING: This assumes that instance names # are of the form prefix-id, and uses prefix to # determine the routekey for AMPQ prefix = instance_name.split('-')[0] routekey = "ganeti.%s.event.progress" % prefix amqp_client = AMQPClient(confirm_buffer=10) amqp_client.connect() amqp_client.exchange_declare(settings.EXCHANGE_GANETI, "topic") for msg in jsonstream(sys.stdin): msg['event_time'] = split_time(time.time()) msg['instance'] = instance_name # log to stderr sys.stderr.write("[MONITOR] %s\n" % json.dumps(msg)) # then send it over AMQP amqp_client.basic_publish(exchange=settings.EXCHANGE_GANETI, routing_key=routekey, body=json.dumps(msg)) amqp_client.close() return 0
def drain_queue(queue): """Strip a (declared) queue from all outstanding messages""" if not queue: return if not queue in queues.QUEUES: print "Queue %s not configured" % queue return print "Queue to be drained: %s" % queue if not get_user_confirmation(): return client = AMQPClient() client.connect() tag = client.basic_consume(queue=queue, callback=callbacks.dummy_proc) print "Queue draining about to start, hit Ctrl+c when done" time.sleep(2) print "Queue draining starting" num_processed = 0 while True: client.basic_wait() num_processed += 1 sys.stderr.write("Ignored %d messages\r" % num_processed) client.basic_cancel(tag) client.close()
class Queue(object): """Queue. Required constructor parameters: hosts, exchange, client_id. """ def __init__(self, **params): hosts = params['hosts'] self.exchange = params['exchange'] self.client_id = params['client_id'] self.client = AMQPClient(hosts=hosts) self.client.connect() self.client.exchange_declare(exchange=self.exchange, type='topic') def send(self, message_key, user, instance, resource, value, details): body = Message( self.client_id, user, instance, resource, value, details) self.client.basic_publish(exchange=self.exchange, routing_key=message_key, body=json.dumps(body.__dict__)) def close(self): self.client.close()
def purge_exchanges(): """Delete declared exchanges from RabbitMQ, after removing all queues""" purge_queues() client = AMQPClient() client.connect() exchanges = queues.EXCHANGES print "Exchanges to be deleted: ", exchanges if not get_user_confirmation(): return for exch in exchanges: result = client.exchange_delete(exchange=exch) print "Deleting exchange %s. Result: %s" % (exch, result) client.close()
def purge_queues(): """ Delete declared queues from RabbitMQ. Use with care! """ client = AMQPClient(max_retries=120) client.connect() print "Queues to be deleted: ", queues.QUEUES if not get_user_confirmation(): return for queue in queues.QUEUES: result = client.queue_delete(queue=queue) print "Deleting queue %s. Result: %s" % (queue, result) client.close()
def handle(self, *args, **options): verbose = (options["verbosity"] == "2") self.keep_zombies = options["keep_zombies"] log_level = logging.DEBUG if verbose else logging.WARNING log.setLevel(log_level) client = AMQPClient(confirms=False) client.connect() self.client = client for queue in queues.QUEUES: dead_queue = queues.convert_queue_to_dead(queue) while 1: message = client.basic_get(dead_queue) if not message: break log.debug("Received message %s", message) self.handle_message(message) client.close() return 0
def main(): parser = OptionParser() parser.add_option('-v', '--verbose', action='store_true', default=False, dest='verbose', help='Enable verbose logging') parser.add_option('--host', default=BROKER_HOST, dest='host', help='RabbitMQ host (default: %s)' % BROKER_HOST) parser.add_option('--port', default=BROKER_PORT, dest='port', help='RabbitMQ port (default: %s)' % BROKER_PORT, type='int') parser.add_option('--user', default=BROKER_USER, dest='user', help='RabbitMQ user (default: %s)' % BROKER_USER) parser.add_option('--password', default=BROKER_PASSWORD, dest='password', help='RabbitMQ password (default: %s)' % BROKER_PASSWORD) parser.add_option('--vhost', default=BROKER_VHOST, dest='vhost', help='RabbitMQ vhost (default: %s)' % BROKER_VHOST) parser.add_option('--queue', default=CONSUMER_QUEUE, dest='queue', help='RabbitMQ queue (default: %s)' % CONSUMER_QUEUE) parser.add_option('--exchange', default=CONSUMER_EXCHANGE, dest='exchange', help='RabbitMQ exchange (default: %s)' % CONSUMER_EXCHANGE) parser.add_option('--key', default=CONSUMER_KEY, dest='key', help='RabbitMQ key (default: %s)' % CONSUMER_KEY) parser.add_option('--callback', default=None, dest='callback', help='Callback function to consume messages') parser.add_option('--test', action='store_true', default=False, dest='test', help='Produce a dummy message for testing') opts, args = parser.parse_args() DEBUG = False if opts.verbose: DEBUG = True logging.basicConfig( format='%(asctime)s [%(levelname)s] %(name)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG if DEBUG else logging.INFO) logger = logging.getLogger('dispatcher') host = 'amqp://%s:%s@%s:%s' % (opts.user, opts.password, opts.host, opts.port) queue = opts.queue key = opts.key exchange = opts.exchange client = AMQPClient(hosts=[host]) client.connect() if opts.test: client.exchange_declare(exchange=exchange, type='topic') client.basic_publish(exchange=exchange, routing_key=key, body= json.dumps({"test": "0123456789"})) client.close() sys.exit() callback = None if opts.callback: cb = opts.callback.rsplit('.', 1) if len(cb) == 2: __import__(cb[0]) cb_module = sys.modules[cb[0]] callback = getattr(cb_module, cb[1]) def handle_message(client, msg): logger.debug('%s', msg) if callback: callback(msg) client.basic_ack(msg) client.queue_declare(queue=queue) client.queue_bind(queue=queue, exchange=exchange, routing_key=key) client.basic_consume(queue=queue, callback=handle_message) try: while True: client.basic_wait() except KeyboardInterrupt: pass finally: client.close()
def main(): parser = OptionParser() parser.add_option('-v', '--verbose', action='store_true', default=False, dest='verbose', help='Enable verbose logging') parser.add_option('--host', default=BROKER_HOST, dest='host', help='RabbitMQ host (default: %s)' % BROKER_HOST) parser.add_option('--port', default=BROKER_PORT, dest='port', help='RabbitMQ port (default: %s)' % BROKER_PORT, type='int') parser.add_option('--user', default=BROKER_USER, dest='user', help='RabbitMQ user (default: %s)' % BROKER_USER) parser.add_option('--password', default=BROKER_PASSWORD, dest='password', help='RabbitMQ password (default: %s)' % BROKER_PASSWORD) parser.add_option('--vhost', default=BROKER_VHOST, dest='vhost', help='RabbitMQ vhost (default: %s)' % BROKER_VHOST) parser.add_option('--queue', default=CONSUMER_QUEUE, dest='queue', help='RabbitMQ queue (default: %s)' % CONSUMER_QUEUE) parser.add_option('--exchange', default=CONSUMER_EXCHANGE, dest='exchange', help='RabbitMQ exchange (default: %s)' % CONSUMER_EXCHANGE) parser.add_option('--key', default=CONSUMER_KEY, dest='key', help='RabbitMQ key (default: %s)' % CONSUMER_KEY) parser.add_option('--callback', default=None, dest='callback', help='Callback function to consume messages') parser.add_option('--test', action='store_true', default=False, dest='test', help='Produce a dummy message for testing') opts, args = parser.parse_args() DEBUG = False if opts.verbose: DEBUG = True logging.basicConfig( format='%(asctime)s [%(levelname)s] %(name)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG if DEBUG else logging.INFO) logger = logging.getLogger('dispatcher') host = 'amqp://%s:%s@%s:%s' % (opts.user, opts.password, opts.host, opts.port) queue = opts.queue key = opts.key exchange = opts.exchange client = AMQPClient(hosts=[host]) client.connect() if opts.test: client.exchange_declare(exchange=exchange, type='topic') client.basic_publish(exchange=exchange, routing_key=key, body=json.dumps({"test": "0123456789"})) client.close() sys.exit() callback = None if opts.callback: cb = opts.callback.rsplit('.', 1) if len(cb) == 2: __import__(cb[0]) cb_module = sys.modules[cb[0]] callback = getattr(cb_module, cb[1]) def handle_message(client, msg): logger.debug('%s', msg) if callback: callback(msg) client.basic_ack(msg) client.queue_declare(queue=queue) client.queue_bind(queue=queue, exchange=exchange, routing_key=key) client.basic_consume(queue=queue, callback=handle_message) try: while True: client.basic_wait() except KeyboardInterrupt: pass finally: client.close()