mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-11-03 12:18:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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) |