Skip to content
Snippets Groups Projects
Commit 4552ba19 authored by Bjarke Madsen's avatar Bjarke Madsen
Browse files

Add service-based NREN Access BETA folder

parent 056a05d2
No related branches found
No related tags found
No related merge requests found
......@@ -32,7 +32,8 @@ from brian_dashboard_manager.inventory_provider.interfaces import \
from brian_dashboard_manager.templating.helpers import \
get_aggregate_dashboard_data, get_interface_data, \
get_nren_interface_data, get_dashboard_data, \
get_nren_dashboard_data, get_aggregate_interface_data
get_nren_dashboard_data, get_aggregate_interface_data, \
get_nren_interface_data_old
from brian_dashboard_manager.templating.gws import generate_gws, \
generate_indirect
......@@ -45,6 +46,11 @@ logger = logging.getLogger(__name__)
MAX_WORKERS = 4
DASHBOARDS = {
'NRENBETA': {
'tag': ['customersbeta'],
'folder_name': 'NREN Access BETA',
'interfaces': []
},
'NREN': {
'tag': ['customers'],
'folder_name': 'NREN Access',
......@@ -189,7 +195,11 @@ def provision_folder(token_request, folder_name, dash,
errors = dash.get('errors', False)
is_nren = folder_name == 'NREN Access'
is_nren_beta = folder_name == 'NREN Access BETA'
if is_nren:
data = get_nren_interface_data_old(interfaces)
dash_data = get_nren_dashboard_data(data, ds_name, tag)
elif is_nren_beta:
services = fetch_services(config['reporting_provider'])
data = get_nren_interface_data(
services, interfaces, excluded_dashboards)
......@@ -206,7 +216,8 @@ def provision_folder(token_request, folder_name, dash,
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
for dashboard in dash_data:
rendered = render_dashboard(dashboard, nren=is_nren)
rendered = render_dashboard(
dashboard, nren=is_nren or is_nren_beta)
if rendered.get('title').lower() in excluded_dashboards:
executor.submit(delete_dashboard, token_request,
rendered, folder['id'])
......@@ -266,7 +277,7 @@ 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':
if 'NREN Access' in folder_name:
excluded_nrens = org_config.get('excluded_nrens', [])
excluded = list(set(excluded).union(set(excluded_nrens)))
return excluded if isinstance(excluded, list) else []
......@@ -322,6 +333,12 @@ def _provision_interfaces(config, org_config, ds_name, token):
ifaces = DASHBOARDS[dash_name]['interfaces']
ifaces.append(iface)
# TODO: remove all references to NRENBETA
# when NREN service BETA is over (homedashboard/helpers)
if dash_name == 'NREN':
ifaces = DASHBOARDS['NRENBETA']['interfaces']
ifaces.append(iface)
# add to matched aggregate dashboard
if dash_name in AGG_DASHBOARDS:
ifaces = AGG_DASHBOARDS[dash_name]['interfaces']
......
......@@ -67,6 +67,69 @@ def letter_generator():
yield result
def get_nren_interface_data_old(interfaces):
"""
Helper for grouping interfaces into groups of NRENs
Extracts information from interfaces to be used in panels.
NREN dashboards have aggregate panels at the top and
dropdowns for services / physical interfaces.
"""
result = {}
for interface in interfaces:
description = interface['description'].strip()
interface_name = interface['name']
host = interface['router']
router = host.replace('.geant.net', '')
location = host.split('.')[1].upper()
panel_title = f"{router} - {{}} - {interface_name} - {description}"
dashboards_info = interface['dashboards_info']
for info in dashboards_info:
dashboard_name = info['name']
dashboard = result.get(dashboard_name, {
'AGGREGATES': [],
'SERVICES': [],
'PHYSICAL': []
})
if info['interface_type'] == 'AGGREGATE':
dashboard['AGGREGATES'].append({
'interface': interface_name,
'hostname': host,
'alias':
f"{location} - {dashboard_name} ({interface_name})"
})
# link aggregates are also shown
# under the physical dropdown
dashboard['PHYSICAL'].append({
'title': panel_title,
'hostname': host,
'interface': interface_name
})
elif info['interface_type'] == 'LOGICAL':
dashboard['SERVICES'].append({
'title': panel_title,
'hostname': host,
'interface': interface_name
})
elif info['interface_type'] == 'PHYSICAL':
dashboard['PHYSICAL'].append({
'title': panel_title,
'hostname': host,
'interface': interface_name
})
result[dashboard_name] = dashboard
return result
def get_nren_interface_data(services, interfaces, excluded_dashboards):
"""
Helper for grouping interfaces into groups of NRENs
......
......@@ -49,6 +49,16 @@
"title": "NREN Access",
"type": "dashboards"
},
{
"asDropdown": true,
"icon": "external link",
"tags": [
"customersbeta"
],
"targetBlank": true,
"title": "NREN Access BETA",
"type": "dashboards"
},
{
"asDropdown": true,
"icon": "external link",
......
......@@ -659,19 +659,42 @@ def test_provision_folder(data_config, mocker):
None, 'NREN Access', dashboards['NREN'],
data_config, 'testdatasource', excluded_dashboards)
assert len(nren_result) == 6
assert nren_result[0]['title'] == 'ASNET-AM'
assert nren_result[1]['title'] == 'LITNET'
assert nren_result[2]['title'] == 'CESNET'
assert len(nren_result) == 3
assert nren_result[0]['title'] == 'GEANT'
assert nren_result[1]['title'] == 'KIAE'
assert nren_result[2]['title'] == 'SWITCH'
excluded_dashboards = ['ASNET-AM', 'GEANT']
excluded_dashboards = ['KIAE', 'GEANT']
nren_excluded = provision_folder(
None, 'NREN Access', dashboards['NREN'],
data_config, 'testdatasource', excluded_dashboards)
assert len(nren_excluded) == 4
assert nren_excluded[0]['title'] == 'LITNET'
assert nren_excluded[1]['title'] == 'CESNET'
assert len(nren_excluded) == 1
assert nren_excluded[0]['title'] == 'SWITCH'
excluded_dashboards = []
nren_result_beta = provision_folder(
None, 'NREN Access BETA', dashboards['NREN'],
data_config, 'testdatasource', excluded_dashboards)
assert len(nren_result_beta) == 6
assert nren_result_beta[0]['title'] == 'ASNET-AM'
assert nren_result_beta[1]['title'] == 'LITNET'
assert nren_result_beta[2]['title'] == 'CESNET'
assert nren_result_beta[3]['title'] == 'GEANT'
assert nren_result_beta[4]['title'] == 'KIAE'
assert nren_result_beta[5]['title'] == 'SWITCH'
excluded_dashboards = ['ASNET-AM', 'GEANT']
nren_excluded_beta = provision_folder(
None, 'NREN Access BETA', dashboards['NREN'],
data_config, 'testdatasource', excluded_dashboards)
assert len(nren_excluded_beta) == 4
assert nren_excluded_beta[0]['title'] == 'LITNET'
assert nren_excluded_beta[1]['title'] == 'CESNET'
assert nren_excluded_beta[2]['title'] == 'KIAE'
assert nren_excluded_beta[3]['title'] == 'SWITCH'
cust_result = provision_folder(None, 'testfolder', dashboards['RE_CUST'],
data_config, 'testdatasource', ['GEANT'])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment