From cfffc49b41980e67cd799bf469baac7615574680 Mon Sep 17 00:00:00 2001
From: Bjarke Madsen <bjarke.madsen@geant.org>
Date: Mon, 22 Aug 2022 16:20:48 +0200
Subject: [PATCH] Update method for excluding dashboards under NREN Access

---
 brian_dashboard_manager/grafana/provision.py  | 19 +++++++++----------
 brian_dashboard_manager/templating/helpers.py |  4 +++-
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py
index a51b639..77544ab 100644
--- a/brian_dashboard_manager/grafana/provision.py
+++ b/brian_dashboard_manager/grafana/provision.py
@@ -176,8 +176,10 @@ def provision_folder(token_request, folder_name, dash,
     Function to provision dashboards within a folder.
     """
 
-    # def _check_valid(interface):
-    #     return interface['dashboard_info']['name'] != ''
+    if not isinstance(excluded_dashboards, (list, set)):
+        excluded_dashboards = set()
+    else:
+        excluded_dashboards = set([s.lower() for s in excluded_dashboards])
 
     folder = find_folder(token_request, folder_name)
     tag = dash['tag']
@@ -194,7 +196,8 @@ def provision_folder(token_request, folder_name, dash,
     is_nren = folder_name == 'NREN Access'
     if is_nren:
         services = fetch_services(config['reporting_provider'])
-        data = get_nren_interface_data(services, interfaces)
+        data = get_nren_interface_data(
+            services, interfaces, excluded_dashboards)
         dash_data = get_nren_dashboard_data(data, ds_name, tag)
     else:
         data = get_interface_data(interfaces)
@@ -204,11 +207,6 @@ def provision_folder(token_request, folder_name, dash,
             tag=tag,
             errors=errors)
 
-    if not isinstance(excluded_dashboards, list):
-        excluded_dashboards = []
-    else:
-        excluded_dashboards = [s.lower() for s in excluded_dashboards]
-
     provisioned = []
 
     with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
@@ -273,6 +271,9 @@ def is_excluded_folder(org_config, folder_name):
 def excluded_folder_dashboards(org_config, folder_name):
     excluded_folders = org_config.get('excluded_folders', {})
     excluded = excluded_folders.get(folder_name, [])
+    if folder_name == 'NREN Access':
+        excluded_nrens = org_config.get('excluded_nrens', [])
+        excluded = list(set(excluded).union(set(excluded_nrens)))
     return excluded if isinstance(excluded, list) else []
 
 
@@ -631,8 +632,6 @@ def provision(config):
         ds_name = datasource.get('name', 'PollerInfluxDB')
 
         managed_dashboards = itertools.chain(
-            # _provision_service_dashboards(
-            #     config, org_config, ds_name, token_request),
             _provision_interfaces(
                 config, org_config, ds_name, token_request),
             _provision_gws_indirect(
diff --git a/brian_dashboard_manager/templating/helpers.py b/brian_dashboard_manager/templating/helpers.py
index ca9323c..4dba5af 100644
--- a/brian_dashboard_manager/templating/helpers.py
+++ b/brian_dashboard_manager/templating/helpers.py
@@ -64,7 +64,7 @@ def letter_generator():
         yield result
 
 
-def get_nren_interface_data(services, interfaces):
+def get_nren_interface_data(services, interfaces, excluded_dashboards):
     """
     Helper for grouping interfaces into groups of NRENs
     Extracts information from interfaces to be used in panels.
@@ -78,6 +78,8 @@ def get_nren_interface_data(services, interfaces):
     for service in services:
         _customers = service.get('customers')
         for cust in _customers:
+            if cust.lower() in excluded_dashboards:
+                continue
             customers[cust].append(service)
 
     for customer, services in customers.items():
-- 
GitLab