Skip to content

Instantly share code, notes, and snippets.

@niedbalski
Last active December 4, 2022 13:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save niedbalski/f4d9e6714af3f0fcf65d to your computer and use it in GitHub Desktop.
Save niedbalski/f4d9e6714af3f0fcf65d to your computer and use it in GitHub Desktop.
purge-queues.py
#!/usr/bin/env python
"""
Purge and delete rabbit queues by prefix and message
amount.
Usage:
{0} prefix 1
"""
import sys
import pika
import subprocess
import re
import shlex
def run(cmd):
return subprocess.check_output(shlex.split(cmd))
def get_stuck_queues(prefix="reply", stuck=1):
regex = re.compile("(%s_.*)+[\t]+([0-9]+)+$" % prefix)
output = run("rabbitmqctl list_queues -p openstack")
for queue in output.splitlines():
match = re.match(regex, queue)
if match:
queue, msgs = match.groups()
if int(msgs) >= stuck:
yield queue
def create_user():
return run("rabbitmqctl add_user drop drop")
def grant_permissions():
return run('rabbitmqctl set_permissions -p openstack drop ".*" ".*" ".*"')
def drop_user():
return run('rabbitmqctl delete_user drop')
def delete_queues(prefix, msgs):
credentials = pika.PlainCredentials('drop', 'drop')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost', 5672, "openstack", credentials))
channel = connection.channel()
for queue in get_stuck_queues(prefix=prefix, stuck=int(msgs)):
print "Purging queue: %s" % queue
channel.queue_purge(queue=queue)
channel.queue_delete(queue=queue)
connection.close()
def main():
if not len(sys.argv) == 3:
print >>sys.stderr, __doc__.format(*sys.argv)
sys.exit(-1)
try:
create_user()
grant_permissions()
delete_queues(*sys.argv[1:])
except Exception as ex:
print ex
pass
finally:
drop_user()
if __name__ == "__main__":
main()
root@juju-testing-machine-12:/home/ubuntu# python run.py
Purge and delete rabbit queues by prefix and message
amount.
Usage:
run.py prefix 1
root@juju-testing-machine-12:/home/ubuntu# python run.py reply 0
Purging queue: reply_1f4528e4f7da44419391bb452a3a6030
Purging queue: reply_2dddfede8e4847bba87885f0b88ba007
Purging queue: reply_3774514874d74500b7b76a719ea3ded9
Purging queue: reply_3d6237244f3d45449f291c09931a52bf
Purging queue: reply_6617b0508a7f43b0a8b56784be449b12
Purging queue: reply_755e25fd7e064995b66b2d73547094e1
Purging queue: reply_9d2a5224a25d4b1db9d217fe038cba4c
Purging queue: reply_a8606063b6a746c0842041adf5691e44
Purging queue: reply_b1df57b0ac414dc2af28ed57d53a33ff
Purging queue: reply_d17dfc8098a54812a43e0841105e56d0
Purging queue: reply_d312c87d448b47699d71bdadaf714fdc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment