Exemplo n.º 1
0
    def set_connection(self, target):
        if self.transmit_handler != None:
            self.cancel_connection()
        self.transmit_handler = TransmitHandler(target)

        self.transmit_handler.set_origin_name(self._origin_name)

        logger = logging.getLogger()
        logger.addHandler(self.transmit_handler)

        for k in list(self.agents.keys()):
            self.remove_agent(k)
Exemplo n.º 2
0
Arquivo: Logs.py Projeto: pazdera/lnst
    def set_connection(self, target):
        if self.transmit_handler != None:
            self.cancel_connection()
        self.transmit_handler = TransmitHandler(target)

        logger = logging.getLogger()
        logger.addHandler(self.transmit_handler)

        for k in self.slaves.keys():
            self.remove_slave(k)
Exemplo n.º 3
0
Arquivo: Logs.py Projeto: wngjan/lnst
    def set_connection(self, target):
        if self.transmit_handler != None:
            self.cancel_connection()
        self.transmit_handler = TransmitHandler(target)

        self.transmit_handler.set_origin_name(self._origin_name)

        logger = logging.getLogger()
        logger.addHandler(self.transmit_handler)

        for k in self.slaves.keys():
            self.remove_slave(k)
Exemplo n.º 4
0
class LoggingCtl:
    log_folder = ""
    display_handler = None
    export_handler = None
    recipe_handlers = (None, None)
    recipe_log_path = ""
    agents = {}
    transmit_handler = None
    _id_seq = 0
    log_list = {}

    def __init__(self, debug=False, log_dir=None, log_subdir="", colours=True):
        #clear any previously set handlers
        logger = logging.getLogger('')
        for i in list(logger.handlers):
            logger.removeHandler(i)
        for key, logger in list(logging.Logger.manager.loggerDict.items()):
            if type(logger) != type(logging.Logger):
                continue
            for i in list(logger.handlers):
                logger.removeHandler(i)

        self._origin_name = None

        if log_dir != None:
            self.log_folder = os.path.abspath(os.path.join(
                log_dir, log_subdir))
        else:
            self.log_folder = os.path.abspath(
                os.path.join(os.path.dirname(sys.argv[0]), './Logs',
                             log_subdir))
        if not os.path.isdir(self.log_folder):
            self._clean_folder(self.log_folder)

        #the display_handler will display logs in the terminal
        self.display_handler = logging.StreamHandler(sys.stdout)
        self.display_handler.setFormatter(MultilineFormatter(colours))

        # the export_handler will add log messages to lists, so it could be exported to .lrc file
        self.log_list["controller"] = []
        self.export_handler = self._create_export_handler(
            self.log_list["controller"], colours)
        self.export_handler.setLevel(logging.DEBUG)

        if not debug:
            self.display_handler.setLevel(logging.INFO)
        else:
            if debug == 1:
                self.display_handler.setLevel(logging.DEBUG)
            else:
                self.display_handler.setLevel(logging.NOTSET)

        logger = logging.getLogger()
        logger.setLevel(logging.NOTSET)
        logger.addHandler(self.display_handler)
        logger.addHandler(self.export_handler)

    def unset_formatter(self):
        self.display_handler.setFormatter(None)
        self.export_handler.setFormatter(None)

    def _gen_index(self, increment=True):
        if increment:
            self._id_seq += 1
        return "%02d" % self._id_seq

    def set_recipe(self, recipe_path, clean=True, prepend=False, expand=""):
        recipe_name = os.path.splitext(os.path.split(recipe_path)[1])[0]
        if expand != "":
            recipe_name += "_" + expand
        if prepend:
            if expand == "match_1":
                recipe_name = self._gen_index() + "_" + recipe_name
            else:
                recipe_name = self._gen_index(
                    increment=False) + "_" + recipe_name

        self.recipe_log_path = os.path.join(self.log_folder, recipe_name)
        if clean:
            self._clean_folder(self.recipe_log_path)

        (recipe_info,
         recipe_debug) = self._create_file_handler(self.recipe_log_path)
        logger = logging.getLogger()
        #remove handlers of the previous recipe
        logger.removeHandler(self.recipe_handlers[0])
        logger.removeHandler(self.recipe_handlers[1])

        self.recipe_handlers = (recipe_info, recipe_debug)
        logger.addHandler(recipe_info)
        logger.addHandler(recipe_debug)

    def unset_recipe(self):
        logger = logging.getLogger()
        logger.removeHandler(self.recipe_handlers[0])
        logger.removeHandler(self.recipe_handlers[1])
        self.recipe_handlers = (None, None)

    def add_agent(self, agent_id):
        agent_log_path = os.path.join(self.recipe_log_path, agent_id)
        self._clean_folder(agent_log_path)

        logger = logging.getLogger(agent_id)
        logger.setLevel(logging.DEBUG)
        logger.propagate = True

        (agent_info, agent_debug) = self._create_file_handler(agent_log_path)
        logger.addHandler(agent_info)
        logger.addHandler(agent_debug)

        self.log_list[agent_id] = []
        export_handler = self._create_export_handler(self.log_list[agent_id])
        logger.addHandler(export_handler)

        self.agents[agent_id] = (agent_info, agent_debug, export_handler)

    def remove_agent(self, agent_id):
        logger = logging.getLogger(agent_id)
        logger.propagate = False

        logger.removeHandler(self.agents[agent_id][0])
        logger.removeHandler(self.agents[agent_id][1])
        logger.removeHandler(self.agents[agent_id][2])

        del self.agents[agent_id]

    def add_client_log(self, agent_id, log_record):
        logger = logging.getLogger(agent_id)

        log_record['address'] = agent_id
        record = logging.makeLogRecord(log_record)
        logger.handle(record)

    def set_connection(self, target):
        if self.transmit_handler != None:
            self.cancel_connection()
        self.transmit_handler = TransmitHandler(target)

        self.transmit_handler.set_origin_name(self._origin_name)

        logger = logging.getLogger()
        logger.addHandler(self.transmit_handler)

        for k in list(self.agents.keys()):
            self.remove_agent(k)

    def cancel_connection(self):
        if self.transmit_handler != None:
            logger = logging.getLogger()
            logger.removeHandler(self.transmit_handler)
            del self.transmit_handler

    def disable_logging(self):
        self.cancel_connection()

        for s in list(self.agents.keys()):
            self.remove_agent(s)

        self.unset_recipe()
        logger = logging.getLogger()
        logger.removeHandler(self.display_handler)
        logger.removeHandler(self.export_handler)
        self.display_handler = None
        self.export_handler = None

    def _clean_folder(self, path):
        try:
            shutil.rmtree(path)
        except OSError as e:
            if e.errno != 2:
                raise
        os.makedirs(path)

    def _create_file_handler(self, folder_path):
        file_debug = logging.FileHandler(os.path.join(folder_path, 'debug'))
        file_debug.setFormatter(MultilineFormatter())
        file_debug.setLevel(logging.DEBUG)

        file_info = logging.FileHandler(os.path.join(folder_path, 'info'))
        file_info.setFormatter(MultilineFormatter())
        file_info.setLevel(logging.INFO)

        return (file_debug, file_info)

    def _create_export_handler(self, target: list, colours: bool = False):
        export_handler = ExportHandler(target)
        export_handler.setFormatter(MultilineFormatter(colours))

        return export_handler

    def get_recipe_log_path(self):
        return self.recipe_log_path

    def get_recipe_log_list(self):
        return self.log_list

    def set_origin_name(self, name):
        self._origin_name = name
        if self.transmit_handler != None:
            self.transmit_handler.set_origin_name(name)

    def print_log_dir(self):
        logging.info("Logs are stored in '%s'" % self.log_folder)
