2024-06-25 22:56:16 +02:00

81 lines
2.6 KiB
Python

import subprocess
import click
from pathlib import PurePath
import configparser
import logging
from logging.handlers import RotatingFileHandler
import sys
APP_NAME = 'iottb'
MAX_VERBOSITY = 3
def setup_logging(verbosity, debug):
# Formats
console_log_formats = {
0: '%(levelname)s - %(message)s',
1: '%(levelname)s - %(module)s - %(message)s',
2: '%(levelname)s - %(asctime)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s'
}
file_log_formats = {
0: '%(levelname)s - %(asctime)s - %(module)s - %(message)s',
1: '%(levelname)s - %(asctime)s - %(module)s - %(funcName)s - %(message)s',
2: '%(levelname)s - %(asctime)s - %(module)s - %(funcName)s - %(lineno)d - %(message)s'
}
# set default log level, change later based on parameters
log_level = logging.ERROR
logger = logging.getLogger()
date_format = '%Y-%m-%d %H:%M:%S'
if verbosity > 0:
log_level = logging.WARNING
if verbosity > MAX_VERBOSITY:
verbosity = MAX_VERBOSITY
log_level = logging.INFO
assert verbosity <= MAX_VERBOSITY, f'Verbosity must be <= {MAX_VERBOSITY}'
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(logging.Formatter(console_log_formats[verbosity], datefmt=date_format))
console_handler.setLevel(logging.DEBUG) # can keep at debug since it depends on global level?
logger.addHandler(console_handler)
if debug:
log_level = logging.DEBUG
# Logfile logs INFO+, no debugs though
file_handler = RotatingFileHandler(f'{APP_NAME}.log', maxBytes=10240, backupCount=5)
file_handler.setFormatter(logging.Formatter(file_log_formats[verbosity], datefmt=date_format))
file_handler.setLevel(logging.INFO)
# finnish setting up logging
logger.addHandler(file_handler)
logger.setLevel(log_level)
return logger
class Environment:
def __init__(self, cfg=None, db=None, device=None):
self.cfg = cfg
self.db = db
self.device = device
pass
def load_config(cfg_file_path):
cfg_file = PurePath(click.get_app_dir(APP_NAME)).joinpath('iottb.cfg')
@click.group()
@click.option('-v', '--verbosity', type=click.IntRange(0, MAX_VERBOSITY), default=0,
help='Verbosity level')
@click.option('-d', '--debug', is_flag=True, default=False, help='Debug mode')
@click.option('--cfg-file', type=click.Path(), default=PurePath(click.get_app_dir(APP_NAME)).joinpath('iottb.cfg'),
envvar='IOTTB_CONF_HOME',)
def main(debug, verbose):
setup_logging(verbose, debug)
if __name__ == '__main__':
main(auto_envvar_prefix='IOTTB')