]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/controllers/grafana.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / pybind / mgr / dashboard / controllers / grafana.py
1 # -*- coding: utf-8 -*-
2 from .. import mgr
3 from ..exceptions import DashboardException
4 from ..grafana import GrafanaRestClient, push_local_dashboards
5 from ..security import Scope
6 from ..settings import Settings
7 from . import APIDoc, APIRouter, BaseController, Endpoint, EndpointDoc, \
8 ReadPermission, UpdatePermission
9
10 URL_SCHEMA = {
11 "instance": (str, "grafana instance")
12 }
13
14
15 @APIRouter('/grafana', Scope.GRAFANA)
16 @APIDoc("Grafana Management API", "Grafana")
17 class Grafana(BaseController):
18 @Endpoint()
19 @ReadPermission
20 @EndpointDoc("List Grafana URL Instance", responses={200: URL_SCHEMA})
21 def url(self):
22 grafana_url = mgr.get_module_option('GRAFANA_API_URL')
23 grafana_frontend_url = mgr.get_module_option('GRAFANA_FRONTEND_API_URL')
24 if grafana_frontend_url != '' and grafana_url == '':
25 url = ''
26 else:
27 url = (mgr.get_module_option('GRAFANA_FRONTEND_API_URL')
28 or mgr.get_module_option('GRAFANA_API_URL')).rstrip('/')
29 response = {'instance': url}
30 return response
31
32 @Endpoint()
33 @ReadPermission
34 def validation(self, params):
35 grafana = GrafanaRestClient()
36 method = 'GET'
37 url = str(Settings.GRAFANA_API_URL).rstrip('/') + \
38 '/api/dashboards/uid/' + params
39 response = grafana.url_validation(method, url)
40 return response
41
42 @Endpoint(method='POST')
43 @UpdatePermission
44 def dashboards(self):
45 response = dict()
46 try:
47 response['success'] = push_local_dashboards()
48 except Exception as e: # pylint: disable=broad-except
49 raise DashboardException(
50 msg=str(e),
51 component='grafana',
52 http_status_code=500,
53 )
54 return response