From 551b809a7c382640e997d9cf543898c951ee4dc0 Mon Sep 17 00:00:00 2001 From: Bjarke Madsen <bjarke.madsen@geant.org> Date: Tue, 23 Mar 2021 16:11:58 +0100 Subject: [PATCH] Add public delete dashboard method --- brian_dashboard_manager/grafana/dashboard.py | 33 +++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/brian_dashboard_manager/grafana/dashboard.py b/brian_dashboard_manager/grafana/dashboard.py index 7763af5..3760314 100644 --- a/brian_dashboard_manager/grafana/dashboard.py +++ b/brian_dashboard_manager/grafana/dashboard.py @@ -24,16 +24,40 @@ def get_dashboard_definitions(dir=None): # pragma: no cover yield dashboard +def delete_dashboard(request: TokenRequest, dashboard, folder_id=None): + try: + r = None + uid = dashboard.get('uid') + if uid: + return _delete_dashboard(request, uid) + elif dashboard.get('title') and folder_id: + dash = _search_dashboard(request, dashboard, folder_id) + if dash is None: + return True + r = request.delete(f'api/dashboards/uid/{dash.get("uid")}') + + logger.info(f'Deleted dashboard: {dashboard.get("title")}') + return r is not None + + except HTTPError: + dump = json.dumps(dashboard, indent=2) + logger.exception( + f'Error when deleting dashboard:\n{dump}') + return None + + # Deletes a single dashboard for the organization # the API token is registered to. def _delete_dashboard(request: TokenRequest, uid: int): try: r = request.delete(f'api/dashboards/uid/{uid}') if r and 'deleted' in r.get('message', ''): - return r - except HTTPError: + return True + except HTTPError as e: + if e.response is not None and e.response.status_code == 404: + return True logger.exception(f'Error when deleting dashboard with UID #{uid}') - return None + return False # Deletes all dashboards for the organization @@ -55,10 +79,9 @@ def find_dashboard(request: TokenRequest, title): return r[0] return None + # Searches Grafana for a dashboard # matching the title of the provided dashboard. - - def _search_dashboard(request: TokenRequest, dashboard: Dict, folder_id=None): try: r = request.get('api/search', params={ -- GitLab