diff --git a/py-dashboard/GrafanaRequest.py b/py-dashboard/GrafanaRequest.py index f8ef4b96..fa000224 100644 --- a/py-dashboard/GrafanaRequest.py +++ b/py-dashboard/GrafanaRequest.py @@ -47,10 +47,18 @@ class GrafanaRequest: dashboard_name=None, ): self.grafanajson_url = self.grafanajson_url + "/api/dashboards/db" - - data = ( - '{ "dashboard": { "id": null, "title": "%s" , "tags": [ "templated" ], "timezone": "browser", "schemaVersion": 6, "version": 0 }, "overwrite": false }' % dashboard_name) - return requests.get(self.grafanajson_url, headers=self.headers, data=data, verify=False) + datastore = dict() + dashboard = dict() + dashboard['id'] = None + dashboard['title'] = dashboard_name + dashboard['tags'] = ['templated'] + dashboard['timezone'] = 'browser' + dashboard['shemaVersion'] = 6 + dashboard['version'] = 0 + datastore['dashboard'] = dashboard + datastore['overwrite'] = False + data = json.dumps(datastore, indent=4) + return requests.post(self.grafanajson_url, headers=self.headers, data=data, verify=False) def delete_dashboard(self, dashboard_uid=None): diff --git a/py-scripts/grafana_profile.py b/py-scripts/grafana_profile.py old mode 100644 new mode 100755 index e69de29b..423c55a6 --- a/py-scripts/grafana_profile.py +++ b/py-scripts/grafana_profile.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 + +import sys +import os +import argparse + +if sys.version_info[0] != 3: + print("This script requires Python 3") + exit(1) + +if 'py-json' not in sys.path: + sys.path.append(os.path.join(os.path.abspath('..'), 'py-json')) + sys.path.append(os.path.join(os.path.abspath('..'), 'py-dashboard')) + +from GrafanaRequest import GrafanaRequest +from LANforge.lfcli_base import LFCliBase + + +class UseGrafana(LFCliBase): + def __init__(self, + _grafana_token, + host="localhost", + _grafana_host="localhost", + port=8080, + _debug_on=False, + _exit_on_fail=False, + _grafana_port=3000): + super().__init__(host, port, _debug=_debug_on, _exit_on_fail=_exit_on_fail) + self.grafana_token = _grafana_token + self.grafana_port = _grafana_port + self.grafana_host = _grafana_host + self.GR = GrafanaRequest(self.grafana_host, str(self.grafana_port), _folderID=0, _api_token=self.grafana_token) + + def create_dashboard(self, + dashboard_name): + return self.GR.create_dashboard(dashboard_name) + + def delete_dashboard(self, + dashboard_uid): + return self.GR.delete_dashboard(dashboard_uid) + + def list_dashboards(self): + return self.GR.list_dashboards() + + +def main(): + parser = LFCliBase.create_basic_argparse( + prog='grafana_profile.py', + formatter_class=argparse.RawTextHelpFormatter, + epilog='''Manage Grafana database''', + description='''\ + grafana_profile.py + ------------------ + Command example: + ./grafana_profile.py + --grafana_token + --''') + required = parser.add_argument_group('required arguments') + required.add_argument('--grafana_token', help='token to access your Grafana database', required=True) + + optional = parser.add_argument_group('optional arguments') + optional.add_argument('--dashboard_name', help='name of dashboard to create', default=None) + optional.add_argument('--dashboard_uid', help='UID of dashboard to modify', default=None) + optional.add_argument('--delete_dashboard', + help='Call this flag to delete the dashboard defined by UID', + default=None) + optional.add_argument('--grafana_port', help='Grafana port if different from 3000', default=3000) + optional.add_argument('--grafana_host', help='Grafana host', default='localhost') + optional.add_argument('--list_dashboards', help='List dashboards on Grafana server', default=None) + args = parser.parse_args() + + Grafana = UseGrafana(args.grafana_token, + args.grafana_port, + args.grafana_host + ) + if args.dashboard_name is not None: + Grafana.create_dashboard(args.dashboard_name) + + if args.delete_dashboard is not None: + Grafana.delete_dashboard(args.dashboard_uid) + + if args.list_dashboards is not None: + Grafana.list_dashboards() + + +if __name__ == "__main__": + main()