Skip to content
Snippets Groups Projects
Commit ace4f49b authored by Release Webservice's avatar Release Webservice
Browse files

Finished release 0.45.

parents 2923bf82 f01fba1c
No related branches found
Tags 0.45
No related merge requests found
...@@ -58,7 +58,8 @@ DEFAULT_ORGANIZATIONS = [ ...@@ -58,7 +58,8 @@ DEFAULT_ORGANIZATIONS = [
], ],
"excluded_folders": { "excluded_folders": {
"Aggregates": ["CAE1"], "Aggregates": ["CAE1"],
"EUMETSAT Multicast": True "EUMETSAT Multicast": True,
"NREN Access BETA": True
} }
}, },
{ {
...@@ -88,7 +89,8 @@ DEFAULT_ORGANIZATIONS = [ ...@@ -88,7 +89,8 @@ DEFAULT_ORGANIZATIONS = [
"GWS PHY Upstream": True, "GWS PHY Upstream": True,
"GWS Direct": True, "GWS Direct": True,
"GWS Indirect": True, "GWS Indirect": True,
"EUMETSAT Multicast": True "EUMETSAT Multicast": True,
"NREN Access BETA": True
} }
}, },
{ {
...@@ -107,7 +109,8 @@ DEFAULT_ORGANIZATIONS = [ ...@@ -107,7 +109,8 @@ DEFAULT_ORGANIZATIONS = [
"EUMETSAT" "EUMETSAT"
], ],
"excluded_folders": { "excluded_folders": {
"EUMETSAT Multicast": True "EUMETSAT Multicast": True,
"NREN Access BETA": True
} }
}, },
{ {
...@@ -135,7 +138,8 @@ DEFAULT_ORGANIZATIONS = [ ...@@ -135,7 +138,8 @@ DEFAULT_ORGANIZATIONS = [
"IAS PUBLIC": True, "IAS PUBLIC": True,
"IAS UPSTREAM": True, "IAS UPSTREAM": True,
"GWS PHY Upstream": True, "GWS PHY Upstream": True,
"EUMETSAT Multicast": True "EUMETSAT Multicast": True,
"NREN Access BETA": True
} }
} }
] ]
......
...@@ -32,7 +32,8 @@ from brian_dashboard_manager.inventory_provider.interfaces import \ ...@@ -32,7 +32,8 @@ from brian_dashboard_manager.inventory_provider.interfaces import \
from brian_dashboard_manager.templating.helpers import \ from brian_dashboard_manager.templating.helpers import \
get_aggregate_dashboard_data, get_interface_data, \ get_aggregate_dashboard_data, get_interface_data, \
get_nren_interface_data, get_dashboard_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, \ from brian_dashboard_manager.templating.gws import generate_gws, \
generate_indirect generate_indirect
...@@ -45,6 +46,11 @@ logger = logging.getLogger(__name__) ...@@ -45,6 +46,11 @@ logger = logging.getLogger(__name__)
MAX_WORKERS = 4 MAX_WORKERS = 4
DASHBOARDS = { DASHBOARDS = {
'NRENBETA': { # needed for POL1-642 BETA
'tag': ['customersbeta'],
'folder_name': 'NREN Access BETA',
'interfaces': []
},
'NREN': { 'NREN': {
'tag': ['customers'], 'tag': ['customers'],
'folder_name': 'NREN Access', 'folder_name': 'NREN Access',
...@@ -188,8 +194,15 @@ def provision_folder(token_request, folder_name, dash, ...@@ -188,8 +194,15 @@ def provision_folder(token_request, folder_name, dash,
# dashboard should include error panels # dashboard should include error panels
errors = dash.get('errors', False) errors = dash.get('errors', False)
# needed for POL1-642 BETA
is_nren_beta = folder_name == 'NREN Access BETA'
is_nren = folder_name == 'NREN Access' is_nren = folder_name == 'NREN Access'
if is_nren: if is_nren:
data = get_nren_interface_data_old(interfaces)
dash_data = get_nren_dashboard_data(data, ds_name, tag)
elif is_nren_beta:
# needed for POL1-642 BETA
services = fetch_services(config['reporting_provider']) services = fetch_services(config['reporting_provider'])
data = get_nren_interface_data( data = get_nren_interface_data(
services, interfaces, excluded_dashboards) services, interfaces, excluded_dashboards)
...@@ -206,7 +219,8 @@ def provision_folder(token_request, folder_name, dash, ...@@ -206,7 +219,8 @@ def provision_folder(token_request, folder_name, dash,
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
for dashboard in dash_data: 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: if rendered.get('title').lower() in excluded_dashboards:
executor.submit(delete_dashboard, token_request, executor.submit(delete_dashboard, token_request,
rendered, folder['id']) rendered, folder['id'])
...@@ -266,7 +280,9 @@ def is_excluded_folder(org_config, folder_name): ...@@ -266,7 +280,9 @@ def is_excluded_folder(org_config, folder_name):
def excluded_folder_dashboards(org_config, folder_name): def excluded_folder_dashboards(org_config, folder_name):
excluded_folders = org_config.get('excluded_folders', {}) excluded_folders = org_config.get('excluded_folders', {})
excluded = excluded_folders.get(folder_name, []) excluded = excluded_folders.get(folder_name, [])
if folder_name == 'NREN Access': # in is needed for POL1-642 BETA ('NREN Access BETA' folder)
# revert to == 'NREN Access' when beta is over
if 'NREN Access' in folder_name:
excluded_nrens = org_config.get('excluded_nrens', []) excluded_nrens = org_config.get('excluded_nrens', [])
excluded = list(set(excluded).union(set(excluded_nrens))) excluded = list(set(excluded).union(set(excluded_nrens)))
return excluded if isinstance(excluded, list) else [] return excluded if isinstance(excluded, list) else []
...@@ -322,6 +338,12 @@ def _provision_interfaces(config, org_config, ds_name, token): ...@@ -322,6 +338,12 @@ def _provision_interfaces(config, org_config, ds_name, token):
ifaces = DASHBOARDS[dash_name]['interfaces'] ifaces = DASHBOARDS[dash_name]['interfaces']
ifaces.append(iface) 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 # add to matched aggregate dashboard
if dash_name in AGG_DASHBOARDS: if dash_name in AGG_DASHBOARDS:
ifaces = AGG_DASHBOARDS[dash_name]['interfaces'] ifaces = AGG_DASHBOARDS[dash_name]['interfaces']
...@@ -534,7 +556,6 @@ def _delete_unknown_folders(config, token): ...@@ -534,7 +556,6 @@ def _delete_unknown_folders(config, token):
# General is a base folder present in Grafana # General is a base folder present in Grafana
'General', 'General',
# other folders, created outside of the DASHBOARDS list # other folders, created outside of the DASHBOARDS list
'Service POC',
'GWS Indirect', 'GWS Indirect',
'GWS Direct', 'GWS Direct',
'Aggregates', 'Aggregates',
......
...@@ -67,6 +67,69 @@ def letter_generator(): ...@@ -67,6 +67,69 @@ def letter_generator():
yield result 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): def get_nren_interface_data(services, interfaces, excluded_dashboards):
""" """
Helper for grouping interfaces into groups of NRENs Helper for grouping interfaces into groups of NRENs
...@@ -101,10 +164,11 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards): ...@@ -101,10 +164,11 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards):
name = service.get('name') name = service.get('name')
sid = service.get('sid') sid = service.get('sid')
scid = service.get('scid') scid = service.get('scid')
service_type = service.get('service_type')
measurement = 'scid_rates' measurement = 'scid_rates'
lag_service = service['service_type'] == 'ETHERNET' lag_service = 'GA-' in sid and service_type == 'ETHERNET'
if lag_service: if lag_service:
if len(_interfaces) == 0: if len(_interfaces) == 0:
...@@ -144,6 +208,7 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards): ...@@ -144,6 +208,7 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards):
description = interface['description'].strip() description = interface['description'].strip()
interface_name = interface['name'] interface_name = interface['name']
host = interface['router'] host = interface['router']
port_type = interface.get('port_type', 'unknown').lower()
router = host.replace('.geant.net', '') router = host.replace('.geant.net', '')
location = host.split('.')[1].upper() location = host.split('.')[1].upper()
...@@ -160,6 +225,14 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards): ...@@ -160,6 +225,14 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards):
'PHYSICAL': [] 'PHYSICAL': []
}) })
if port_type == 'access':
dashboard['AGGREGATES'].append({
'interface': interface_name,
'hostname': host,
'alias':
f"{location} - {dashboard_name} ({interface_name})"
})
if info['interface_type'] == 'AGGREGATE': if info['interface_type'] == 'AGGREGATE':
# link aggregates are also shown # link aggregates are also shown
# under the physical dropdown # under the physical dropdown
......
...@@ -49,6 +49,18 @@ ...@@ -49,6 +49,18 @@
"title": "NREN Access", "title": "NREN Access",
"type": "dashboards" "type": "dashboards"
}, },
{% if staff %}
{
"asDropdown": true,
"icon": "external link",
"tags": [
"customersbeta"
],
"targetBlank": true,
"title": "NREN Access BETA",
"type": "dashboards"
},
{% endif %}
{ {
"asDropdown": true, "asDropdown": true,
"icon": "external link", "icon": "external link",
......
...@@ -2,6 +2,10 @@ ...@@ -2,6 +2,10 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [0.45] - 2022-12-7
- POL1-642: Added new service-based NREN dashboard as a separate beta for staff
- POL1-645: Changed how interfaces/services are addeed to Aggregate panels
## [0.44] - 2022-09-22 ## [0.44] - 2022-09-22
- POL1-533: Changed LAG services to be added under service list for NREN access dashboards - POL1-533: Changed LAG services to be added under service list for NREN access dashboards
......
...@@ -659,19 +659,42 @@ def test_provision_folder(data_config, mocker): ...@@ -659,19 +659,42 @@ def test_provision_folder(data_config, mocker):
None, 'NREN Access', dashboards['NREN'], None, 'NREN Access', dashboards['NREN'],
data_config, 'testdatasource', excluded_dashboards) data_config, 'testdatasource', excluded_dashboards)
assert len(nren_result) == 6 assert len(nren_result) == 3
assert nren_result[0]['title'] == 'ASNET-AM' assert nren_result[0]['title'] == 'GEANT'
assert nren_result[1]['title'] == 'LITNET' assert nren_result[1]['title'] == 'KIAE'
assert nren_result[2]['title'] == 'CESNET' assert nren_result[2]['title'] == 'SWITCH'
excluded_dashboards = ['ASNET-AM', 'GEANT'] excluded_dashboards = ['KIAE', 'GEANT']
nren_excluded = provision_folder( nren_excluded = provision_folder(
None, 'NREN Access', dashboards['NREN'], None, 'NREN Access', dashboards['NREN'],
data_config, 'testdatasource', excluded_dashboards) data_config, 'testdatasource', excluded_dashboards)
assert len(nren_excluded) == 4 assert len(nren_excluded) == 1
assert nren_excluded[0]['title'] == 'LITNET' assert nren_excluded[0]['title'] == 'SWITCH'
assert nren_excluded[1]['title'] == 'CESNET'
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'], cust_result = provision_folder(None, 'testfolder', dashboards['RE_CUST'],
data_config, 'testdatasource', ['GEANT']) 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