diff options
Diffstat (limited to 'src/pybind/mgr/dashboard/controllers/grafana.py')
-rw-r--r-- | src/pybind/mgr/dashboard/controllers/grafana.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/controllers/grafana.py b/src/pybind/mgr/dashboard/controllers/grafana.py new file mode 100644 index 000000000..79a680671 --- /dev/null +++ b/src/pybind/mgr/dashboard/controllers/grafana.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from .. import mgr +from ..grafana import GrafanaRestClient, push_local_dashboards +from ..security import Scope +from ..services.exception import handle_error +from ..settings import Settings +from . import APIDoc, APIRouter, BaseController, Endpoint, EndpointDoc, \ + ReadPermission, UpdatePermission + +URL_SCHEMA = { + "instance": (str, "grafana instance") +} + + +@APIRouter('/grafana', Scope.GRAFANA) +@APIDoc("Grafana Management API", "Grafana") +class Grafana(BaseController): + @Endpoint() + @ReadPermission + @EndpointDoc("List Grafana URL Instance", responses={200: URL_SCHEMA}) + def url(self): + grafana_url = mgr.get_module_option('GRAFANA_API_URL') + grafana_frontend_url = mgr.get_module_option('GRAFANA_FRONTEND_API_URL') + if grafana_frontend_url != '' and grafana_url == '': + url = '' + else: + url = (mgr.get_module_option('GRAFANA_FRONTEND_API_URL') + or mgr.get_module_option('GRAFANA_API_URL')).rstrip('/') + response = {'instance': url} + return response + + @Endpoint() + @ReadPermission + @handle_error('grafana') + def validation(self, params): + grafana = GrafanaRestClient() + method = 'GET' + url = str(Settings.GRAFANA_API_URL).rstrip('/') + \ + '/api/dashboards/uid/' + params + response = grafana.url_validation(method, url) + return response + + @Endpoint(method='POST') + @UpdatePermission + @handle_error('grafana', 500) + def dashboards(self): + response = dict() + response['success'] = push_local_dashboards() + return response |