def test_init(self):
        config = Config()
        # dir should not exist
        config.logfile = '/asdfasd/cxvasvcsd/cvsadfvsafv/kjhgjhg.log'

        # no crash
        LoggingHelper.init(config)
    def test_set_explicit_module_loglevels_success(self):
        config = Config()

        logname_1 = 'app.logger_name_1'
        loglevel_1 = 'error'
        logcomp_1 = LoggingHelper.get_loglevel(loglevel_1)
        logname_2 = 'xxx.dfgdg.logger_name_1'
        loglevel_2 = 'warn'
        logcomp_2 = LoggingHelper.get_loglevel(loglevel_2)

        ConfigLoader.add_to_rule_config(
            config.rule_config, Constants.LOGGING,
            '{}|{}'.format(Constants.LOGLEVEL, logname_1), loglevel_1)
        ConfigLoader.add_to_rule_config(
            config.rule_config, Constants.LOGGING,
            '{}|{}'.format(Constants.LOGLEVEL, logname_2), loglevel_2)
        ConfigLoader.add_to_rule_config(
            config.rule_config, Constants.LOGGING,
            '{}|{}'.format(Constants.LOGLEVEL, logname_1), loglevel_1)

        LoggingHelper.set_explicit_module_loglevels(config)

        logger = logging.getLogger(logname_1)
        loglevel_out = logger.getEffectiveLevel()
        self.assertEqual(logcomp_1, loglevel_out)

        logger = logging.getLogger(logname_2)
        loglevel_out = logger.getEffectiveLevel()
        self.assertEqual(logcomp_2, loglevel_out)
Esempio n. 3
0
    def init(self):
        try:
            self._config = ConfigLoader.parse_cli()
            if self._config.exit_code is not None:
                return self._print_and_return(self._config.exit_code)
            ConfigLoader.update_config_from_file(self._config,
                                                 init_app_do_not_raise=True)
            if self._config.exit_code is not None:
                return self._print_and_return(self._config.exit_code)

            self._config.exit_code = LoggingHelper.init(self._config)
            if self._config.exit_code is not None:
                return self._print_and_return(self._config.exit_code)

            LoggingHelper.set_explicit_module_loglevels(self._config)

            TypePersister.set_storage_path(self._config.persist_dir)

            self._rule_manager = RuleManager(self._config)

            self._init_locale(self._config.locale)

            return None

        except Exception as ex:
            print('error: {}'.format(ex))
            print(traceback.format_exc())
            return 1
Esempio n. 4
0
    def daemonize(self):
        """
        Do the UNIX double-fork magic, see Stevens' "Advanced
        Programming in the UNIX Environment" for details (ISBN 0201563177)
        http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
        """
        try:
            pid = os.fork()
            if pid > 0:
                # Exit first parent
                self._do_exit(0)
            else:
                self.is_deamon = True
        except OSError as ex:
            _logger.error('fork #1 failed: %s (%s)', ex.errno, ex.strerror)
            self._do_exit(1)

        LoggingHelper.remove_logger_console_output()

        # Decouple from parent environment
        os.chdir(self.workdir)
        os.setsid()
        os.umask(self.umask)

        # Do second fork
        try:
            pid = os.fork()
            if pid > 0:
                # Exit from second parent
                self._do_exit(0)
            else:
                self.is_deamon = True
        except OSError as ex:
            _logger.error('fork #2 failed: %s (%s)', ex.errno, ex.strerror)
            self._do_exit(1)

        # noinspection PyUnusedLocal
        def sigtermhandler(signum, frame):
            self.daemon_alive = False
            _logger.info('sigtermhandler(%s)', signum)
            self.shutdown()
            self._do_exit(signum)

        signal.signal(signal.SIGTERM, sigtermhandler)
        signal.signal(signal.SIGINT, sigtermhandler)

        self.write_pidfile()
    def test_get_logname(self):
        path = self.__module__
        name = self.__class__.__name__
        full_path = "{}.{}".format(path, name)

        ln = LoggingHelper.get_logname(self, "Xtra")
        self.assertEqual(ln, full_path + "(xtra)")

        ln = LoggingHelper.get_logname(self, name)
        self.assertEqual(ln, full_path)

        ln = LoggingHelper.get_logname(self, name.upper())
        self.assertEqual(ln, full_path)

        ln = LoggingHelper.get_logname(self, full_path)
        self.assertEqual(ln, full_path)

        ln = LoggingHelper.get_logname(self, full_path.upper())
        self.assertEqual(ln, full_path)
    def test_get_loglevel(self):
        loglevel_default = LoggingHelper.LOGLEVEL_DEFAULT

        self.assertEqual(loglevel_default, LoggingHelper.get_loglevel(None))
        self.assertEqual(loglevel_default, LoggingHelper.get_loglevel(''))

        self.assertEqual(logging.DEBUG, LoggingHelper.get_loglevel('debug'))

        self.assertEqual(logging.WARN, LoggingHelper.get_loglevel('WARN'))
        self.assertEqual(logging.WARN, LoggingHelper.get_loglevel(' warNing'))

        self.assertEqual(logging.ERROR, LoggingHelper.get_loglevel(' error'))
        self.assertEqual(logging.ERROR, LoggingHelper.get_loglevel(' ERR '))
        self.assertEqual(logging.CRITICAL,
                         LoggingHelper.get_loglevel(' critial'))
        self.assertEqual(logging.CRITICAL,
                         LoggingHelper.get_loglevel(' crit '))
        self.assertEqual(logging.CRITICAL,
                         LoggingHelper.get_loglevel(' FATAL '))
