]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pybind/mgr/dashboard/services/exception.py
import 15.2.0 Octopus source
[ceph.git] / ceph / src / pybind / mgr / dashboard / services / exception.py
index b5c0bd58a17f45a2c4875113e26e658337082bb3..26b6ee4b19dd89fa31ce50e1f62258574374ce9a 100644 (file)
@@ -2,24 +2,30 @@
 from __future__ import absolute_import
 
 import json
-import sys
 from contextlib import contextmanager
+import logging
+import six
 
 import cherrypy
 
+from orchestrator import OrchestratorError
 import rbd
 import rados
 
-from .. import logger
 from ..services.ceph_service import SendCommandError
 from ..exceptions import ViewCacheNoDataException, DashboardException
 from ..tools import wraps
 
-if sys.version_info < (3, 0):
+
+logger = logging.getLogger('exception')
+
+
+if six.PY2:
     # Monkey-patch a __call__ method into @contextmanager to make
     # it compatible to Python 3
 
-    from contextlib import GeneratorContextManager  # pylint: disable=no-name-in-module
+    # pylint: disable=no-name-in-module,ungrouped-imports
+    from contextlib import GeneratorContextManager
 
     def init(self, *args):
         if len(args) == 1:
@@ -50,7 +56,7 @@ if sys.version_info < (3, 0):
     GeneratorContextManager.__call__ = call
 
     # pylint: disable=function-redefined
-    def contextmanager(func):
+    def contextmanager(func):  # noqa: F811
 
         @wraps(func)
         def helper(*args, **kwds):
@@ -78,7 +84,7 @@ def serialize_dashboard_exception(e, include_http_status=False, task=None):
     if include_http_status:
         out['status'] = getattr(e, 'status', 500)
     if task:
-        out['task'] = dict(name=task.name, metadata=task.metadata)
+        out['task'] = dict(name=task.name, metadata=task.metadata)  # type: ignore
     return out
 
 
@@ -88,7 +94,7 @@ def dashboard_exception_handler(handler, *args, **kwargs):
             return handler(*args, **kwargs)
     # Don't catch cherrypy.* Exceptions.
     except (ViewCacheNoDataException, DashboardException) as e:
-        logger.exception('dashboard_exception_handler')
+        logger.exception('Dashboard Exception')
         cherrypy.response.headers['Content-Type'] = 'application/json'
         cherrypy.response.status = getattr(e, 'status', 400)
         return json.dumps(serialize_dashboard_exception(e)).encode('utf-8')
@@ -120,3 +126,11 @@ def handle_send_command_error(component):
         yield
     except SendCommandError as e:
         raise DashboardException(e, component=component)
+
+
+@contextmanager
+def handle_orchestrator_error(component):
+    try:
+        yield
+    except OrchestratorError as e:
+        raise DashboardException(e, component=component)