X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=csit.infra.dash%2Fapp%2Fcdash%2Ftrending%2Flayout.py;h=38381459b860ad5c2691fe1ce17c6c546a8bacd4;hb=018660080bb9419dc658d6996be855e7219cf602;hp=028f592d9556d4fc995e9d528da57f6ebb71f36b;hpb=1f2a3cdd3e0cd1f9ae5c232274e9adccf73b4e50;p=csit.git diff --git a/csit.infra.dash/app/cdash/trending/layout.py b/csit.infra.dash/app/cdash/trending/layout.py index 028f592d95..38381459b8 100644 --- a/csit.infra.dash/app/cdash/trending/layout.py +++ b/csit.infra.dash/app/cdash/trending/layout.py @@ -693,45 +693,38 @@ class Layout: style=C.STYLE_DISABLED, ) - def _plotting_area_trending( - self, - tests: list, - normalize: bool - ) -> dbc.Col: + @staticmethod + def _plotting_area_trending(graphs: list) -> dbc.Col: """Generate the plotting area with all its content. - :param tests: A list of tests to be displayed in the trending graphs. - :param normalize: If True, the data in graphs is normalized. - :type tests: list - :type normalize: bool + :param graphs: A list of graphs to be displayed in the trending page. + :type graphs: list :returns: A collumn with trending graphs (tput and latency) in tabs. :rtype: dbc.Col """ - if not tests: + if not graphs: return C.PLACEHOLDER - figs = graph_trending(self._data, tests, self._graph_layout, normalize) - - if not figs[0]: + if not graphs[0]: return C.PLACEHOLDER tab_items = [ dbc.Tab( children=dcc.Graph( id={"type": "graph", "index": "tput"}, - figure=figs[0] + figure=graphs[0] ), label="Throughput", tab_id="tab-tput" ) ] - if figs[1]: + if graphs[1]: tab_items.append( dbc.Tab( children=dcc.Graph( id={"type": "graph", "index": "lat"}, - figure=figs[1] + figure=graphs[1] ), label="Latency", tab_id="tab-lat" @@ -781,7 +774,7 @@ class Layout: close_button=False ), dbc.Spinner( - dbc.ModalBody(self._get_telemetry_step_1()), + dbc.ModalBody(Layout._get_telemetry_step_1()), delay_show=2 * C.SPINNER_DELAY ), dbc.ModalFooter([ @@ -819,7 +812,7 @@ class Layout: close_button=False ), dbc.Spinner( - dbc.ModalBody(self._get_telemetry_step_2()), + dbc.ModalBody(Layout._get_telemetry_step_2()), delay_show=2 * C.SPINNER_DELAY ), dbc.ModalFooter([ @@ -856,10 +849,15 @@ class Layout: @staticmethod def _plotting_area_telemetry(graphs: list) -> dbc.Col: """Generate the plotting area with telemetry. + + :param graphs: A list of graphs to be displayed in the telemetry page. + :type graphs: list + :returns: A collumn with telemetry trending graphs. + :rtype: dbc.Col """ if not graphs: return C.PLACEHOLDER - + def _plural(iterative): return "s" if len(iterative) > 1 else str() @@ -1063,9 +1061,9 @@ class Layout: State({"type": "telemetry-btn", "index": ALL}, "disabled"), State({"type": "tm-container", "index": ALL}, "children"), State({"type": "tm-list-metrics", "index": ALL}, "value"), + State({"type": "tele-cl", "index": ALL}, "value"), Input("url", "href"), - Input({"type": "tele-cl", "index": ALL}, "value"), Input({"type": "tm-dd", "index": ALL}, "value"), Input("normalize", "value"), @@ -1087,8 +1085,8 @@ class Layout: tm_btns_disabled: list, tm_dd: list, list_metrics: list, - href: str, cl_metrics: list, + href: str, tm_dd_in: list, *_ ) -> tuple: @@ -1099,10 +1097,12 @@ class Layout: store = { "control-panel": dict(), "selected-tests": list(), + "trending-graphs": None, "telemetry-data": dict(), "selected-metrics": dict(), "telemetry-panels": list(), "telemetry-all-in-one": list(), + "telemetry-graphs": list(), "url": str() } @@ -1200,6 +1200,8 @@ class Layout: "cl-normalize-val": normalize, "btn-add-dis": False }) + store["trending-graphs"] = None + store["telemetry-graphs"] = list() on_draw[0] = True if telemetry: tm = TelemetryData(store_sel) @@ -1210,6 +1212,7 @@ class Layout: on_draw[1] = True elif trigger.type == "normalize": ctrl_panel.set({"cl-normalize-val": trigger.value}) + store["trending-graphs"] = None on_draw[0] = True elif trigger.type == "ctrl-dd": if trigger.idx == "dut": @@ -1347,14 +1350,19 @@ class Layout: f"cl-{param}-val": val_sel, f"cl-{param}-all-val": val_all, }) - if all((ctrl_panel.get("cl-core-val"), + if all((ctrl_panel.get("cl-core-val"), ctrl_panel.get("cl-frmsize-val"), ctrl_panel.get("cl-tsttype-val"), )): ctrl_panel.set({"btn-add-dis": False}) else: ctrl_panel.set({"btn-add-dis": True}) elif trigger.type == "ctrl-btn": - on_draw[0] = True + tm_panels = list() + tm_all_in_one = list() + store["trending-graphs"] = None + store["telemetry-graphs"] = list() + # on_draw[0] = True + on_draw = [True, True] if trigger.idx == "add-test": dut = ctrl_panel.get("dd-dut-val") phy = ctrl_panel.get("dd-phy-val") @@ -1412,10 +1420,10 @@ class Layout: "tele-cl", False), ) is_open = (True, False) - tm_btns_disabled[1], tm_btns_disabled[5] = True, True + tm_btns_disabled[1], tm_btns_disabled[5] = False, True elif trigger.idx == "select": - tm.from_json(tm_data) if any(cl_metrics): + tm.from_json(tm_data) if not tm_user["selected_metrics"]: tm_user["selected_metrics"] = \ tm_user["unique_metrics"] @@ -1433,8 +1441,7 @@ class Layout: tm_btns_disabled[4] = False is_open = (False, True) else: - tm_user = None - is_open = (False, False) + is_open = (True, False) elif trigger.idx == "add": tm.from_json(tm_data) tm_panels.append(tm_user["selected_metrics_with_labels"]) @@ -1462,12 +1469,6 @@ class Layout: colorize=False ), ) is_open = (True, False) - elif trigger.type == "tele-cl": - if any(cl_metrics): - tm_btns_disabled[1] = False - else: - tm_btns_disabled[1] = True - is_open = (True, False) elif trigger.type == "tm-dd": tm.from_metrics_with_labels( tm_user["unique_metrics_with_labels"] @@ -1500,6 +1501,7 @@ class Layout: elif trigger.type == "tm-btn-remove": del tm_panels[trigger.idx] del tm_all_in_one[trigger.idx] + del store["telemetry-graphs"][trigger.idx] tm.from_json(tm_data) on_draw = [True, True] @@ -1514,20 +1516,36 @@ class Layout: if on_draw[0]: # Trending if store_sel: lg_selected = get_list_group_items(store_sel, "sel-cl") - plotting_area_trending = self._plotting_area_trending( - store_sel, - bool(ctrl_panel.get("cl-normalize-val")) - ) - if on_draw[1]: # Telemetry - tm_graphs = list() - for panel, aio in zip(tm_panels, tm_all_in_one): - tm_graphs.append(graph_tm_trending( - tm.select_tm_trending_data(panel), + if store["trending-graphs"]: + graphs = store["trending-graphs"] + else: + graphs = graph_trending( + self._data, + store_sel, + self._graph_layout, + bool(ctrl_panel.get("cl-normalize-val")) + ) + if graphs and graphs[0]: + store["trending-graphs"] = graphs + plotting_area_trending = \ + Layout._plotting_area_trending(graphs) + + # Telemetry + start_idx = len(store["telemetry-graphs"]) + end_idx = len(tm_panels) + if not end_idx: + plotting_area_telemetry = C.PLACEHOLDER + elif on_draw[1] and (end_idx >= start_idx): + for idx in range(start_idx, end_idx): + store["telemetry-graphs"].append(graph_tm_trending( + tm.select_tm_trending_data(tm_panels[idx]), self._graph_layout, - bool(aio[0]) + bool(tm_all_in_one[idx][0]) )) plotting_area_telemetry = \ - Layout._plotting_area_telemetry(tm_graphs) + Layout._plotting_area_telemetry( + store["telemetry-graphs"] + ) col_plotting_area = C.STYLE_ENABLED row_card_sel_tests = C.STYLE_ENABLED row_btns_sel_tests = C.STYLE_ENABLED