mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-12 00:02:36 -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
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.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 boto3
|
||||||
import csv
|
import csv
|
||||||
from datetime import datetime
|
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):
|
def _formatted_date_from_timestamp(timestamp):
|
||||||
@@ -27,15 +50,19 @@ def get_queue_attributes(queue_name):
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
queue_attributes = response['Attributes']
|
queue_attributes = response['Attributes']
|
||||||
|
queue_attributes.update({
|
||||||
|
'QueueUrl': queue_name
|
||||||
|
})
|
||||||
return queue_attributes
|
return queue_attributes
|
||||||
|
|
||||||
|
|
||||||
def delete_queue(queue_name):
|
def delete_queue(queue_url):
|
||||||
|
print("DELETEING {}".format(queue_url))
|
||||||
response = client.delete_queue(
|
response = client.delete_queue(
|
||||||
QueueUrl=queue_name
|
QueueUrl=queue_url
|
||||||
)
|
)
|
||||||
if response['ResponseMetadata']['HTTPStatusCode'] == 200:
|
if response['ResponseMetadata']['HTTPStatusCode'] == 200:
|
||||||
print('Deleted queue successfully')
|
print('Deleted queue successfully {}'.format(response['ResponseMetadata']))
|
||||||
else:
|
else:
|
||||||
print('Error occured when attempting to delete queue')
|
print('Error occured when attempting to delete queue')
|
||||||
pprint(response)
|
pprint(response)
|
||||||
@@ -43,10 +70,10 @@ def delete_queue(queue_name):
|
|||||||
|
|
||||||
|
|
||||||
def output_to_csv(queue_attributes):
|
def output_to_csv(queue_attributes):
|
||||||
csv_name = 'queues.csv'
|
with open(FILE_NAME, 'w') as csvfile:
|
||||||
with open(csv_name, 'w') as csvfile:
|
|
||||||
fieldnames = [
|
fieldnames = [
|
||||||
'Queue Name',
|
'Queue Name',
|
||||||
|
'Queue URL',
|
||||||
'Number of Messages',
|
'Number of Messages',
|
||||||
'Number of Messages Delayed',
|
'Number of Messages Delayed',
|
||||||
'Number of Messages Not Visible',
|
'Number of Messages Not Visible',
|
||||||
@@ -55,23 +82,19 @@ def output_to_csv(queue_attributes):
|
|||||||
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
||||||
writer.writeheader()
|
writer.writeheader()
|
||||||
for queue_attr in queue_attributes:
|
for queue_attr in queue_attributes:
|
||||||
queue_url = client.get_queue_url(
|
|
||||||
QueueName=queue_attr['QueueArn']
|
|
||||||
)['QueueUrl']
|
|
||||||
writer.writerow({
|
writer.writerow({
|
||||||
'Queue Name': queue_attr['QueueArn'],
|
'Queue Name': queue_attr['QueueArn'],
|
||||||
'Queue URL': queue_url,
|
'Queue URL': queue_attr['QueueUrl'],
|
||||||
'Number of Messages': queue_attr['ApproximateNumberOfMessages'],
|
'Number of Messages': queue_attr['ApproximateNumberOfMessages'],
|
||||||
'Number of Messages Delayed': queue_attr['ApproximateNumberOfMessagesDelayed'],
|
'Number of Messages Delayed': queue_attr['ApproximateNumberOfMessagesDelayed'],
|
||||||
'Number of Messages Not Visible': queue_attr['ApproximateNumberOfMessagesNotVisible'],
|
'Number of Messages Not Visible': queue_attr['ApproximateNumberOfMessagesNotVisible'],
|
||||||
'Created': _formatted_date_from_timestamp(queue_attr['CreatedTimestamp'])
|
'Created': _formatted_date_from_timestamp(queue_attr['CreatedTimestamp'])
|
||||||
})
|
})
|
||||||
return csv_name
|
|
||||||
|
|
||||||
|
|
||||||
def read_from_csv(csv_name):
|
def read_from_csv():
|
||||||
queue_urls = []
|
queue_urls = []
|
||||||
with open(csv_name, 'r') as csvfile:
|
with open(FILE_NAME, 'r') as csvfile:
|
||||||
next(csvfile)
|
next(csvfile)
|
||||||
rows = csv.reader(csvfile, delimiter=',')
|
rows = csv.reader(csvfile, delimiter=',')
|
||||||
for row in rows:
|
for row in rows:
|
||||||
@@ -79,6 +102,19 @@ def read_from_csv(csv_name):
|
|||||||
return queue_urls
|
return queue_urls
|
||||||
|
|
||||||
|
|
||||||
queues = get_queues()
|
if __name__ == "__main__":
|
||||||
for queue in queues:
|
arguments = docopt(__doc__)
|
||||||
delete_queue(queue)
|
|
||||||
|
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