diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py index 6e784d7a4f8f3f0b3c62ce13c21cb0021c86e997..2bcf558da303a54b1855fd8361aaa55e1ae3ef9d 100644 --- a/brian_dashboard_manager/grafana/provision.py +++ b/brian_dashboard_manager/grafana/provision.py @@ -303,18 +303,20 @@ def _provision_interfaces(config, org_config, ds_name, token): excluded_nrens = org_config['excluded_nrens'] - def excluded(interface): - desc = interface['description'].lower() - lab = 'lab.office' in interface['router'].lower() - to_exclude = any(nren.lower() in desc for nren in excluded_nrens) - if not (to_exclude or lab): - if 'dashboards_info' not in interface: - to_exclude = True - logger.info(f'No "dashboards_info" for ' - f'{interface["router"]}:{interface["name"]}') - return not (to_exclude or lab) - - relevant_interfaces = list(filter(excluded, interfaces)) + def interfaces_to_keep(interface): + dash_info = interface.get('dashboards_info') + if dash_info is None: + logger.info(f'No "dashboards_info" for ' + f'{interface["router"]}:{interface["name"]}') + # throw it away + return False + dashboards = {nren['name'].lower() for nren in dash_info} + is_lab_router = 'lab.office' in interface['router'].lower() + should_keep = not (is_lab_router or any( + nren.lower() in dashboards for nren in excluded_nrens)) + return should_keep + + relevant_interfaces = list(filter(interfaces_to_keep, interfaces)) for interface in relevant_interfaces: interface['dashboards_info'] = list(filter( lambda x: x['name'] != '', diff --git a/brian_dashboard_manager/templating/helpers.py b/brian_dashboard_manager/templating/helpers.py index 6f98043061fdf490c393ba9da5d1663e45bfe08f..1b2fd0cc33df4f6e9b0bf9f05adfcf7435a5ee13 100644 --- a/brian_dashboard_manager/templating/helpers.py +++ b/brian_dashboard_manager/templating/helpers.py @@ -199,6 +199,7 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards): 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, @@ -256,6 +257,12 @@ def get_nren_interface_data(services, interfaces, excluded_dashboards): }) result[dashboard_name] = dashboard + + for customer in list(result.keys()): + lengths = [len(val) for val in result[customer].values()] + if sum(lengths) == 0: + # no services/interfaces, so remove it + del result[customer] return result diff --git a/changelog.md b/changelog.md index a86109fdec8030487cc4dfdf42a6403fecdbcdab..7c31c3019e50d8982859e1dfe55eea5185464c05 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,10 @@ All notable changes to this project will be documented in this file. +## [0.47] - 2023-02-27 +- POL1-653: Changed filtering of excluded_nrens to be based on destination dashboard rather than interface description parsing +- Changed service-based dashboards code to not provision empty dashboards + ## [0.46] - 2022-12-7 - POL1-645: Changed NREN aggregate code to not add duplicate interfaces diff --git a/setup.py b/setup.py index 7b9fafb0dec5baef3d21158dc374504fe77ecc5b..9f4e589fda4a34c0b5c8d411a25cc170857f52b9 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='brian-dashboard-manager', - version="0.46", + version="0.47", author='GEANT', author_email='swd@geant.org', description='', diff --git a/tox.ini b/tox.ini index 0394fae3f9846099fc0e0eae1e6c32bee3888ba0..4210c4fbd48478d94b81e1c91851784950976253 100644 --- a/tox.ini +++ b/tox.ini @@ -14,7 +14,7 @@ deps = commands = coverage erase - coverage run --source brian_dashboard_manager -m py.test {posargs} + coverage run --source brian_dashboard_manager -m pytest {posargs} coverage combine coverage xml coverage html