Exemplo n.º 5
0
class LoggingCtl:
    log_folder = ""
    display_handler = None
    recipe_handlers = (None, None)
    recipe_log_path = ""
    slaves = {}
    transmit_handler = None

    def __init__(self, debug=False, log_dir=None, log_subdir="", colours=True):
        #clear any previously set handlers
        logger = logging.getLogger('')
        for i in list(logger.handlers):
            logger.removeHandler(i)
        for key, logger in logging.Logger.manager.loggerDict.iteritems():
            if type(logger) != type(logging.Logger):
                continue
            for i in list(logger.handlers):
                logger.removeHandler(i)

        self._origin_name = None

        if log_dir != None:
            self.log_folder = os.path.abspath(os.path.join(
                log_dir, log_subdir))
        else:
            self.log_folder = os.path.abspath(
                os.path.join(os.path.dirname(sys.argv[0]), './Logs',
                             log_subdir))
        if not os.path.isdir(self.log_folder):
            self._clean_folder(self.log_folder)

        #the display_handler will display logs in the terminal
        self.display_handler = logging.StreamHandler(sys.stdout)
        self.display_handler.setFormatter(MultilineFormatter(colours))
        if not debug:
            self.display_handler.setLevel(logging.INFO)
        else:
            if debug == 1:
                self.display_handler.setLevel(logging.DEBUG)
            else:
                self.display_handler.setLevel(logging.NOTSET)

        logger = logging.getLogger()
        logger.setLevel(logging.NOTSET)
        logger.addHandler(self.display_handler)

    def set_recipe(self, recipe_path, clean=True, expand=""):
        recipe_name = os.path.splitext(os.path.split(recipe_path)[1])[0]
        if expand != "":
            recipe_name += "_" + expand
        self.recipe_log_path = os.path.join(self.log_folder, recipe_name)
        if clean:
            self._clean_folder(self.recipe_log_path)

        (recipe_info,
         recipe_debug) = self._create_file_handler(self.recipe_log_path)
        logger = logging.getLogger()
        #remove handlers of the previous recipe
        logger.removeHandler(self.recipe_handlers[0])
        logger.removeHandler(self.recipe_handlers[1])

        self.recipe_handlers = (recipe_info, recipe_debug)
        logger.addHandler(recipe_info)
        logger.addHandler(recipe_debug)

    def unset_recipe(self):
        logger = logging.getLogger()
        logger.removeHandler(self.recipe_handlers[0])
        logger.removeHandler(self.recipe_handlers[1])
        self.recipe_handlers = (None, None)

    def add_slave(self, slave_id):
        slave_log_path = os.path.join(self.recipe_log_path, slave_id)
        self._clean_folder(slave_log_path)

        logger = logging.getLogger(slave_id)
        logger.setLevel(logging.DEBUG)
        logger.propagate = True

        (slave_info, slave_debug) = self._create_file_handler(slave_log_path)
        logger.addHandler(slave_info)
        logger.addHandler(slave_debug)

        self.slaves[slave_id] = (slave_info, slave_debug)

    def remove_slave(self, slave_id):
        logger = logging.getLogger(slave_id)
        logger.propagate = False

        logger.removeHandler(self.slaves[slave_id][0])
        logger.removeHandler(self.slaves[slave_id][1])

        del self.slaves[slave_id]

    def add_client_log(self, slave_id, log_record):
        logger = logging.getLogger(slave_id)

        log_record['address'] = slave_id
        record = logging.makeLogRecord(log_record)
        logger.handle(record)

    def set_connection(self, target):
        if self.transmit_handler != None:
            self.cancel_connection()
        self.transmit_handler = TransmitHandler(target)

        self.transmit_handler.set_origin_name(self._origin_name)

        logger = logging.getLogger()
        logger.addHandler(self.transmit_handler)

        for k in self.slaves.keys():
            self.remove_slave(k)

    def cancel_connection(self):
        if self.transmit_handler != None:
            logger = logging.getLogger()
            logger.removeHandler(self.transmit_handler)
            del self.transmit_handler

    def disable_logging(self):
        self.cancel_connection()

        for s in self.slaves.keys():
            self.remove_slave(s)

        self.unset_recipe()
        logger = logging.getLogger()
        logger.removeHandler(self.display_handler)
        self.display_handler = None

    def _clean_folder(self, path):
        try:
            shutil.rmtree(path)
        except OSError as e:
            if e.errno != 2:
                raise
        os.makedirs(path)

    def _create_file_handler(self, folder_path):
        file_debug = logging.FileHandler(os.path.join(folder_path, 'debug'))
        file_debug.setFormatter(MultilineFormatter())
        file_debug.setLevel(logging.DEBUG)

        file_info = logging.FileHandler(os.path.join(folder_path, 'info'))
        file_info.setFormatter(MultilineFormatter())
        file_info.setLevel(logging.INFO)

        return (file_debug, file_info)

    def get_recipe_log_path(self):
        return self.recipe_log_path

    def set_origin_name(self, name):
        self._origin_name = name
        if self.transmit_handler != None:
            self.transmit_handler.set_origin_name(name)

    def print_log_dir(self):
        logging.info("Logs are stored in '%s'" % self.log_folder)
