Files
wlan-lanforge-scripts/py-dashboard/GrafanaRequest.py
Matthew Stidham 5b1c188ac2 Include embedded dashboard in ghost page
Signed-off-by: Matthew Stidham <stidmatt@gmail.com>
2021-06-15 15:56:58 -07:00

120 lines
4.6 KiB
Python

#!/usr/bin/env python3
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Class holds default settings for json requests to Grafana -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
import sys
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit()
import requests
import json
class GrafanaRequest:
def __init__(self,
_grafana_token,
_grafanajson_host,
grafanajson_port=3000,
_folderID=0,
_headers=dict(),
_overwrite='false',
debug_=False,
die_on_error_=False):
self.debug = debug_
self.die_on_error = die_on_error_
self.headers = _headers
self.headers['Authorization'] = 'Bearer ' + _grafana_token
self.headers['Content-Type'] = 'application/json'
self.grafanajson_host = _grafanajson_host
self.grafanajson_port = grafanajson_port
self.grafanajson_token = _grafana_token
self.grafanajson_url = "http://%s:%s" % (_grafanajson_host, grafanajson_port)
self.data = dict()
self.data['overwrite'] = _overwrite
def create_bucket(self,
bucket_name=None):
# Create a bucket in Grafana
if bucket_name is not None:
pass
def list_dashboards(self):
url = self.grafanajson_url + '/api/search'
print(url)
return json.loads(requests.get(url,headers=self.headers).text)
def create_dashboard(self,
dashboard_name=None,
):
grafanajson_url = self.grafanajson_url + "/api/dashboards/db"
datastore = dict()
dashboard = dict()
dashboard['id'] = None
dashboard['title'] = dashboard_name
dashboard['tags'] = ['templated']
dashboard['timezone'] = 'browser'
dashboard['schemaVersion'] = 27
dashboard['version'] = 4
datastore['dashboard'] = dashboard
datastore['overwrite'] = False
data = json.dumps(datastore, indent=4)
return requests.post(grafanajson_url, headers=self.headers, data=data, verify=False)
def delete_dashboard(self,
dashboard_uid=None):
grafanajson_url = self.grafanajson_url + "/api/dashboards/uid/" + dashboard_uid
return requests.post(grafanajson_url, headers=self.headers, verify=False)
def create_dashboard_from_data(self,
json_file=None):
grafanajson_url = self.grafanajson_url + '/api/dashboards/db'
datastore = dict()
dashboard = dict(json.loads(open(json_file).read()))
datastore['dashboard'] = dashboard
datastore['overwrite'] = False
data = json.dumps(datastore, indent=4)
#return print(data)
return requests.post(grafanajson_url, headers=self.headers, data=data, verify=False)
def create_dashboard_from_dict(self,
dictionary=None):
grafanajson_url = self.grafanajson_url + '/api/dashboards/db'
datastore = dict()
dashboard = dict(json.loads(dictionary))
datastore['dashboard'] = dashboard
datastore['overwrite'] = False
data = json.dumps(datastore, indent=4)
#return print(data)
return requests.post(grafanajson_url, headers=self.headers, data=data, verify=False)
def create_custom_dashboard(self,
datastore=None):
data = json.dumps(datastore, indent=4)
return requests.post(self.grafanajson_url, headers=self.headers, data=data, verify=False)
def create_snapshot(self, title):
grafanajson_url = self.grafanajson_url + '/api/snapshots'
data=self.get_dashboard(title)
data['expires'] = 3600
data['external'] = True
print(data)
return requests.post(grafanajson_url, headers=self.headers, json=data, verify=False).text
def list_snapshots(self):
grafanajson_url = self.grafanajson_url + '/api/dashboard/snapshots'
print(grafanajson_url)
return json.loads(requests.get(grafanajson_url, headers=self.headers, verify=False).text)
def get_dashboard(self, target):
dashboards = self.list_dashboards()
for dashboard in dashboards:
if dashboard['title'] == target:
uid = dashboard['uid']
grafanajson_url = self.grafanajson_url + '/api/dashboards/uid/' + uid
print(grafanajson_url)
return json.loads(requests.get(grafanajson_url, headers=self.headers, verify=False).text)