from discord_logging.handler import DiscordHandler from dotenv import load_dotenv import logging import os def initialise_app(): """ Convienience function that ensures eveything is ready before running main loop. """ # load environment variables from file load_dotenv() # setup logging fmt = '|%(asctime)s| %(levelname)s %(filename)s:%(funcName)s:%(message)s' datefmt = '%Y-%m-%d %H:%M:%S' logger_level = os.getenv('LOGGER_LEVEL', default=None) if logger_level is None: logger_level = 'info' logging.info(f'environment variable LOGGER_LEVEL not set. Using default (info)') level = getattr(logging, logger_level.upper()) logging.basicConfig(format=fmt, datefmt=datefmt, level=level) # setup logging to discord discord_url = os.getenv('DISCORD_URL', default=None) assert discord_url is not None logger = logging.getLogger() discord_handler = DiscordHandler( service_name = 'bandwidth_probing', webhook_url = discord_url, ) discord_handler.setFormatter(logging.Formatter('%(message)s')) discord_handler.setLevel(logging.WARNING) logger.addHandler(discord_handler) # ensure environment variables are set necessary_list = [ 'DB_IP_ADDRESS', 'DB_NAME', 'DB_COLLECTION_NAME' ] for var in necessary_list: assert var in os.environ, f'environment variable {var} not set.' # set defaults if not yet handled default_dict = { 'USER_ID': 0, 'REPLICATES': 3, 'TRIGGER_INTERVAL_SECONDS': 60 } for k, v in default_dict.items(): if not k in os.environ: logging.info(f'environment variable {k} not set. Using default ({v}).') os.environ[k] = str(v) if __name__ == '__main__': initialise_app() logging.warning('test message')