Newer
Older
import operator
from brian_dashboard_manager.templating.helpers \
import get_dashboard_data, letter_generator, create_panel
def get_panel_data(all_subscriptions):
"""
Helper for generating multicast panel data from subscriptions
which are duplicated across all routers
:param all_subscriptions: list of subscriptions
:return: dict of dashboard name to list of panels.
"""
result = dict()
def _panel(s):
return {
'title': f'{s["subscription"]} on {s["router"]}',
'subscription': s['subscription'],
}
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):
"""
:param panel: panel data
:param panel_type: type of panel (traffic, errors, etc.)
:param datasource: datasource to use
:return: panel data
"""
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):
"""
:param gridPos: generator of grid positions
:return: function that generates panels
"""
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):
"""
Generates EUMETSAT multicast dashboards
:param subscriptions: list of subscriptions
:param datasource: datasource to use
:return: generator of dashboards
"""
for dash in get_dashboard_data(
data=panel_data,
datasource=datasource,
tag='EUMET_MULTICAST',
panel_generator=subscription_panel_generator):