Esempio n. 7
0
    def run(self):
        logger = logging.getLogger(__name__)
        LoggingHelper.disable_other_loggers()

        try:
            if self._exit_code is not None:
                return self._exit_code
            if not self._config or not self._rule_manager:
                return 1

            if self._register_rules_from_config:
                if self._config.parsed.start or self._config.parsed.toogle or \
                        self._config.parsed.foreground or self._config.parsed.ensure:
                    self._register_rules_from_config_delayed()

            if self._config.parsed.stop:
                logger.debug('run(stop)')
                self._rule_manager.stop()
            elif self._config.parsed.start:
                logger.debug('run(start)')
                self._rule_manager.start()
            elif self._config.parsed.toogle:
                logger.debug('run(toggle)')
                self._rule_manager.toogle()
            elif self._config.parsed.status:
                logger.debug('run(status)')
                self._rule_manager.status()
            elif self._config.parsed.foreground:
                logger.debug('run(foreground)')
                self._rule_manager.start_foreground()
            elif self._config.parsed.ensure:
                logger.debug('run(ensure)')
                self._rule_manager.ensure_started()
            elif self._config.parsed.print_channels:
                logger.debug('run(print channels)')
                self._rule_manager.print_channels()

            return 0
        except Exception as ex:
            print('error: {}'.format(ex))
            print(traceback.format_exc())
            return 1
    def test_set_explicit_module_loglevels_nocrash(self):
        config = Config()

        ConfigLoader.add_to_rule_config(config.rule_config, Constants.LOGGING,
                                        '{}||abc'.format(Constants.LOGLEVEL),
                                        'warn')
        ConfigLoader.add_to_rule_config(config.rule_config, Constants.LOGGING,
                                        '{}|abc'.format(Constants.LOGLEVEL),
                                        'warn')
        ConfigLoader.add_to_rule_config(config.rule_config, Constants.LOGGING,
                                        'dfasfdsafd', 'warn')

        LoggingHelper.set_explicit_module_loglevels(config)

        LoggingHelper.set_explicit_module_loglevels(None)
        LoggingHelper.set_explicit_module_loglevels({})
Esempio n. 9
0
 def _get_logger(self):
     if self._logger is None:
         log_name = LoggingHelper.get_logname(self, self._instance_name)
         self._logger = logging.getLogger(log_name)
     return self._logger
Esempio n. 10
0
 def test_disable_other_loggers(self):
     # no crash
     LoggingHelper.disable_other_loggers()
     LoggingHelper.disable_other_loggers()
Esempio n. 11
0
 def test_remove_logger_console_output(self):
     LoggingHelper.remove_logger_console_output()
Esempio n. 12
0
 def _do_exit(self, exit_code):
     LoggingHelper.disable_output()
     # _logger.debug('_do_exit - {}'.format(exit_code))
     sys.exit(exit_code)