import asyncio import logging import os import sys from uz.interface.telegram import bot from uz.metrics import statsd from uz.scanner import UZScanner logger = logging.getLogger('main') DEFAULT_LEVEL = logging.WARNING SCAN_DALAY_SEC = int(os.environ.get('SCAN_DALAY_SEC') or 10) def get_log_level(): level = logging.getLevelName(os.environ.get('LOG_LEVEL', '').upper()) if not isinstance(level, int): level = DEFAULT_LEVEL return level def configure_logging(level=None): level = level or get_log_level() loggers = [ 'main', 'uz.client', 'uz.metrics', 'uz.scanner', ] handler = logging.StreamHandler(stream=sys.stdout) handler.setLevel(level) for i in loggers: log = logging.getLogger(i) log.setLevel(level) log.addHandler(handler) def init_statsd(): host = os.environ.get('STATSD_HOST') port = os.environ.get('STATSD_PORT') if host and port: statsd.host = host statsd.port = int(port) if __name__ == '__main__': configure_logging() init_statsd() scanner = UZScanner(bot.ticket_booked_cb, SCAN_DALAY_SEC) bot.set_scanner(scanner) loop = asyncio.get_event_loop() loop.create_task(bot.loop()) loop.create_task(scanner.run()) logger.warning('Running...') try: loop.run_forever() except KeyboardInterrupt: bot.stop() scanner.stop() logger.warning('Shutting down...') logger.warning('Waiting for all tasks to complete...') pending = asyncio.Task.all_tasks() loop.run_until_complete(asyncio.gather(*pending)) scanner.cleanup() loop.stop()