mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-09 06:32:11 -05:00
Did some work around the delete queues script
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
queues.csv
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
|
||||
72
scripts/delete_sqs_queues.py
Normal file → Executable file
72
scripts/delete_sqs_queues.py
Normal file → Executable file
@@ -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 <action>
|
||||
|
||||
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['<action>'] == 'list':
|
||||
queues = get_queues()
|
||||
queue_attributes = []
|
||||
for queue in queues:
|
||||
queue_attributes.append(get_queue_attributes(queue))
|
||||
output_to_csv(queue_attributes)
|
||||
elif arguments['<action>'] == 'delete':
|
||||
queues_to_delete = read_from_csv()
|
||||
for queue in queues_to_delete:
|
||||
delete_queue(queue)
|
||||
else:
|
||||
print("UNKNOWN COMMAND")
|
||||
exit(1)
|
||||
|
||||
Reference in New Issue
Block a user