65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
import boto3
|
|
from datetime import datetime
|
|
|
|
# WICHTIG: Region korrigiert
|
|
sqs = boto3.client('sqs', region_name='us-east-2')
|
|
|
|
def get_all_queues():
|
|
"""Findet automatisch alle Queues, die auf '-queue' enden (keine DLQs)"""
|
|
queues = []
|
|
paginator = sqs.get_paginator('list_queues')
|
|
for page in paginator.paginate():
|
|
for url in page.get('QueueUrls', []):
|
|
name = url.split('/')[-1]
|
|
if name.endswith('-queue'):
|
|
queues.append((name, url))
|
|
return queues
|
|
|
|
def main():
|
|
print(f"\n{'='*70}")
|
|
print(f"Email Queue Monitoring (us-east-2) - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
print(f"{'='*70}\n")
|
|
|
|
queues = get_all_queues()
|
|
|
|
for name, url in queues:
|
|
dlq_name = name + '-dlq'
|
|
domain = name.replace('-queue', '').replace('-', '.') # Grobe Rückumwandlung
|
|
|
|
try:
|
|
# Main Queue Stats
|
|
attrs = sqs.get_queue_attributes(
|
|
QueueUrl=url,
|
|
AttributeNames=['ApproximateNumberOfMessages', 'ApproximateNumberOfMessagesNotVisible', 'ApproximateAgeOfOldestMessage']
|
|
)['Attributes']
|
|
|
|
# DLQ Stats (Versuch URL zu finden)
|
|
try:
|
|
dlq_url = sqs.get_queue_url(QueueName=dlq_name)['QueueUrl']
|
|
dlq_attrs = sqs.get_queue_attributes(QueueUrl=dlq_url, AttributeNames=['ApproximateNumberOfMessages'])['Attributes']
|
|
dlq_count = int(dlq_attrs.get('ApproximateNumberOfMessages', 0))
|
|
except:
|
|
dlq_count = -1 # Keine DLQ gefunden
|
|
|
|
available = int(attrs.get('ApproximateNumberOfMessages', 0))
|
|
flight = int(attrs.get('ApproximateNumberOfMessagesNotVisible', 0))
|
|
|
|
status = "✅"
|
|
if dlq_count > 0: status = "⚠️ "
|
|
if available > 50: status = "🔥"
|
|
|
|
print(f"{status} Queue: {name}")
|
|
print(f" Pending: {available:<5} (Waiting for worker)")
|
|
print(f" Processing: {flight:<5} (Currently in worker)")
|
|
if dlq_count >= 0:
|
|
print(f" DLQ Errors: {dlq_count:<5} (In {dlq_name})")
|
|
else:
|
|
print(f" DLQ: Not found")
|
|
print("-" * 30)
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error checking {name}: {e}")
|
|
|
|
if __name__ == '__main__':
|
|
main() |