Skip to content
Snippets Groups Projects

Feature/pol1 839 complex dashboard refactor

Closed Sam Roberts requested to merge feature/POL1-839-complex-dashboard-refactor into develop
1 file
+ 53
22
Compare changes
  • Side-by-side
  • Inline
@@ -191,6 +191,32 @@ AGG_DASHBOARDS = {
},
}
# if the dashboard has the same folder name or passes the criteria of the 'matches' lambda,
# it's one of these complex dashboards, and needs a specific data_func and dash_func specified
COMPLEX_DASHBOARDS = {
'NREN Access BETA': {
'data_func': get_nren_interface_data,
'args': ['services', 'interfaces', 'excluded_dashboards'],
'dash_func': get_nren_dashboard_data
},
'NREN Access': {
'data_func': get_nren_interface_data_old,
'args': ['interfaces'],
'dash_func': get_nren_dashboard_data
},
'RE Peer': {
'data_func': get_re_peer_interface_data,
'args': ['interfaces'],
'dash_func': get_re_peer_dashboard_data
},
'Service-Based': {
'matches': lambda folder_name, dash: 'service_type' in dash,
'data_func': get_service_data,
'args': ['service_type', 'services', 'interfaces', 'excluded_dashboards'],
'dash_func': get_service_dashboard_data
}
}
def provision_folder(token_request, folder_name, dash, services,
ds_name, excluded_dashboards):
@@ -226,27 +252,32 @@ def provision_folder(token_request, folder_name, dash, services,
# dashboard should include error panels
errors = dash.get('errors', False)
is_nren_beta = folder_name == "NREN Access BETA" # needed for POL1-642 BETA
is_nren = folder_name == "NREN Access"
is_re_peer = folder_name == "RE Peer"
is_service = 'service_type' in dash
# todo: figure out a neater way to do this?
is_complex = is_nren or is_nren_beta or is_re_peer or is_service
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
data = get_nren_interface_data(
services, interfaces, excluded_dashboards)
dash_data = get_nren_dashboard_data(data, ds_name, tag)
elif is_re_peer:
data = get_re_peer_interface_data(interfaces)
dash_data = get_re_peer_dashboard_data(data, ds_name, tag)
elif is_service:
data = get_service_data(dash['service_type'], services, interfaces, excluded_dashboards)
dash_data = get_service_dashboard_data(data, ds_name, tag)
def _match_to_complex_dashboard(_folder_name, _dash):
for complex_dashboard_name in COMPLEX_DASHBOARDS:
definition = COMPLEX_DASHBOARDS[complex_dashboard_name]
if 'matches' in definition: # use custom matching
is_this_dashboard = definition['matches'](_folder_name, _dash)
if is_this_dashboard:
return definition
elif complex_dashboard_name == _folder_name: # default, check if the folder name is the same as the name
return definition
return None
complex_dashboard = _match_to_complex_dashboard(folder_name, dash)
if complex_dashboard:
# get all possible arguments for any given data function
all_args = {
'interfaces': interfaces,
'services': services,
'excluded_dashboards': excluded_dashboards,
'service_type': dash.get('service_type'),
}
data_func = complex_dashboard['data_func']
args = [all_args[arg_name] for arg_name in complex_dashboard['args']]
dash_func = complex_dashboard['dash_func']
data = data_func(*args)
dash_data = dash_func(data, ds_name, tag)
else:
data = get_interface_data(interfaces)
dash_data = get_dashboard_data(
@@ -259,7 +290,7 @@ def provision_folder(token_request, folder_name, dash, services,
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
for dashboard in dash_data:
if is_complex:
if complex_dashboard:
rendered = render_complex_dashboard(**dashboard)
else:
rendered = render_simple_dashboard(**dashboard)
Loading