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

add initial NREN Access scid services

parent 6efcaa92
No related branches found
No related tags found
No related merge requests found
...@@ -171,7 +171,7 @@ AGG_DASHBOARDS = { ...@@ -171,7 +171,7 @@ AGG_DASHBOARDS = {
def provision_folder(token_request, folder_name, dash, def provision_folder(token_request, folder_name, dash,
ds_name, excluded_dashboards): config, ds_name, excluded_dashboards):
""" """
Function to provision dashboards within a folder. Function to provision dashboards within a folder.
""" """
...@@ -193,7 +193,8 @@ def provision_folder(token_request, folder_name, dash, ...@@ -193,7 +193,8 @@ def provision_folder(token_request, folder_name, dash,
is_nren = folder_name == 'NREN Access' is_nren = folder_name == 'NREN Access'
if is_nren: if is_nren:
data = get_nren_interface_data(interfaces) services = fetch_services(config['reporting_provider'])
data = get_nren_interface_data(services, interfaces)
dash_data = get_nren_dashboard_data(data, ds_name, tag) dash_data = get_nren_dashboard_data(data, ds_name, tag)
else: else:
data = get_interface_data(interfaces) data = get_interface_data(interfaces)
...@@ -348,7 +349,7 @@ def _provision_interfaces(config, org_config, ds_name, token): ...@@ -348,7 +349,7 @@ def _provision_interfaces(config, org_config, ds_name, token):
f'Provisioning {org_config["name"]}/{folder_name} dashboards') f'Provisioning {org_config["name"]}/{folder_name} dashboards')
res = executor.submit( res = executor.submit(
provision_folder, token, provision_folder, token,
folder_name, folder, ds_name, folder_name, folder, config, ds_name,
excluded_folder_dashboards(org_config, folder_name)) excluded_folder_dashboards(org_config, folder_name))
provisioned.append(res) provisioned.append(res)
...@@ -630,8 +631,8 @@ def provision(config): ...@@ -630,8 +631,8 @@ def provision(config):
ds_name = datasource.get('name', 'PollerInfluxDB') ds_name = datasource.get('name', 'PollerInfluxDB')
managed_dashboards = itertools.chain( managed_dashboards = itertools.chain(
_provision_service_dashboards( # _provision_service_dashboards(
config, org_config, ds_name, token_request), # config, org_config, ds_name, token_request),
_provision_interfaces( _provision_interfaces(
config, org_config, ds_name, token_request), config, org_config, ds_name, token_request),
_provision_gws_indirect( _provision_gws_indirect(
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Helper functions used to group interfaces together and generate the Helper functions used to group interfaces together and generate the
necessary data to generate the dashboards from templates. necessary data to generate the dashboards from templates.
""" """
from collections import defaultdict
import logging import logging
import json import json
from itertools import product from itertools import product
...@@ -63,7 +64,7 @@ def letter_generator(): ...@@ -63,7 +64,7 @@ def letter_generator():
yield result yield result
def get_nren_interface_data(interfaces): def get_nren_interface_data(services, interfaces):
""" """
Helper for grouping interfaces into groups of NRENs Helper for grouping interfaces into groups of NRENs
Extracts information from interfaces to be used in panels. Extracts information from interfaces to be used in panels.
...@@ -72,6 +73,66 @@ def get_nren_interface_data(interfaces): ...@@ -72,6 +73,66 @@ def get_nren_interface_data(interfaces):
""" """
result = {} result = {}
customers = defaultdict(list)
for service in services:
_customers = service.get('customers')
for cust in _customers:
customers[cust].append(service)
for customer, services in customers.items():
if not any([s['service_type'] == 'GEANT IP' for s in services]):
# NREN access customers must have at least one GEANT IP service
continue
dashboard = result.setdefault(customer, {
'AGGREGATES': [],
'SERVICES': [],
'PHYSICAL': []
})
for service in services:
_interfaces = service.get('endpoints')
name = service.get('name')
sid = service.get('sid')
scid = service.get('scid')
measurement = 'scid_rates'
lag_service = service['service_type'] == 'ETHERNET'
if lag_service:
if len(_interfaces) > 1:
logger.info(
f'{sid} {name} aggregate service has > 1 interface')
continue
if 'interface' in _interfaces[0]:
if_name = _interfaces[0].get('interface')
router = _interfaces[0].get('hostname')
else:
if_name = _interfaces[0].get('port')
router = _interfaces[0].get('equipment')
router = router.replace('.geant.net', '')
location = router.split('.')[1].upper()
title = f'{location} - {customer} ({if_name}) | {name}'
dashboard['AGGREGATES'].append({
'measurement': measurement,
'alias': title,
'scid': scid
})
else:
if 'MDVPN' in service['service_type']:
# MDVPN type services don't have data in BRIAN
continue
title = f'{name} ({sid})'
dashboard['SERVICES'].append({
'measurement': measurement,
'title': title,
'scid': scid
})
for interface in interfaces: for interface in interfaces:
description = interface['description'].strip() description = interface['description'].strip()
...@@ -94,13 +155,6 @@ def get_nren_interface_data(interfaces): ...@@ -94,13 +155,6 @@ def get_nren_interface_data(interfaces):
}) })
if info['interface_type'] == 'AGGREGATE': 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 # link aggregates are also shown
# under the physical dropdown # under the physical dropdown
dashboard['PHYSICAL'].append({ dashboard['PHYSICAL'].append({
...@@ -108,13 +162,6 @@ def get_nren_interface_data(interfaces): ...@@ -108,13 +162,6 @@ def get_nren_interface_data(interfaces):
'hostname': host, 'hostname': host,
'interface': interface_name 'interface': interface_name
}) })
elif info['interface_type'] == 'LOGICAL':
dashboard['SERVICES'].append({
'title': panel_title,
'hostname': host,
'interface': interface_name
})
elif info['interface_type'] == 'PHYSICAL': elif info['interface_type'] == 'PHYSICAL':
dashboard['PHYSICAL'].append({ dashboard['PHYSICAL'].append({
'title': panel_title, 'title': panel_title,
......
...@@ -637,7 +637,7 @@ def test_provision_folder(data_config, mocker): ...@@ -637,7 +637,7 @@ def test_provision_folder(data_config, mocker):
excluded_dashboards = [] excluded_dashboards = []
nren_result = provision_folder(None, 'testfolder', dashboards['NREN'], nren_result = provision_folder(None, 'testfolder', dashboards['NREN'],
'testdatasource', excluded_dashboards) [], 'testdatasource', excluded_dashboards)
assert len(nren_result) == 3 assert len(nren_result) == 3
assert nren_result[0]['title'] == 'GEANT' assert nren_result[0]['title'] == 'GEANT'
...@@ -646,14 +646,14 @@ def test_provision_folder(data_config, mocker): ...@@ -646,14 +646,14 @@ def test_provision_folder(data_config, mocker):
excluded_dashboards = ['SWITCH'] excluded_dashboards = ['SWITCH']
nren_excluded = provision_folder(None, 'testfolder', dashboards['NREN'], nren_excluded = provision_folder(None, 'testfolder', dashboards['NREN'],
'testdatasource', excluded_dashboards) [], 'testdatasource', excluded_dashboards)
assert len(nren_excluded) == 2 assert len(nren_excluded) == 2
assert nren_excluded[0]['title'] == 'GEANT' assert nren_excluded[0]['title'] == 'GEANT'
assert nren_excluded[1]['title'] == 'KIAE' assert nren_excluded[1]['title'] == 'KIAE'
cust_result = provision_folder(None, 'testfolder', dashboards['RE_CUST'], cust_result = provision_folder(None, 'testfolder', dashboards['RE_CUST'],
'testdatasource', ['GEANT']) [], 'testdatasource', ['GEANT'])
assert len(cust_result) == 2 assert len(cust_result) == 2
assert cust_result[0]['title'] == 'KIAE' assert cust_result[0]['title'] == 'KIAE'
assert cust_result[1]['title'] == 'SWITCH' assert cust_result[1]['title'] == 'SWITCH'
......
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