Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rolandoislas
GitHub Repository: rolandoislas/drc-sim
Path: blob/master/drc-sim-backend
128 views
#!/usr/bin/env python3
import os
import sys

from src.server.data import constants
from src.server.data.args import Args
from src.server.data.config_general import ConfigGeneral
from src.server.ui.cli.cli_main import CliMain
from src.server.util.logging.logger import Logger
from src.server.util.logging.logger_backend import LoggerBackend
from src.server.util.logging.logger_cli import LoggerCli
from src.server.util.logging.logger_gui import LoggerGui
from src.server.util.logging.logger_wpa import LoggerWpa
from src.server.util.os_util import OsUtil


def init_loggers():
    """
    Initialize loggers with a specified log level if they have the argument.
    :return: None
    """
    loggers = (Logger, LoggerBackend, LoggerGui, LoggerCli, LoggerWpa)
    for logger in loggers:
        if Args.args.debug:
            logger.set_level(Logger.DEBUG)
        elif Args.args.extra:
            logger.set_level(Logger.EXTRA)
        elif Args.args.finer:
            logger.set_level(Logger.FINER)
        elif Args.args.verbose:
            logger.set_level(Logger.VERBOSE)
        else:
            logger.set_level(Logger.INFO)


def start():
    """
    Main loop. It can be GUI or CLI based on args. Dies if an error makes it way here or main loop stops.
    :return: None
    """
    ui = None
    try:
        if Args.args.cli:
            Logger.info("Enabling CLI")
            ui = CliMain()
        else:
            Logger.info("Enabling GUI")
            from src.server.ui.gui.gui_main import GuiMain
            ui = GuiMain()
        ui.start()
    except KeyboardInterrupt:
        if ui:
            ui.stop()
    except Exception as e:
        if ui:
            ui.stop()
        Logger.exception(e)
    Logger.info("Exiting")


def log_level():
    """
    Log at every level to display the levels that are enabled.
    :return: None
    """
    # Logger info
    Logger.debug("Debug logging enabled")
    Logger.extra("Extra debug logging enabled")
    Logger.finer("Finer debug logging enabled")
    Logger.verbose("Verbose logging enabled")
    if LoggerWpa.get_level() <= Logger.FINER:
        LoggerWpa.warn("At this log level SSIDs are logged!")


def check_root():
    """
    Exit if not root
    :return: 
    """
    if os.getuid() != 0:
        Logger.throw("Not running as root!")
        sys.exit()
    else:
        Logger.extra("I am root!")


def main():
    """
    Main entry point. Parses arguments, loads configuration files, initialized loggers and starts the main loop.
    :return: None
    """
    Args.parse_args()
    ConfigGeneral.load()
    ConfigGeneral.save()
    init_loggers()
    check_root()
    Logger.info("Initializing drc-sim-backend version %s", constants.VERSION)
    Logger.info("Using \"%s\" as home folder.", constants.PATH_ROOT)
    log_level()
    OsUtil.log_info(Logger)
    start()


if __name__ == '__main__':
    main()