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 = {
@@ -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,
def provision_folder(token_request, folder_name, dash, services,
ds_name, excluded_dashboards):
ds_name, excluded_dashboards):
@@ -226,27 +252,32 @@ def provision_folder(token_request, folder_name, dash, services,
@@ -226,27 +252,32 @@ def provision_folder(token_request, folder_name, dash, services,
# dashboard should include error panels
# dashboard should include error panels
errors = dash.get('errors', False)
errors = dash.get('errors', False)
is_nren_beta = folder_name == "NREN Access BETA" # needed for POL1-642 BETA
def _match_to_complex_dashboard(_folder_name, _dash):
is_nren = folder_name == "NREN Access"
for complex_dashboard_name in COMPLEX_DASHBOARDS:
is_re_peer = folder_name == "RE Peer"
definition = COMPLEX_DASHBOARDS[complex_dashboard_name]
is_service = 'service_type' in dash
if 'matches' in definition: # use custom matching
# todo: figure out a neater way to do this?
is_this_dashboard = definition['matches'](_folder_name, _dash)
is_complex = is_nren or is_nren_beta or is_re_peer or is_service
if is_this_dashboard:
return definition
if is_nren:
elif complex_dashboard_name == _folder_name: # default, check if the folder name is the same as the name
data = get_nren_interface_data_old(interfaces)
return definition
dash_data = get_nren_dashboard_data(data, ds_name, tag)
return None
elif is_nren_beta:
# needed for POL1-642 BETA
complex_dashboard = _match_to_complex_dashboard(folder_name, dash)
data = get_nren_interface_data(
if complex_dashboard:
services, interfaces, excluded_dashboards)
# get all possible arguments for any given data function
dash_data = get_nren_dashboard_data(data, ds_name, tag)
all_args = {
elif is_re_peer:
'interfaces': interfaces,
data = get_re_peer_interface_data(interfaces)
'services': services,
dash_data = get_re_peer_dashboard_data(data, ds_name, tag)
'excluded_dashboards': excluded_dashboards,
elif is_service:
'service_type': dash.get('service_type'),
data = get_service_data(dash['service_type'], services, interfaces, excluded_dashboards)
}
dash_data = get_service_dashboard_data(data, ds_name, tag)
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:
else:
data = get_interface_data(interfaces)
data = get_interface_data(interfaces)
dash_data = get_dashboard_data(
dash_data = get_dashboard_data(
@@ -259,7 +290,7 @@ def provision_folder(token_request, folder_name, dash, services,
@@ -259,7 +290,7 @@ def provision_folder(token_request, folder_name, dash, services,
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:
if is_complex:
if complex_dashboard:
rendered = render_complex_dashboard(**dashboard)
rendered = render_complex_dashboard(**dashboard)
else:
else:
rendered = render_simple_dashboard(**dashboard)
rendered = render_simple_dashboard(**dashboard)
Loading