Skip to content
Snippets Groups Projects
Commit 96fbde6b authored by Sam Roberts's avatar Sam Roberts
Browse files

Merge branch 'feature/POL1-648-ipv6-graphs' into 'develop'

add ipv6-only logic for panel creation for NRENs

See merge request !2
parents bf0bf54d 20f0231d
Branches
Tags
1 merge request!2add ipv6-only logic for panel creation for NRENs
......@@ -231,11 +231,20 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards):
# MDVPN type services don't have data in BRIAN
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({
'measurement': measurement,
'title': title,
'scid': scid,
'sort': (sid[:2], name)
'sort': (sid[:2], name),
'has_v6': has_v6_interface
})
def _check_in_aggregate(router, interface):
......@@ -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.
......@@ -494,6 +503,7 @@ def default_interface_panel_generator(gridPos):
panel data and panel type.
:param gridPos: generator for grid positions
:param ipv6_only: whether to use IPv6 traffic exclusively or not
:return: function that generates panel definitions
"""
......@@ -515,20 +525,29 @@ def default_interface_panel_generator(gridPos):
result = []
for panel in panels:
result.append(get_panel_fields({
**panel,
**next(gridPos)
}, 'traffic', datasource))
if panel.get('has_v6', False):
result.append(get_panel_fields({
**panel,
**next(gridPos)
}, 'IPv6', datasource))
if errors:
if ipv6_only:
if panel.get('has_v6', False):
result.append(get_panel_fields({
**panel,
**next(gridPos)
}, 'IPv6', datasource))
else:
continue
else:
result.append(get_panel_fields({
**panel,
**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
......@@ -567,6 +586,7 @@ def get_nren_dashboard_data_single(data, datasource, tag):
agg_panels = []
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))
......@@ -578,6 +598,12 @@ def get_nren_dashboard_data_single(data, datasource, tag):
service_panels = panel_gen(
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))
phys_panels = panel_gen(dash['PHYSICAL'], datasource, True)
......@@ -590,6 +616,10 @@ def get_nren_dashboard_data_single(data, datasource, tag):
'dropdown': services_dropdown,
'panels': service_panels,
},
{
'dropdown': services_ipv6_dropdown,
'panels': service_ipv6_panels
},
{
'dropdown': iface_dropdown,
'panels': phys_panels,
......@@ -769,7 +799,7 @@ def get_aggregate_dashboard_data(title, remotes, datasource, tag):
ingress and one for egress.
: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
for that remote. A single target represents how to fetch
data for one interface.
......
[tox]
envlist = py36
envlist = py38, py311
[flake8]
exclude = venv,.tox
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment