"""Transcoding daemon.""" import sys import boto3 from botocore.exceptions import BotoCoreError from botocore.exceptions import ClientError from sentry_sdk import capture_exception from sentry_sdk import capture_message from transcoding import config from transcoding.connectors import logger from transcoding.logic import processing if __name__ == '__main__': current_app_logger = logger.get_current_logger() sqs = boto3.resource('sqs') sqs_queue = sqs.Queue(config.SQS_TRANSCODING_URL) for message_number in range(config.SQS_NUM_MESSAGES_TO_PROCESS): response = sqs_queue.receive_messages( MaxNumberOfMessages=1, VisibilityTimeout=config.SQS_MESSAGE_VISIBILITY_TIMEOUT, WaitTimeSeconds=config.SQS_WAIT_TIME_SECONDS, ) if response: try: sqs_message = response[0] processing_result, details = processing.process_transcoding_job( sqs_message, message_number) if not processing_result: current_app_logger.critical( 'Failed to complete transcoding job: {details}'.format( details=details)) delete_messages_response = sqs_queue.delete_messages( Entries=[ { 'Id': 'single_message', 'ReceiptHandle': sqs_message.receipt_handle }, ] ) failed_to_delete = delete_messages_response.get('Failed', []) if failed_to_delete: error_message = ( 'Failed to delete sqs messages: {messages}'.format( messages=str(failed_to_delete))) current_app_logger.critical(error_message) capture_message(error_message) else: current_app_logger.info('SQS message deleted.') except (BotoCoreError, ClientError) as error: capture_exception(error) current_app_logger.critical('Botocore error: {}. Exiting.'.format(error)) sys.exit(1) else: current_app_logger.info('No SQS messages received. Task will now exit.')