diff --git a/entropy/__main__.py b/entropy/__main__.py index 29864f1..a8a5634 100644 --- a/entropy/__main__.py +++ b/entropy/__main__.py @@ -19,6 +19,7 @@ import argparse import logging import os import sys +import tempfile import yaml @@ -31,8 +32,7 @@ from entropy import utils LOG = logging.getLogger(__name__) # TODO(praneshp): Only hardcoded stuff in the project. Find a way to move -engine_cfg = os.path.join(os.getcwd(), 'entropy', 'examples', - 'cfg', 'engines.cfg') +engine_cfg = os.path.join(tempfile.gettempdir(), 'engines.cfg') def get_cfg_file(engine, script_type): @@ -100,7 +100,7 @@ def start_engine(args): return cfg_data = dict(utils.load_yaml(args.engine_cfg).next())[args.name] - cfg = {args.name: args.engine_cfg} + cfg = {args.name: os.path.join(os.getcwd(), args.engine_cfg)} with open(engine_cfg, "w") as cfg_file: cfg_file.write(yaml.dump(cfg, canonical=False, default_flow_style=False, @@ -150,12 +150,12 @@ def parse(): args.func(args) -if __name__ == '__main__': - FORMAT = '%(lineno)s %(message)s' - console = logging.StreamHandler() - console.setLevel(logging.DEBUG) - console.setFormatter(FORMAT) - LOG.addHandler(console) - print LOG.handlers -# logging.basicConfig(level=logging.DEBUG) +def main(): + console_format = '%(filename)s %(lineno)s %(message)s' + logging.basicConfig(format=console_format, + level=logging.INFO) parse() + + +if __name__ == '__main__': + main() diff --git a/entropy/audit/base.py b/entropy/audit/base.py index 9400e74..df848d3 100644 --- a/entropy/audit/base.py +++ b/entropy/audit/base.py @@ -16,6 +16,7 @@ import logging from kombu import Queue +from entropy import utils LOG = logging.getLogger(__name__) @@ -24,6 +25,7 @@ class AuditBase(object): __metaclass__ = abc.ABCMeta def __init__(self, **kwargs): + utils.reset_logger(logging.getLogger()) self.name = kwargs['name'] self.exchange = kwargs['exchange'] self.routing_key = kwargs['routing_key'] @@ -31,6 +33,16 @@ class AuditBase(object): self.exchange, self.routing_key) + @staticmethod + def set_logger(logger, **kwargs): + logger.handlers = [] + log_to_file = logging.FileHandler(kwargs['log_file']) + log_to_file.setLevel(logging.DEBUG) + log_format = logging.Formatter(kwargs['log_format']) + log_to_file.setFormatter(log_format) + logger.addHandler(log_to_file) + logger.propagate = False + @abc.abstractmethod def send_message(self, **kwargs): pass diff --git a/entropy/engine.py b/entropy/engine.py index b04f69b..4838759 100644 --- a/entropy/engine.py +++ b/entropy/engine.py @@ -31,6 +31,7 @@ LOG = logging.getLogger(__name__) class Engine(object): def __init__(self, name, **cfg_data): + utils.reset_logger(logging.getLogger()) Engine.set_logger(**cfg_data) # constants # TODO(praneshp): Hardcode for now, could/should be cmdline input @@ -51,15 +52,17 @@ class Engine(object): self.futures = [] LOG.info('Created engine obj %s', self.name) + # TODO(praneshp): Move to utils? @staticmethod def set_logger(**cfg_data): # Set the logger LOG.handlers = [] log_to_file = logging.FileHandler(cfg_data['log_file']) - log_to_file.setLevel(logging.DEBUG) + log_to_file.setLevel(logging.INFO) log_format = logging.Formatter(cfg_data['log_format']) log_to_file.setFormatter(log_format) LOG.addHandler(log_to_file) + LOG.propagate = False def run(self): LOG.info('Starting Scheduler for %s', self.name) diff --git a/entropy/examples/audit/vmbooter.py b/entropy/examples/audit/vmbooter.py index 4cc1d4c..d9e2f50 100644 --- a/entropy/examples/audit/vmbooter.py +++ b/entropy/examples/audit/vmbooter.py @@ -120,12 +120,7 @@ class Audit(AuditBase): 'boot': Audit.remote_call(boot_command, **kwargs)} def send_message(self, **kwargs): - LOG.handlers = [] - log_to_file = logging.FileHandler(kwargs['log_file']) - log_to_file.setLevel(logging.DEBUG) - log_format = logging.Formatter(kwargs['log_format']) - log_to_file.setFormatter(log_format) - LOG.addHandler(log_to_file) + Audit.set_logger(LOG, **kwargs) connection = BrokerConnection('amqp://%(mq_user)s:%(mq_password)s@' '%(mq_host)s:%(mq_port)s//' % kwargs['mq_args']) diff --git a/entropy/examples/repair/vmbooter.py b/entropy/examples/repair/vmbooter.py index 7ef6afd..9f8f1d2 100644 --- a/entropy/examples/repair/vmbooter.py +++ b/entropy/examples/repair/vmbooter.py @@ -83,13 +83,18 @@ def parse_conf(conf): return kwargs -def main(**kwargs): - LOG.handlers = [] +def set_logger(logger, **kwargs): + logger.handlers = [] log_to_file = logging.FileHandler(kwargs['log_file']) log_to_file.setLevel(logging.DEBUG) log_format = logging.Formatter(kwargs['log_format']) log_to_file.setFormatter(log_format) - LOG.addHandler(log_to_file) + logger.addHandler(log_to_file) + logger.propagate = False + + +def main(**kwargs): + set_logger(LOG, **kwargs) LOG.info('starting react script %s' % kwargs['name']) args = parse_conf(kwargs['conf']) recv_message(**args) diff --git a/entropy/utils.py b/entropy/utils.py index 0849737..09e0d31 100644 --- a/entropy/utils.py +++ b/entropy/utils.py @@ -117,3 +117,15 @@ def check_duplicate(name, cfg_file): if name in names: return True return False + + +def reset_logger(log): + if not log: + return + handlers = list(log.handlers) + for h in handlers: + h.flush() + h.close() + log.removeHandler(h) + log.setLevel(logging.NOTSET) + log.addHandler(logging.NullHandler()) diff --git a/setup.cfg b/setup.cfg index cd15256..9577b79 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,8 +23,8 @@ classifier = Programming Language :: Python :: 3.3 [entry_points] -entropy.audit = - test = entropy.audit.audit:Audit +console_scripts = + entropy = entropy.__main__:main [global] setup-hooks =