diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py index 3dd9481968d2cf434102273c373bc1cb92f1a189..8087026120e9a57352257a8bce0474353fe72493 100644 --- a/brian_dashboard_manager/grafana/provision.py +++ b/brian_dashboard_manager/grafana/provision.py @@ -756,74 +756,78 @@ def provision(config): return None for org in all_orgs: - org_id = org['id'] - - logger.info( - f'--- Provisioning org {org["name"]} (ID #{org_id}) ---') - org_config = _find_org_config(org) - if not org_config: - # message logged from _find_org_config - continue - - token = create_api_token(request, org_id) - token_request = TokenRequest(token=token['key'], **config) - tokens.append((org_id, token['id'])) - logger.debug(tokens) - - all_original_dashboards = list_dashboards(token_request) - all_original_dashboard_uids = { - d['uid'] for d in all_original_dashboards} - - datasource = _provision_datasource(config, token_request) - ds_name = datasource.get('name', 'PollerInfluxDB') - - managed_dashboards = itertools.chain( - _provision_interfaces( - config, org_config, ds_name, token_request), - _provision_gws_indirect( - config, org_config, ds_name, token_request), - _provision_gws_direct( - config, org_config, ds_name, token_request), - _provision_eumetsat_multicast( - config, org_config, ds_name, token_request), - _provision_aggregates( - config, org_config, ds_name, token_request), - _provision_static_dashboards( - config, org_config, ds_name, token_request), - _get_ignored_dashboards( - config, org_config, token_request) - ) + try: + org_id = org['id'] - managed_dashboard_uids = set() - for dashboard in managed_dashboards: - if isinstance(dashboard, Future): - dashboard = dashboard.result() - if dashboard is None: + logger.info( + f'--- Provisioning org {org["name"]} (ID #{org_id}) ---') + org_config = _find_org_config(org) + if not org_config: + # message logged from _find_org_config continue - managed_dashboard_uids.add(dashboard['uid']) - - for uid in all_original_dashboard_uids - managed_dashboard_uids: - # delete unmanaged dashboards - logger.info(f'Deleting stale dashboard with UID {uid}') - delete_dashboard(token_request, {'uid': uid}) - - folders_to_keep = { - # General is a base folder present in Grafana - 'General', - # other folders, created outside of the DASHBOARDS list - 'GWS Indirect', - 'GWS Direct', - 'Aggregates', - 'EUMETSAT Multicast' - } - folders_to_keep.update({dash['folder_name'] - for dash in DASHBOARDS.values()}) - - ignored_folders = config.get('ignored_folders', []) - folders_to_keep.update(ignored_folders) - - delete_unknown_folders(token_request, folders_to_keep) - delete_api_token(request, token['id'], org_id=org_id) + + token = create_api_token(request, org_id) + token_request = TokenRequest(token=token['key'], **config) + tokens.append((org_id, token['id'])) + logger.debug(tokens) + + all_original_dashboards = list_dashboards(token_request) + all_original_dashboard_uids = { + d['uid'] for d in all_original_dashboards} + + datasource = _provision_datasource(config, token_request) + ds_name = datasource.get('name', 'PollerInfluxDB') + + managed_dashboards = itertools.chain( + _provision_interfaces( + config, org_config, ds_name, token_request), + _provision_gws_indirect( + config, org_config, ds_name, token_request), + _provision_gws_direct( + config, org_config, ds_name, token_request), + _provision_eumetsat_multicast( + config, org_config, ds_name, token_request), + _provision_aggregates( + config, org_config, ds_name, token_request), + _provision_static_dashboards( + config, org_config, ds_name, token_request), + _get_ignored_dashboards( + config, org_config, token_request) + ) + + managed_dashboard_uids = set() + for dashboard in managed_dashboards: + if isinstance(dashboard, Future): + dashboard = dashboard.result() + if dashboard is None: + continue + managed_dashboard_uids.add(dashboard['uid']) + + for uid in all_original_dashboard_uids - managed_dashboard_uids: + # delete unmanaged dashboards + logger.info(f'Deleting stale dashboard with UID {uid}') + delete_dashboard(token_request, {'uid': uid}) + + folders_to_keep = { + # General is a base folder present in Grafana + 'General', + # other folders, created outside of the DASHBOARDS list + 'GWS Indirect', + 'GWS Direct', + 'Aggregates', + 'EUMETSAT Multicast' + } + folders_to_keep.update({dash['folder_name'] + for dash in DASHBOARDS.values()}) + + ignored_folders = config.get('ignored_folders', []) + folders_to_keep.update(ignored_folders) + + delete_unknown_folders(token_request, folders_to_keep) + delete_api_token(request, token['id'], org_id=org_id) + except Exception: + logger.exception(f'Error when provisioning org {org["name"]}') + break logger.info(f'Time to complete: {time.time() - start}')