From bd38d90fd9c3cf7cd5d40ccb217ac4b1d12d494e Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Wed, 31 Jan 2018 12:59:13 +0100 Subject: [PATCH] mgr/dashboard_v2: Refactored logging Signed-off-by: Sebastian Wagner --- src/pybind/mgr/dashboard_v2/__init__.py | 18 ++++++++++++++++++ .../mgr/dashboard_v2/controllers/auth.py | 17 +++++++++++------ src/pybind/mgr/dashboard_v2/module.py | 19 ++++++++++++------- src/pybind/mgr/dashboard_v2/tools.py | 13 ------------- 4 files changed, 41 insertions(+), 26 deletions(-) diff --git a/src/pybind/mgr/dashboard_v2/__init__.py b/src/pybind/mgr/dashboard_v2/__init__.py index 62ecfa0b885..222f22d4b89 100644 --- a/src/pybind/mgr/dashboard_v2/__init__.py +++ b/src/pybind/mgr/dashboard_v2/__init__.py @@ -7,10 +7,28 @@ from __future__ import absolute_import import os if 'UNITTEST' not in os.environ: + + class _LoggerProxy(object): + def __init__(self): + self.logger = None + + def __getattr__(self, item): + if self.logger is None: + raise AttributeError("Logging not initialized") + return getattr(self.logger, item) + + + logger = _LoggerProxy() + # pylint: disable=W0403,W0401 + from .module import * # NOQA else: + import logging import sys # pylint: disable=W0403 from . import ceph_module_mock sys.modules['ceph_module'] = ceph_module_mock + logging.basicConfig(level=logging.WARNING) + logger = logging.getLogger(__name__) + logging.root.handlers[0].setLevel(logging.WARNING) diff --git a/src/pybind/mgr/dashboard_v2/controllers/auth.py b/src/pybind/mgr/dashboard_v2/controllers/auth.py index e239e398969..efa74791962 100644 --- a/src/pybind/mgr/dashboard_v2/controllers/auth.py +++ b/src/pybind/mgr/dashboard_v2/controllers/auth.py @@ -8,6 +8,7 @@ import bcrypt import cherrypy from ..tools import ApiController, RESTController, Session +from .. import logger @ApiController('auth') @@ -37,15 +38,19 @@ class Auth(RESTController): cherrypy.session[Session.USERNAME] = username cherrypy.session[Session.TS] = now cherrypy.session[Session.EXPIRE_AT_BROWSER_CLOSE] = not stay_signed_in - self.logger.debug('Login successful') + logger.debug('Login successful') return {'username': username} cherrypy.response.status = 403 - self.logger.debug('Login failed') + if config_username is None: + logger.warning('No Credentials configured. Need to call `ceph dashboard ' + 'set-login-credentials ` first.') + else: + logger.debug('Login failed') return {'detail': 'Invalid credentials'} def bulk_delete(self): - self.logger.debug('Logout successful') + logger.debug('Logout successful') cherrypy.session[Session.USERNAME] = None cherrypy.session[Session.TS] = None @@ -61,8 +66,8 @@ class Auth(RESTController): def check_auth(): username = cherrypy.session.get(Session.USERNAME) if not username: - Auth.logger.debug('Unauthorized access to {}'.format(cherrypy.url( - relative='server'))) + logger.debug('Unauthorized access to %s', + cherrypy.url(relative='server')) raise cherrypy.HTTPError(401, 'You are not authorized to access ' 'that resource') now = time.time() @@ -73,7 +78,7 @@ class Auth(RESTController): if username_ts and float(username_ts) < (now - expires): cherrypy.session[Session.USERNAME] = None cherrypy.session[Session.TS] = None - Auth.logger.debug('Session expired') + logger.debug('Session expired') raise cherrypy.HTTPError(401, 'Session expired. You are not ' 'authorized to access that resource') diff --git a/src/pybind/mgr/dashboard_v2/module.py b/src/pybind/mgr/dashboard_v2/module.py index 0c574578d39..c1d443b0871 100644 --- a/src/pybind/mgr/dashboard_v2/module.py +++ b/src/pybind/mgr/dashboard_v2/module.py @@ -12,6 +12,7 @@ from mgr_module import MgrModule from .controllers.auth import Auth from .tools import load_controllers, json_error_page, SessionExpireAtBrowserCloseTool +from . import logger # cherrypy likes to sys.exit on error. don't let it take us down too! @@ -39,6 +40,10 @@ class Module(MgrModule): } ] + def __init__(self, *args, **kwargs): + super(Module, self).__init__(*args, **kwargs) + logger.logger = self._logger + def configure_cherrypy(self, in_unittest=False): server_addr = self.get_localized_config('server_addr', '::') server_port = self.get_localized_config('server_port', '8080') @@ -83,14 +88,14 @@ class Module(MgrModule): self.configure_cherrypy() cherrypy.engine.start() - self.log.info('Waiting for engine...') + logger.info('Waiting for engine...') cherrypy.engine.block() - self.log.info('Engine done') + logger.info('Engine done') def shutdown(self): - self.log.info('Stopping server...') + logger.info('Stopping server...') cherrypy.engine.exit() - self.log.info('Stopped server') + logger.info('Stopped server') def handle_command(self, cmd): if cmd['prefix'] == 'dashboard set-login-credentials': @@ -104,10 +109,10 @@ class Module(MgrModule): def __init__(self, mgrmod): self.ctrls = load_controllers(mgrmod) - mgrmod.log.debug('Loaded controllers: {}'.format(self.ctrls)) + logger.debug('Loaded controllers: %s', self.ctrls) for ctrl in self.ctrls: - mgrmod.log.info('Adding controller: {} -> /api/{}' - .format(ctrl.__name__, ctrl._cp_path_)) + logger.info('Adding controller: %s -> /api/%s', ctrl.__name__, + ctrl._cp_path_) ins = ctrl() setattr(Module.ApiRoot, ctrl._cp_path_, ins) diff --git a/src/pybind/mgr/dashboard_v2/tools.py b/src/pybind/mgr/dashboard_v2/tools.py index e7631271db4..6b3a890e6d6 100644 --- a/src/pybind/mgr/dashboard_v2/tools.py +++ b/src/pybind/mgr/dashboard_v2/tools.py @@ -92,13 +92,6 @@ class BaseControllerMeta(type): """ cls._mgr_module = value - @property - def logger(cls): - """ - :return: Returns the logger belonging to the Ceph dashboard module. - """ - return cls.mgr.log - class BaseController(six.with_metaclass(BaseControllerMeta, object)): """ @@ -117,12 +110,6 @@ class BaseController(six.with_metaclass(BaseControllerMeta, object)): """ return self._mgr_module - @property - def logger(self): - """ - :return: Returns the logger belonging to the Ceph dashboard module. - """ - return self.mgr.log class RESTController(BaseController): -- 2.39.5