Commit 31b027fa by khan

Added error handling and template formatting

parent 80021c66
import argparse import argparse
import subprocess import subprocess
import requests import requests
from requests.exceptions import HTTPError
import sys
parser=argparse.ArgumentParser(description='Shovels between RabbitMQ Clusters') parser=argparse.ArgumentParser(description='Shovels between RabbitMQ Clusters')
parser.add_argument('--src_host',action='store',dest='src_host') parser.add_argument('--src_host',action='store',dest='src_host')
...@@ -12,27 +14,40 @@ parser.add_argument('--dest_user_pass',action='store',dest='dest_user_pass') ...@@ -12,27 +14,40 @@ parser.add_argument('--dest_user_pass',action='store',dest='dest_user_pass')
args=parser.parse_args() args=parser.parse_args()
src_uri="\"amqp://%s:%s@%s\"" % (args.src_user,args.src_user_pass,args.src_host) src_uri='amqp://{}:{}@{}'.format(args.src_user,args.src_user_pass,args.src_host)
dest_uri="\"amqp://%s:%s@%s\"" % (args.dest_user,args.dest_user_pass,args.dest_host) dest_uri='amqp://{}:{}@{}'.format(args.dest_user,args.dest_user_pass,args.dest_host)
port=15672 port=15672
def list_vhosts(): def list_vhosts():
url="http://%s:%d/api/vhosts" % (args.src_host,port) url='http://{}:{}/api/vhosts'.format(args.src_host,port)
response=requests.get(url,auth=(args.src_user,args.src_user_pass)) try:
vhosts=[v['name'] for v in response.json() if v['name'].startswith('/')] response=requests.get(url,auth=(args.src_user,args.src_user_pass))
response.raise_for_status()
vhosts=[v['name'] for v in response.json() if v['name'].startswith('/')]
except Exception as ex:
print "Failed to get vhosts: {}".format(ex)
sys.exit(1)
return vhosts return vhosts
def list_queues(): def list_queues():
for vhost in list_vhosts(): for vhost in list_vhosts():
url="http://%s:%d/api/queues/%s" % (args.src_host,port,vhost) url='http://{}:{}/api/queues/{}'.format(args.src_host,port,vhost)
response=requests.get(url,auth=(args.src_user,args.src_user_pass)) try:
queues=[q['name'] for q in response.json()] response=requests.get(url,auth=(args.src_user,args.src_user_pass))
response.raise_for_status()
queues=[q['name'] for q in response.json()]
except Exception as ex:
print "Failed to get queues: {}".format(ex)
sys.exit(1)
return queues return queues
def create_shovel(shovel,arg): def create_shovel(shovel,arg):
cmd="/usr/sbin/rabbitmqctl set_parameter shovel %s '%s'" % (shovel,arg) cmd="/usr/sbin/rabbitmqctl set_parameter shovel {} '{}'".format(shovel,arg)
subprocess.call( try:
cmd,shell=True) subprocess.check_output(
cmd,stderr=subprocess.STDOUT,shell=True)
except subprocess.CalledProcessError as ex:
return ex.output
if __name__=='__main__': if __name__=='__main__':
...@@ -41,12 +56,15 @@ if __name__=='__main__': ...@@ -41,12 +56,15 @@ if __name__=='__main__':
python shovel.py --src_host <src_host_IP> --src_user <src_rabbitmq_user> --src_user_pass <user_pass> \ python shovel.py --src_host <src_host_IP> --src_user <src_rabbitmq_user> --src_user_pass <user_pass> \
--dest_host <dest_host_IP> --dest_user <dest_rabbitmq_user> --dest_user_pass <user_pass> --dest_host <dest_host_IP> --dest_user <dest_rabbitmq_user> --dest_user_pass <user_pass>
""" """
output=[]
for queue in list_queues(): for queue in list_queues():
""" """
Ignore queues celeryev and *.pidbox to shovel Ignore queues celeryev and *.pidbox to shovel
""" """
q=queue.split('.') q=queue.split('.')
if (q[0]!='celeryev' and q[-1]!='pidbox'): if (q[0]!='celeryev' and q[-1]!='pidbox'):
args="{\"src-uri\": %s, \"src-queue\": \"%s\",\"dest-uri\": %s,\"dest-queue\": \"%s\"}" % (src_uri,queue,dest_uri,queue) args='{{"src-uri": "{}", "src-queue": "{}","dest-uri": "{}","dest-queue": "{}"}}'.format(src_uri,queue,dest_uri,queue)
create_shovel(queue,args) shovel_output=create_shovel(queue,args)
if shovel_output is not None:
output.append(shovel_output)
print "\n".join(output)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment