"""Label Copy Export generating Daemon.""" import signal import sys from label_copy_export import config from label_copy_export.connectors import loggly from label_copy_export.connectors.sentry import sentry_client from label_copy_export.constants.exceptions import FailedToStartError from label_copy_export.logic.queue import QueueWorkerManager if __name__ == '__main__': current_app_logger = loggly.get_current_logger() manager = QueueWorkerManager( config.QUEUE_READER_THREADS, config.API_EXECUTOR_THREADS, config.SQS_QUEUE, config.PREFETCH_COUNT, config.SQS_MESSAGE_VISIBILITY_TIMEOUT, config.SQS_WAIT_TIME_SECONDS, config.SQS_NUM_MESSAGES, current_app_logger ) manager.debug = config.DEBUG def signal_handler(signum, frame): """Start or stop daemon depending on signal. Use this function for stopping daemon. """ current_app_logger.info('Stopping queue workers and exiting.') manager.stop(config.STOP_TIMEOUT) sys.exit(0) signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) try: manager.start() current_app_logger.info('App started.') while True: signal.pause() except FailedToStartError: if sentry_client: sentry_client.captureException() current_app_logger.critical('App failed to start. Exiting..') sys.exit(1)