From 2bba2f8323b0aea8e4768576816f4101d86cbdc1 Mon Sep 17 00:00:00 2001 From: Bjarke Madsen <bjarke@nordu.net> Date: Tue, 30 May 2023 12:34:18 +0200 Subject: [PATCH] add retries when creating dashboards on error 500 --- brian_dashboard_manager/grafana/dashboard.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/brian_dashboard_manager/grafana/dashboard.py b/brian_dashboard_manager/grafana/dashboard.py index ccaf83b..f5357b0 100644 --- a/brian_dashboard_manager/grafana/dashboard.py +++ b/brian_dashboard_manager/grafana/dashboard.py @@ -10,6 +10,7 @@ from brian_dashboard_manager.grafana.utils.request import TokenRequest logger = logging.getLogger(__name__) +NUM_RETRIES = 3 def get_dashboard_definitions(dir=None): """ @@ -231,9 +232,17 @@ def create_dashboard(request: TokenRequest, dashboard: dict, folder_id=None): if folder_id: payload['folderId'] = folder_id - try: - r = request.post('api/dashboards/db', json=payload) - return r.json() - except HTTPError: - logger.exception(f'Error when provisioning dashboard {title}') + # retry up to NUM_RETRIES times + for _ in range(NUM_RETRIES): + try: + r = request.post('api/dashboards/db', json=payload) + return r.json() + except HTTPError as e: + message = '' + if e.response is not None and e.response.status_code == 412: + message = e.response.json() + logger.exception(f'Error when provisioning dashboard {title}: {message}') + if e.response is not None and e.response.status_code < 500: + # only retry on server side errors + break return None -- GitLab