From e920fd228fc8de3762db624297f926ac794ed4f0 Mon Sep 17 00:00:00 2001 From: Bjarke Madsen <bjarke.madsen@geant.org> Date: Wed, 10 Mar 2021 16:14:33 +0100 Subject: [PATCH] provision aggregate dashboards --- brian_dashboard_manager/grafana/provision.py | 57 ++++++++++++++++++-- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py index 8acabc7..57b85d0 100644 --- a/brian_dashboard_manager/grafana/provision.py +++ b/brian_dashboard_manager/grafana/provision.py @@ -18,11 +18,12 @@ from brian_dashboard_manager.inventory_provider.interfaces import \ from brian_dashboard_manager.templating.nren_access import generate_nrens from brian_dashboard_manager.templating.helpers import is_re_customer, \ - is_cls, is_ias_customer, is_ias_private, is_ias_public, is_ias_upstream, \ - is_lag_backbone, is_nren, is_phy_upstream, is_re_peer, is_gcs, \ - is_geantopen, is_l2circuit, is_lhcone_peer, is_lhcone_customer, is_mdvpn,\ + is_cls_peer, is_cls, is_ias_customer, is_ias_private, is_ias_public, \ + is_ias_upstream, is_ias_peer, is_lag_backbone, is_nren, is_phy_upstream, \ + is_re_peer, is_gcs, is_geantopen, is_l2circuit, is_lhcone_peer, \ + is_lhcone_customer, is_lhcone, is_mdvpn, get_aggregate_dashboard_data, \ get_interface_data, parse_backbone_name, parse_phy_upstream_name, \ - get_dashboard_data + get_dashboard_data, get_aggregate_interface_data from brian_dashboard_manager.templating.render import render_dashboard @@ -61,6 +62,21 @@ def provision_folder(token_request, folder_name, rendered, folder['id']) +def provision_aggregate(token_request, agg_type, aggregate_folder, + dash, excluded_interfaces, datasource_name): + predicate = dash['predicate'] + tag = dash['tag'] + + relevant_interfaces = filter(predicate, excluded_interfaces) + data = get_aggregate_interface_data(relevant_interfaces, agg_type) + + dashboard = get_aggregate_dashboard_data( + f'Aggregate - {agg_type}', data, datasource_name, tag) + + rendered = render_dashboard(dashboard) + create_dashboard(token_request, rendered, aggregate_folder['id']) + + def provision(config): request = AdminRequest(**config) @@ -200,6 +216,39 @@ def provision(config): folder_name, dash, excluded_interfaces, datasource_name) + aggregate_dashboards = { + 'CLS PEERS': { + 'predicate': is_cls_peer, + 'tag': 'cls_peers', + }, + 'IAS PEERS': { + 'predicate': is_ias_peer, + 'tag': 'ias_peers', + }, + 'GWS UPSTREAMS': { + 'predicate': is_ias_upstream, + 'tag': 'gws_upstreams', + }, + 'LHCONE': { + 'predicate': is_lhcone, + 'tag': 'lhcone', + }, + # 'CAE1': { + # 'predicate': is_cae1, + # 'tag': 'cae', + # } + } + + with ProcessPoolExecutor(max_workers=4) as executor: + aggregate_folder = find_folder(token_request, 'Aggregates') + for agg_type, dash in aggregate_dashboards.items(): + logger.info( + f'Provisioning {org["name"]}' + + f'/Aggregate {agg_type} dashboards') + executor.submit(provision_aggregate, token_request, agg_type, + aggregate_folder, dash, + excluded_interfaces, datasource_name) + # NREN Access dashboards # uses a different template than the above. logger.info('Provisioning NREN Access dashboards') -- GitLab