diff --git a/brian_dashboard_manager/grafana/folder.py b/brian_dashboard_manager/grafana/folder.py index 64e6ad46b645d9693a3ea0264e8999fc2c1688b4..fb214ddd9b9a3ed6d449ad355df96cddfc2ef784 100644 --- a/brian_dashboard_manager/grafana/folder.py +++ b/brian_dashboard_manager/grafana/folder.py @@ -6,7 +6,7 @@ from brian_dashboard_manager.grafana.utils.request import TokenRequest logger = logging.getLogger(__name__) -def delete_folder(request: TokenRequest, title, uid=None): +def delete_folder(request: TokenRequest, title=None, uid=None): if uid: r = request.delete(f'api/folders/{uid}') return r is not None diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py index 3ca08778d9bda633559755d17d1b5bafe05cbcc1..9acd02bed82a8daacb45e037ab1fc3caff4eafac 100644 --- a/brian_dashboard_manager/grafana/provision.py +++ b/brian_dashboard_manager/grafana/provision.py @@ -22,7 +22,7 @@ from brian_dashboard_manager.grafana.dashboard import find_dashboard, \ from brian_dashboard_manager.grafana.datasource import \ check_provisioned, create_datasource from brian_dashboard_manager.grafana.folder import find_folder, \ - delete_folder + delete_folder, get_folders from brian_dashboard_manager.inventory_provider.interfaces import \ get_gws_direct, get_gws_indirect, get_interfaces @@ -308,6 +308,11 @@ def provision(config): updated = find_dashboard(token_request) or [] updated = reduce(get_uid, updated, {}) + # General is a base folder present in Grafana + folders_to_keep = ['General', 'Aggregates'] + folders_to_keep.extend([dash['folder_name'] + for dash in dashboards.values()]) + def update_dash_list(dashboards): for dashboard in dashboards: if isinstance(dashboard, Future): @@ -451,6 +456,7 @@ def provision(config): # get dashboard UIDs from ignored folders # and make sure we don't touch them for name in ignored_folders: + folders_to_keep.append(name) logger.info( f'Ignoring dashboards under the folder {org["name"]}/{name}') folder = find_folder(token_request, name, create=False) @@ -470,6 +476,13 @@ def provision(config): logger.info(f'Deleting stale dashboard with UID {dash}') delete_dashboard(token_request, {'uid': dash}) + all_folders = get_folders(token_request) + folders_to_keep = set(folders_to_keep) + + for folder in all_folders: + if folder['title'] not in folders_to_keep: + delete_folder(token_request, uid=folder['uid']) + logger.info(f'Time to complete: {time.time() - start}') for org_id, token in tokens: delete_api_token(request, org_id, token)