diff --git a/brian_dashboard_manager/grafana/folder.py b/brian_dashboard_manager/grafana/folder.py index a67945eb30a8d64a323683b7ea39048903d5642b..5343768262c423fe06b36ed4160bc3f5f58447c6 100644 --- a/brian_dashboard_manager/grafana/folder.py +++ b/brian_dashboard_manager/grafana/folder.py @@ -19,13 +19,24 @@ def delete_folder(request: TokenRequest, title=None, uid=None): :return: True if folder is considered deleted, False otherwise """ if uid: - r = request.delete(f'api/folders/{uid}').json() + try: + r = request.delete(f'api/folders/{uid}').json() + except HTTPError: + logger.exception(f'Error when deleting folder: {uid}') + return False return r is not None else: folder = find_folder(request, title, False) + if folder is None: return True - r = request.delete(f'api/folders/{folder.get("uid")}').json() + try: + r = request.delete(f'api/folders/{folder.get("uid")}') + r = r.json() + except HTTPError: + logger.exception(f'Error when deleting folder: {title}') + return False + logger.info(f'Deleted folder: {title}') return r is not None @@ -48,8 +59,10 @@ def find_folder(request: TokenRequest, title, create=True): folder = None if not folder and create: - logger.info(f'Created folder: {title}') folder = create_folder(request, title) + if not folder: + return None + logger.info(f'Created folder: {title}') return folder @@ -61,7 +74,14 @@ def get_folders(request: TokenRequest): :param request: TokenRequest object :return: list of folder definitions """ - return request.get('api/folders').json() + try: + r = request.get('api/folders') + folders = r.json() + except HTTPError: + logger.exception('Error when getting Grafana folders:') + return [] + + return folders def create_folder(request: TokenRequest, title): diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py index 3d71d8722b188566c7535158ee363a4e1d19dc9b..ad1f3c8653b629291c5d9241fa03312c0a752197 100644 --- a/brian_dashboard_manager/grafana/provision.py +++ b/brian_dashboard_manager/grafana/provision.py @@ -478,6 +478,8 @@ def _provision_gws_direct(config, org_config, ds_name, token): delete_folder(token, title=folder_name) else: folder = find_folder(token, folder_name) + if not folder: + logger.error(f'Folder {folder_name} not found') with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: gws_data = get_gws_direct(config['inventory_provider']) provisioned = [] diff --git a/brian_dashboard_manager/services/api.py b/brian_dashboard_manager/services/api.py index fbefac477b8e208250db42e7431ab28efdbb724e..734819db09d28ec8b69890439b764860cf4bb6e9 100644 --- a/brian_dashboard_manager/services/api.py +++ b/brian_dashboard_manager/services/api.py @@ -1,11 +1,18 @@ +import logging import requests +logger = logging.getLogger(__name__) + def fetch_services(host): """ Fetches the current service state from the Reporting Provider host """ - r = requests.get(f'{host}/scid/current') - r.raise_for_status() - services = r.json() + try: + r = requests.get(f'{host}/scid/current') + r.raise_for_status() + services = r.json() + except requests.exceptions.HTTPError: + logger.exception('Error when fetching services:') + services = [] return services