Skip to content
Snippets Groups Projects

add ipv6-only logic for panel creation for NRENs

Merged Sam Roberts requested to merge feature/POL1-648-ipv6-graphs into develop
2 files
+ 45
15
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -231,11 +231,20 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards):
@@ -231,11 +231,20 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards):
# MDVPN type services don't have data in BRIAN
# MDVPN type services don't have data in BRIAN
continue
continue
 
has_v6_interface = False
 
for interface in _interfaces:
 
if 'addresses' in interface:
 
for address in interface['addresses']:
 
if address.find(':') > 0:
 
has_v6_interface = True
 
break
 
dashboard['SERVICES'].append({
dashboard['SERVICES'].append({
'measurement': measurement,
'measurement': measurement,
'title': title,
'title': title,
'scid': scid,
'scid': scid,
'sort': (sid[:2], name)
'sort': (sid[:2], name),
 
'has_v6': has_v6_interface
})
})
def _check_in_aggregate(router, interface):
def _check_in_aggregate(router, interface):
@@ -486,7 +495,7 @@ def get_panel_fields(panel, panel_type, datasource):
@@ -486,7 +495,7 @@ def get_panel_fields(panel, panel_type, datasource):
})
})
def default_interface_panel_generator(gridPos):
def default_interface_panel_generator(gridPos, ipv6_only=False):
"""
"""
Helper for generating panel definitions for dashboards.
Helper for generating panel definitions for dashboards.
@@ -494,6 +503,7 @@ def default_interface_panel_generator(gridPos):
@@ -494,6 +503,7 @@ def default_interface_panel_generator(gridPos):
panel data and panel type.
panel data and panel type.
:param gridPos: generator for grid positions
:param gridPos: generator for grid positions
 
:param ipv6_only: whether to use IPv6 traffic exclusively or not
:return: function that generates panel definitions
:return: function that generates panel definitions
"""
"""
@@ -515,20 +525,29 @@ def default_interface_panel_generator(gridPos):
@@ -515,20 +525,29 @@ def default_interface_panel_generator(gridPos):
result = []
result = []
for panel in panels:
for panel in panels:
result.append(get_panel_fields({
if ipv6_only:
**panel,
if panel.get('has_v6', False):
**next(gridPos)
result.append(get_panel_fields({
}, 'traffic', datasource))
**panel,
if panel.get('has_v6', False):
**next(gridPos)
result.append(get_panel_fields({
}, 'IPv6', datasource))
**panel,
else:
**next(gridPos)
continue
}, 'IPv6', datasource))
else:
if errors:
result.append(get_panel_fields({
result.append(get_panel_fields({
**panel,
**panel,
**next(gridPos)
**next(gridPos)
}, 'errors', datasource))
}, 'traffic', datasource))
 
if panel.get('has_v6', False):
 
result.append(get_panel_fields({
 
**panel,
 
**next(gridPos)
 
}, 'IPv6', datasource))
 
if errors:
 
result.append(get_panel_fields({
 
**panel,
 
**next(gridPos)
 
}, 'errors', datasource))
return result
return result
@@ -567,6 +586,7 @@ def get_nren_dashboard_data_single(data, datasource, tag):
@@ -567,6 +586,7 @@ def get_nren_dashboard_data_single(data, datasource, tag):
agg_panels = []
agg_panels = []
panel_gen = default_interface_panel_generator(gridPos)
panel_gen = default_interface_panel_generator(gridPos)
 
panel_ipv6_gen = default_interface_panel_generator(gridPos, ipv6_only=True)
services_dropdown = create_dropdown_panel('Services', **next(gridPos))
services_dropdown = create_dropdown_panel('Services', **next(gridPos))
@@ -578,6 +598,12 @@ def get_nren_dashboard_data_single(data, datasource, tag):
@@ -578,6 +598,12 @@ def get_nren_dashboard_data_single(data, datasource, tag):
service_panels = panel_gen(
service_panels = panel_gen(
sorted(dash['SERVICES'], key=sort_key), datasource)
sorted(dash['SERVICES'], key=sort_key), datasource)
 
 
services_ipv6_dropdown = create_dropdown_panel('Services - IPv6 Only', **next(gridPos))
 
service_ipv6_panels = panel_ipv6_gen(
 
sorted(dash['SERVICES'], key=sort_key), datasource
 
)
 
iface_dropdown = create_dropdown_panel('Interfaces', **next(gridPos))
iface_dropdown = create_dropdown_panel('Interfaces', **next(gridPos))
phys_panels = panel_gen(dash['PHYSICAL'], datasource, True)
phys_panels = panel_gen(dash['PHYSICAL'], datasource, True)
@@ -590,6 +616,10 @@ def get_nren_dashboard_data_single(data, datasource, tag):
@@ -590,6 +616,10 @@ def get_nren_dashboard_data_single(data, datasource, tag):
'dropdown': services_dropdown,
'dropdown': services_dropdown,
'panels': service_panels,
'panels': service_panels,
},
},
 
{
 
'dropdown': services_ipv6_dropdown,
 
'panels': service_ipv6_panels
 
},
{
{
'dropdown': iface_dropdown,
'dropdown': iface_dropdown,
'panels': phys_panels,
'panels': phys_panels,
@@ -769,7 +799,7 @@ def get_aggregate_dashboard_data(title, remotes, datasource, tag):
@@ -769,7 +799,7 @@ def get_aggregate_dashboard_data(title, remotes, datasource, tag):
ingress and one for egress.
ingress and one for egress.
:param title: title for the dashboard
:param title: title for the dashboard
:param targets: dictionary of targets for the panels, the key is the
:param remotes: dictionary of targets for the panels, the key is the
remote (usually a customer) and the value is a list of targets
remote (usually a customer) and the value is a list of targets
for that remote. A single target represents how to fetch
for that remote. A single target represents how to fetch
data for one interface.
data for one interface.
Loading