updating receive script

This commit is contained in:
2019-10-10 01:19:06 +01:00
parent 6b7e9192b9
commit 0773fa28c5
3 changed files with 65 additions and 51 deletions

View File

@@ -29,44 +29,68 @@ class receiveFromSQS(object):
return self.queueLength return self.queueLength
def _receiveSQSMessage( def _receiveSQSMessage(
self, self, totalNumberOfMessages, maxNumberOfMessages=10
totalNumberOfMessages,
maxNumberOfMessages=10,
deleteOnReceipt=False,
): ):
self.response = [] self.resp = []
loops = int(math.ceil(totalNumberOfMessages / maxNumberOfMessages)) self.loops = int(
for i in range(0, loops * 2): math.ceil(totalNumberOfMessages / maxNumberOfMessages)
self.response.append( )
if totalNumberOfMessages <= 10:
maxNumberOfMessages = totalNumberOfMessages
else:
# Find how many times total-loop*max, on last loop
# replace max with this
maxNumberOfMessagesFinal = self.loops * maxNumberOfMessages - abs(10 - (
totalNumberOfMessages - (self.loops * maxNumberOfMessages)
))
print(maxNumberOfMessagesFinal)
if self.loops == 0:
raise RuntimeError('No messages in the queue')
for i in range(0, self.loops):
loopTrack = 0
if loopTrack == self.loops:
maxNumberOfMessages = maxNumberOfMessagesFinal
self.resp.append(
self.sqs.receive_message( self.sqs.receive_message(
QueueUrl=self.queueURL, QueueUrl=self.queueURL,
MaxNumberOfMessages=maxNumberOfMessages, MaxNumberOfMessages=maxNumberOfMessages,
) )
) )
entries = [ # Needs Keyerror try
{'Id': msg['MessageId'], 'ReceiptHandle': msg['ReceiptHandle']}
for msg in self.resp[i]['Messages']
]
self._deleteSQSMessages(entries)
loopTrack += 1
return self return self
def _extractMessageFromSQS(self, totalNumberOfMessages, deleteOnReceipt): def _extractMessageFromSQS(self, totalNumberOfMessages):
self.extractedMessages = [] self.extractedMessages = []
self.receiptHandles = [] self.receiptHandles = []
try: try:
loops = len(self.response) for i in range(0, self.loops):
for i in range(0, loops): _loops = len(self.resp[i]['Messages'])
if 'Messages' in self.response[i]: for j in range(0, _loops):
_message = self.response[i]['Messages'] if 'Messages' in self.resp[i]:
for rawMessage in _message: self.extractedMessages.append(
self.extractedMessages.append(rawMessage['Body']) self.resp[i]['Messages'][j]['Body']
# self.receiptHandles.append(rawMessage['ReceiptHandle'])
if deleteOnReceipt:
self.sqs.delete_message(
QueueUrl=self.queueURL,
ReceiptHandle=rawMessage['ReceiptHandle'],
) )
else: else:
print('No messages in the queue') print('No messages in the queue')
except KeyError: except KeyError:
print('No messages in the queue') print('No messages in the queue key')
return self return self
def _deleteSQSMessages(self, entries):
self.respDelete = self.sqs.delete_message_batch(
QueueUrl=self.queueURL, Entries=entries
)
if len(self.respDelete['Successful']) != len(entries):
raise RuntimeError(
f'Failed to delete messages: entries={entries!r}'
f' resp={self.respDelete!r}'
)
def _decodeMessages(self): def _decodeMessages(self):
if len(self.extractedMessages) == 0: if len(self.extractedMessages) == 0:
print('No messages to process') print('No messages to process')
@@ -76,29 +100,27 @@ class receiveFromSQS(object):
self.messages.append(decoded) self.messages.append(decoded)
return self return self
def _deleteMessage(self, ReceiptHandle): def receiveAllMessages(self, b64=True, _totalNumberOfMessages=None):
self.sqs.delete_message( if _totalNumberOfMessages is None:
QueueUrl=self.queueURL, ReceiptHandle=ReceiptHandle
)
def receiveAllMessages(self, b64=True, deleteOnReceipt=False):
totalNumberOfMessages = self.getQueueLength() totalNumberOfMessages = self.getQueueLength()
self._receiveSQSMessage( else:
totalNumberOfMessages, deleteOnReceipt=deleteOnReceipt totalNumberOfMessages = _totalNumberOfMessages
) self._receiveSQSMessage(totalNumberOfMessages)
self._extractMessageFromSQS( self._extractMessageFromSQS(
totalNumberOfMessages=totalNumberOfMessages, totalNumberOfMessages=totalNumberOfMessages
deleteOnReceipt=deleteOnReceipt
) )
if b64: if b64:
self._decodeMessages() self._decodeMessages()
else: else:
self.messages = self.extractedMessages self.messages = self.extractedMessages
# if deleteOnReceipt:
# for receipt in self.receiptHandles:
# self._deleteMessage(receipt)
return self return self
def receiveNMessages(self, numberOfMessages, b64=True):
self.receiveAllMessages(
b64=b64, _totalNumberOfMessages=numberOfMessages
)
pass
inst = receiveFromSQS.createSession( inst = receiveFromSQS.createSession(
profileName='plex-aws', profileName='plex-aws',
@@ -106,15 +128,6 @@ inst = receiveFromSQS.createSession(
'.com/745437999005/slack-bot.fifo', '.com/745437999005/slack-bot.fifo',
) )
inst.receiveAllMessages(deleteOnReceipt=False) inst.receiveNMessages(numberOfMessages=12)
for item in inst.messages: for item in inst.messages:
print(item) print(item)
# queueLength = inst.getQueueLength()
# response = inst._receiveSQSMessage(queueLength)._extractMessageFromSQS(
# queueLength
# )
# # messages = inst._receiveSQSMessage(12)._extractMessageFromSQS(12)
# for item in response.message:
# print(item)

View File

@@ -58,5 +58,6 @@ instM = (
.generateOutput() .generateOutput()
) )
for item in instM.output: for _ in range(0, 5):
for item in instM.output:
inst.sendMessage(message=item, messageGroupId="slack-bot-M62") inst.sendMessage(message=item, messageGroupId="slack-bot-M62")