From 12c44eec2625c6173aebfbf4d8d9392cc6282903 Mon Sep 17 00:00:00 2001
From: Bjarke Madsen <bjarke.madsen@geant.org>
Date: Wed, 7 Apr 2021 14:56:09 +0200
Subject: [PATCH] Add interfaces to aggregate target aliases

---
 brian_dashboard_manager/templating/helpers.py | 32 ++++++++-----------
 .../templating/nren_access.py                 |  5 ++-
 2 files changed, 15 insertions(+), 22 deletions(-)

diff --git a/brian_dashboard_manager/templating/helpers.py b/brian_dashboard_manager/templating/helpers.py
index 83c2f4c..d2001f1 100644
--- a/brian_dashboard_manager/templating/helpers.py
+++ b/brian_dashboard_manager/templating/helpers.py
@@ -224,13 +224,17 @@ def get_interface_data(interfaces, name_parse_func=None):
 def get_aggregate_interface_data(interfaces, agg_type):
     result = []
 
+    # Aggregate dashboards have aggregates at the top for all remotes
+    # as well as aggregate panels for specific remotes.
+    # This builds a dict with interfaces for each remote
+    # and one with all interfaces.
     def reduce_func(prev, curr):
         remotes = prev.get(curr['remote'], [])
         remotes.append(curr)
-        all_agg = prev.get('EVERYSINGLEPANEL', [])
+        all_agg = prev.get('EVERYSINGLETARGET', [])
         all_agg.append(curr)
         prev[curr['remote']] = remotes
-        prev['EVERYSINGLEPANEL'] = all_agg
+        prev['EVERYSINGLETARGET'] = all_agg
         return prev
 
     for interface in interfaces:
@@ -241,12 +245,13 @@ def get_aggregate_interface_data(interfaces, agg_type):
 
         remote = description.split(' ')[2].upper()
 
+        location = host.split('.')[1].upper()
         result.append({
             'type': agg_type,
             'interface': interface_name,
             'hostname': host,
             'remote': remote,
-            'alias': f"{host.split('.')[1].upper()} - {remote}",
+            'alias': f"{location} - {remote} ({interface_name})",
         })
     return reduce(reduce_func, result, {})
 
@@ -303,19 +308,10 @@ def get_panel_fields(panel, panel_type, datasource):
     egress = ['Egress Traffic', 'Egress 95th Percentile']
 
     is_v6 = panel_type == 'IPv6'
-    is_multicast = panel_type == 'multicast'
     is_error = panel_type == 'errors'
-    in_field = 'ingressv6' if is_v6 else \
-        'ingressMulticast' if is_multicast else 'ingress'
+    in_field = 'ingressv6' if is_v6 else 'ingress'
 
-    out_field = 'egressv6' if is_v6 else \
-        'egressMulticast' if is_multicast else 'egress'
-
-    if is_multicast:
-        def add_multicast(label):
-            return 'Multicast ' + label
-        ingress = list(map(add_multicast, ingress))
-        egress = list(map(add_multicast, egress))
+    out_field = 'egressv6' if is_v6 else 'egress'
 
     fields = [*product(ingress, [in_field]), *product(egress, [out_field])]
 
@@ -343,8 +339,6 @@ def get_dashboard_data(data, datasource, tag, errors=False):
             if panel.get('has_v6', False):
                 result.append(get_panel_fields(
                     {**panel, **next(gridPos)}, 'IPv6', datasource))
-            # result.append(get_panel_fields(
-            #     {**panel, **next(gridPos)}, 'multicast', datasource))
             if errors:
                 result.append(get_panel_fields(
                     {**panel, **next(gridPos)}, 'errors', datasource))
@@ -417,7 +411,7 @@ def get_aggregate_dashboard_data(title, targets, datasource, tag):
     gridPos = gridPos_generator(id_gen, agg=True)
 
     panels = []
-    all_targets = targets.get('EVERYSINGLEPANEL', [])
+    all_targets = targets.get('EVERYSINGLETARGET', [])
 
     ingress, egress = create_aggregate_panel(
         title, gridPos, all_targets, datasource)
@@ -428,8 +422,8 @@ def get_aggregate_dashboard_data(title, targets, datasource, tag):
         totals_title, gridPos, all_targets, datasource)
     panels.extend([t_in, t_eg])
 
-    if 'EVERYSINGLEPANEL' in targets:
-        del targets['EVERYSINGLEPANEL']
+    if 'EVERYSINGLETARGET' in targets:
+        del targets['EVERYSINGLETARGET']
 
     for target in targets:
         _in, _out = create_aggregate_panel(
diff --git a/brian_dashboard_manager/templating/nren_access.py b/brian_dashboard_manager/templating/nren_access.py
index 66c121d..17bb8eb 100644
--- a/brian_dashboard_manager/templating/nren_access.py
+++ b/brian_dashboard_manager/templating/nren_access.py
@@ -25,11 +25,12 @@ def get_nrens(interfaces):
         router = host.replace('.geant.net', '')
         panel_title = f"{router} - {{}} - {interface_name} - {description}"
 
+        location = host.split('.')[1].upper()
         if is_aggregate_interface(interface):
             nren['AGGREGATES'].append({
                 'interface': interface_name,
                 'hostname': host,
-                'alias': f"{host.split('.')[1].upper()} - {nren_name}"
+                'alias': f"{location} - {nren_name} ({interface_name})"
             })
 
             # link aggregates are also shown
@@ -73,8 +74,6 @@ def get_panel_definitions(panels, datasource, errors=False):
         if panel.get('has_v6', False):
             result.append(get_panel_fields(
                 {**panel, **next(gridPos)}, 'IPv6', datasource))
-        # result.append(get_panel_fields(
-        #     {**panel, **next(gridPos)}, 'multicast', datasource))
         if errors:
             result.append(get_panel_fields(
                 {**panel, **next(gridPos)}, 'errors', datasource))
-- 
GitLab