diff options
Diffstat (limited to '')
-rw-r--r-- | src/pybind/mgr/dashboard/controllers/feedback.py | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/controllers/feedback.py b/src/pybind/mgr/dashboard/controllers/feedback.py new file mode 100644 index 000000000..c75ffa94a --- /dev/null +++ b/src/pybind/mgr/dashboard/controllers/feedback.py @@ -0,0 +1,120 @@ +# # -*- coding: utf-8 -*- + +from .. import mgr +from ..exceptions import DashboardException +from ..security import Scope +from . import APIDoc, APIRouter, BaseController, Endpoint, ReadPermission, RESTController, UIRouter +from ._version import APIVersion + + +@APIRouter('/feedback', Scope.CONFIG_OPT) +@APIDoc("Feedback API", "Report") +class FeedbackController(RESTController): + + @RESTController.MethodMap(version=APIVersion.EXPERIMENTAL) + def list(self): + """ + List all issues details. + """ + try: + response = mgr.remote('feedback', 'get_issues') + except RuntimeError as error: + raise DashboardException(msg=f'Error in fetching issue list: {str(error)}', + http_status_code=error.status_code, + component='feedback') + return response + + @RESTController.MethodMap(version=APIVersion.EXPERIMENTAL) + def create(self, project, tracker, subject, description, api_key=None): + """ + Create an issue. + :param project: The affected ceph component. + :param tracker: The tracker type. + :param subject: The title of the issue. + :param description: The description of the issue. + :param api_key: Ceph tracker api key. + """ + try: + response = mgr.remote('feedback', 'validate_and_create_issue', + project, tracker, subject, description, api_key) + except RuntimeError as error: + if "Invalid issue tracker API key" in str(error): + raise DashboardException(msg='Error in creating tracker issue: Invalid API key', + component='feedback') + if "KeyError" in str(error): + raise DashboardException(msg=f'Error in creating tracker issue: {error}', + component='feedback') + raise DashboardException(msg=f'{error}', + http_status_code=500, + component='feedback') + + return response + + +@APIRouter('/feedback/api_key', Scope.CONFIG_OPT) +@APIDoc(group="Report") +class FeedbackApiController(RESTController): + + @RESTController.MethodMap(version=APIVersion.EXPERIMENTAL) + def list(self): + """ + Returns Ceph tracker API key. + """ + try: + api_key = mgr.remote('feedback', 'get_api_key') + except ImportError: + raise DashboardException(msg='Feedback module not found.', + http_status_code=404, + component='feedback') + except RuntimeError as error: + raise DashboardException(msg=f'{error}', + http_status_code=500, + component='feedback') + if api_key is None: + raise DashboardException(msg='Issue tracker API key is not set', + component='feedback') + return api_key + + @RESTController.MethodMap(version=APIVersion.EXPERIMENTAL) + def create(self, api_key): + """ + Sets Ceph tracker API key. + :param api_key: The Ceph tracker API key. + """ + try: + response = mgr.remote('feedback', 'set_api_key', api_key) + except RuntimeError as error: + raise DashboardException(msg=f'{error}', + component='feedback') + return response + + @RESTController.MethodMap(version=APIVersion.EXPERIMENTAL) + def bulk_delete(self): + """ + Deletes Ceph tracker API key. + """ + try: + response = mgr.remote('feedback', 'delete_api_key') + except RuntimeError as error: + raise DashboardException(msg=f'{error}', + http_status_code=500, + component='feedback') + return response + + +@UIRouter('/feedback/api_key', Scope.CONFIG_OPT) +class FeedbackUiController(BaseController): + @Endpoint() + @ReadPermission + def exist(self): + """ + Checks if Ceph tracker API key is stored. + """ + try: + response = mgr.remote('feedback', 'is_api_key_set') + except RuntimeError: + raise DashboardException(msg='Feedback module is not enabled', + http_status_code=404, + component='feedback') + + return response |