import operator from brian_dashboard_manager.templating.helpers \ import get_dashboard_data, letter_generator, create_panel def get_panel_data(all_subscriptions): result = dict() def _panel(s): return { 'measurement': 'multicast_rates', 'title': f'{s["subscription"]} on {s["router"]}', 'subscription': s['subscription'], 'hostname': s['router'] } for subscription in all_subscriptions: dashboard_name = f'{subscription["router"]} subscriptions' result.setdefault(dashboard_name, []).append(_panel(subscription)) # make the panels sorted deterministically for name in result.keys(): result[name] = sorted( result[name], key=operator.itemgetter('subscription')) return result def get_panel_fields(panel, panel_type, datasource): """ Helper for generating a single multicast panel """ letters = letter_generator() def get_target_data(alias, field): return { # panel includes identifying information # such as hostname, subscription, etc. **panel, 'alias': alias, 'refId': next(letters), 'select_field': field # 'percentile': 'percentile' in alias.lower(), } targets = [('Multicast Traffic', 'octets')] return create_panel({ **panel, 'datasource': datasource, 'linewidth': 1, 'title': panel['title'].format(panel_type), 'panel_targets': [get_target_data(*target) for target in targets], 'y_axis_type': 'bits', }) def subscription_panel_generator(gridPos): """ Generates panels used for multicast traffic dashboards """ def get_panel_definitions(panels, datasource, errors=False): 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: result.append(get_panel_fields({ **panel, **next(gridPos) }, 'errors', datasource)) return result return get_panel_definitions def generate_eumetsat_multicast(subscriptions, datasource): panel_data = get_panel_data(subscriptions) for dash in get_dashboard_data( data=panel_data, datasource=datasource, tag='EUMET_MULTICAST', panel_generator=subscription_panel_generator): yield dash