Chi Lo aa15e29fb3 Refactor catching exception at services controller level
Change-Id: I17ba7b9f1142b9bc52e3facc0813cf962ecf87c0
2020-12-10 10:25:45 -08:00

74 lines
2.2 KiB
Python
Executable File

import logging
import wsme
from orm.common.orm_common.utils import api_error_utils as err_utils
from orm.services.region_manager.rms.utils import authentication
from pecan import request, rest
from wsmeext.pecan import wsexpose
logger = logging.getLogger(__name__)
class LogChangeResultWSME(wsme.types.DynamicBase):
"""log change result wsme type."""
result = wsme.wsattr(str, mandatory=True, default=None)
def __init__(self, **kwargs):
""""init method."""
super(LogChangeResult, self).__init__(**kwargs)
class LogChangeResult(object):
"""log change result type."""
def __init__(self, result):
""""init method."""
self.result = result
class LogsController(rest.RestController):
"""Logs Audit controller."""
@wsexpose(LogChangeResultWSME, str, status_code=201,
rest_content_types='json')
def put(self, level):
"""update log level.
:param level: the log level text name
:return:
"""
logger.info("Changing log level to [{}]".format(level))
authentication.authorize(request, 'log:update')
try:
log_level = logging._nameToLevel.get(level.upper())
if log_level is not None:
self._change_log_level(log_level)
result = "Log level changed to {}.".format(level)
logger.info(result)
else:
raise Exception(
"The given log level [{}] doesn't exist.".format(level))
return LogChangeResult(result)
except Exception as exception:
logger.error("Fail to change log_level. Reason: {}".format(
str(exception)))
raise err_utils.get_error(request.transaction_id,
status_code=500,
message=str(exception))
@staticmethod
def _change_log_level(log_level):
path = __name__.split('.')
if len(path) > 0:
root = path[0]
root_logger = logging.getLogger(root)
root_logger.setLevel(log_level)
else:
logger.info("Fail to change log_level to [{}]. "
"the given log level doesn't exist.".format(log_level))