Exemplo n.º 6
0
Arquivo: Logs.py Projeto: wngjan/lnst
class LoggingCtl:
    log_folder = ""
    display_handler = None
    recipe_handlers = (None,None)
    recipe_log_path = ""
    slaves = {}
    transmit_handler = None

    def __init__(self, debug=False, log_dir=None, log_subdir="", colours=True):
        #clear any previously set handlers
        logger = logging.getLogger('')
        for i in list(logger.handlers):
            logger.removeHandler(i)
        for key, logger in logging.Logger.manager.loggerDict.iteritems():
            if type(logger) != type(logging.Logger):
                continue
            for i in list(logger.handlers):
                logger.removeHandler(i)

        self._origin_name = None

        if log_dir != None:
            self.log_folder = os.path.abspath(os.path.join(log_dir, log_subdir))
        else:
            self.log_folder = os.path.abspath(os.path.join(
                                                os.path.dirname(sys.argv[0]),
                                                './Logs',
                                                log_subdir))
        if not os.path.isdir(self.log_folder):
            self._clean_folder(self.log_folder)

        #the display_handler will display logs in the terminal
        self.display_handler = logging.StreamHandler(sys.stdout)
        self.display_handler.setFormatter(MultilineFormatter(colours))
        if not debug:
            self.display_handler.setLevel(logging.INFO)
        else:
            if debug == 1:
                self.display_handler.setLevel(logging.DEBUG)
            else:
                self.display_handler.setLevel(logging.NOTSET)

        logger = logging.getLogger()
        logger.setLevel(logging.NOTSET)
        logger.addHandler(self.display_handler)

    def set_recipe(self, recipe_path, clean=True, expand=""):
        recipe_name = os.path.splitext(os.path.split(recipe_path)[1])[0]
        if expand != "":
            recipe_name += "_" + expand
        self.recipe_log_path = os.path.join(self.log_folder, recipe_name)
        if clean:
            self._clean_folder(self.recipe_log_path)

        (recipe_info, recipe_debug) = self._create_file_handler(
                                                        self.recipe_log_path)
        logger = logging.getLogger()
        #remove handlers of the previous recipe
        logger.removeHandler(self.recipe_handlers[0])
        logger.removeHandler(self.recipe_handlers[1])

        self.recipe_handlers = (recipe_info, recipe_debug)
        logger.addHandler(recipe_info)
        logger.addHandler(recipe_debug)

    def unset_recipe(self):
        logger = logging.getLogger()
        logger.removeHandler(self.recipe_handlers[0])
        logger.removeHandler(self.recipe_handlers[1])
        self.recipe_handlers = (None, None)

    def add_slave(self, slave_id):
        slave_log_path = os.path.join(self.recipe_log_path, slave_id)
        self._clean_folder(slave_log_path)

        logger = logging.getLogger(slave_id)
        logger.setLevel(logging.DEBUG)
        logger.propagate = True

        (slave_info, slave_debug) = self._create_file_handler(slave_log_path)
        logger.addHandler(slave_info)
        logger.addHandler(slave_debug)

        self.slaves[slave_id] = (slave_info, slave_debug)

    def remove_slave(self, slave_id):
        logger = logging.getLogger(slave_id)
        logger.propagate = False

        logger.removeHandler(self.slaves[slave_id][0])
        logger.removeHandler(self.slaves[slave_id][1])

        del self.slaves[slave_id]

    def add_client_log(self, slave_id, log_record):
        logger = logging.getLogger(slave_id)

        log_record['address'] = slave_id
        record = logging.makeLogRecord(log_record)
        logger.handle(record)

    def set_connection(self, target):
        if self.transmit_handler != None:
            self.cancel_connection()
        self.transmit_handler = TransmitHandler(target)

        self.transmit_handler.set_origin_name(self._origin_name)

        logger = logging.getLogger()
        logger.addHandler(self.transmit_handler)

        for k in self.slaves.keys():
            self.remove_slave(k)

    def cancel_connection(self):
        if self.transmit_handler != None:
            logger = logging.getLogger()
            logger.removeHandler(self.transmit_handler)
            del self.transmit_handler

    def disable_logging(self):
        self.cancel_connection()

        for s in self.slaves.keys():
            self.remove_slave(s)

        self.unset_recipe()
        logger = logging.getLogger()
        logger.removeHandler(self.display_handler)
        self.display_handler = None

    def _clean_folder(self, path):
        try:
            shutil.rmtree(path)
        except OSError as e:
            if e.errno != 2:
                raise
        os.makedirs(path)

    def _create_file_handler(self, folder_path):
        file_debug = logging.FileHandler(os.path.join(folder_path, 'debug'))
        file_debug.setFormatter(MultilineFormatter())
        file_debug.setLevel(logging.DEBUG)

        file_info = logging.FileHandler(os.path.join(folder_path, 'info'))
        file_info.setFormatter(MultilineFormatter())
        file_info.setLevel(logging.INFO)

        return (file_debug, file_info)

    def get_recipe_log_path(self):
        return self.recipe_log_path

    def set_origin_name(self, name):
        self._origin_name = name
        if self.transmit_handler != None:
            self.transmit_handler.set_origin_name(name)