From 8f7afcdb16720faf59995dac15edbdc3902b4687 Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Tue, 30 May 2017 17:07:43 +0100 Subject: [PATCH 1/3] Did some work around the delete queues script --- .gitignore | 2 + scripts/delete_sqs_queues.py | 72 +++++++++++++++++++++++++++--------- 2 files changed, 56 insertions(+), 18 deletions(-) mode change 100644 => 100755 scripts/delete_sqs_queues.py diff --git a/.gitignore b/.gitignore index d19df2e94..12f77b15c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +queues.csv + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/scripts/delete_sqs_queues.py b/scripts/delete_sqs_queues.py old mode 100644 new mode 100755 index bdbf6ff65..1e274b4ed --- a/scripts/delete_sqs_queues.py +++ b/scripts/delete_sqs_queues.py @@ -1,10 +1,33 @@ +""" + +Script to manage SQS queues. Can list or delete queues. + +Uses boto, so relies on correctly set up AWS access keys and tokens. + +In principle use this script to dump details of all queues in a gievn environment, and then +manipulate the resultant CSV file so that it contains the queues you want to delete. + +Very hands on. Starter for a more automagic process. + +Usage: + scripts/delete_sqs_queues.py + + options are: + - list: dumps queue details to local file queues.csv in current directory. + - delete: delete queues from local file queues.csv in current directory. + +Example: + scripts/delete_sqs_queues.py list delete +""" + +from docopt import docopt import boto3 import csv from datetime import datetime -from pprint import pprint -import os -client = boto3.client('sqs', region_name=os.getenv('AWS_REGION')) +FILE_NAME = "/tmp/queues.csv" + +client = boto3.client('sqs', region_name='eu-west-1') def _formatted_date_from_timestamp(timestamp): @@ -27,15 +50,19 @@ def get_queue_attributes(queue_name): ] ) queue_attributes = response['Attributes'] + queue_attributes.update({ + 'QueueUrl': queue_name + }) return queue_attributes -def delete_queue(queue_name): +def delete_queue(queue_url): + print("DELETEING {}".format(queue_url)) response = client.delete_queue( - QueueUrl=queue_name + QueueUrl=queue_url ) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - print('Deleted queue successfully') + print('Deleted queue successfully {}'.format(response['ResponseMetadata'])) else: print('Error occured when attempting to delete queue') pprint(response) @@ -43,10 +70,10 @@ def delete_queue(queue_name): def output_to_csv(queue_attributes): - csv_name = 'queues.csv' - with open(csv_name, 'w') as csvfile: + with open(FILE_NAME, 'w') as csvfile: fieldnames = [ 'Queue Name', + 'Queue URL', 'Number of Messages', 'Number of Messages Delayed', 'Number of Messages Not Visible', @@ -55,23 +82,19 @@ def output_to_csv(queue_attributes): writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for queue_attr in queue_attributes: - queue_url = client.get_queue_url( - QueueName=queue_attr['QueueArn'] - )['QueueUrl'] writer.writerow({ 'Queue Name': queue_attr['QueueArn'], - 'Queue URL': queue_url, + 'Queue URL': queue_attr['QueueUrl'], 'Number of Messages': queue_attr['ApproximateNumberOfMessages'], 'Number of Messages Delayed': queue_attr['ApproximateNumberOfMessagesDelayed'], 'Number of Messages Not Visible': queue_attr['ApproximateNumberOfMessagesNotVisible'], 'Created': _formatted_date_from_timestamp(queue_attr['CreatedTimestamp']) }) - return csv_name -def read_from_csv(csv_name): +def read_from_csv(): queue_urls = [] - with open(csv_name, 'r') as csvfile: + with open(FILE_NAME, 'r') as csvfile: next(csvfile) rows = csv.reader(csvfile, delimiter=',') for row in rows: @@ -79,6 +102,19 @@ def read_from_csv(csv_name): return queue_urls -queues = get_queues() -for queue in queues: - delete_queue(queue) +if __name__ == "__main__": + arguments = docopt(__doc__) + + if arguments[''] == 'list': + queues = get_queues() + queue_attributes = [] + for queue in queues: + queue_attributes.append(get_queue_attributes(queue)) + output_to_csv(queue_attributes) + elif arguments[''] == 'delete': + queues_to_delete = read_from_csv() + for queue in queues_to_delete: + delete_queue(queue) + else: + print("UNKNOWN COMMAND") + exit(1) From 68e15b57f591bda31654ae93c130591c1e967ac3 Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Tue, 30 May 2017 17:29:14 +0100 Subject: [PATCH 2/3] Fixed pep8 --- scripts/delete_sqs_queues.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/delete_sqs_queues.py b/scripts/delete_sqs_queues.py index 1e274b4ed..1ab641f76 100755 --- a/scripts/delete_sqs_queues.py +++ b/scripts/delete_sqs_queues.py @@ -4,20 +4,20 @@ Script to manage SQS queues. Can list or delete queues. Uses boto, so relies on correctly set up AWS access keys and tokens. -In principle use this script to dump details of all queues in a gievn environment, and then +In principle use this script to dump details of all queues in a gievn environment, and then manipulate the resultant CSV file so that it contains the queues you want to delete. Very hands on. Starter for a more automagic process. Usage: scripts/delete_sqs_queues.py - + options are: - list: dumps queue details to local file queues.csv in current directory. - delete: delete queues from local file queues.csv in current directory. Example: - scripts/delete_sqs_queues.py list delete + scripts/delete_sqs_queues.py list delete """ from docopt import docopt @@ -50,9 +50,7 @@ def get_queue_attributes(queue_name): ] ) queue_attributes = response['Attributes'] - queue_attributes.update({ - 'QueueUrl': queue_name - }) + queue_attributes.update({'QueueUrl': queue_name}) return queue_attributes From b98b97c4a21c87f92dbc63784483417c2ec66daf Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Wed, 31 May 2017 15:06:21 +0100 Subject: [PATCH 3/3] Added a comment about delete queues --- scripts/delete_sqs_queues.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/delete_sqs_queues.py b/scripts/delete_sqs_queues.py index 1ab641f76..b167ce392 100755 --- a/scripts/delete_sqs_queues.py +++ b/scripts/delete_sqs_queues.py @@ -55,6 +55,7 @@ def get_queue_attributes(queue_name): def delete_queue(queue_url): + # Note that deleting a queue returns 200 OK if it doesn't exist print("DELETEING {}".format(queue_url)) response = client.delete_queue( QueueUrl=queue_url