diff options
Diffstat (limited to 'src/pybind/mgr/dashboard/controllers/grafana.py')
-rw-r--r-- | src/pybind/mgr/dashboard/controllers/grafana.py | 50 |
1 files changed, 50 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 00000000..001367c7 --- /dev/null +++ b/src/pybind/mgr/dashboard/controllers/grafana.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +from . import (ApiController, BaseController, Endpoint, ReadPermission, + UpdatePermission) +from .. import mgr +from ..exceptions import DashboardException +from ..grafana import GrafanaRestClient, push_local_dashboards +from ..security import Scope +from ..settings import Settings + + +@ApiController('/grafana', Scope.GRAFANA) +class Grafana(BaseController): + @Endpoint() + @ReadPermission + 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 + 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 + def dashboards(self): + response = dict() + try: + response['success'] = push_local_dashboards() + except Exception as e: # pylint: disable=broad-except + raise DashboardException( + msg=str(e), + component='grafana', + http_status_code=500, + ) + return response |