diff options
Diffstat (limited to 'csit.infra.dash/app/cdash/report/graphs.py')
-rw-r--r-- | csit.infra.dash/app/cdash/report/graphs.py | 155 |
1 files changed, 101 insertions, 54 deletions
diff --git a/csit.infra.dash/app/cdash/report/graphs.py b/csit.infra.dash/app/cdash/report/graphs.py index d1cd1427a1..ff1428eef1 100644 --- a/csit.infra.dash/app/cdash/report/graphs.py +++ b/csit.infra.dash/app/cdash/report/graphs.py @@ -91,17 +91,35 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict, :rtype: tuple(plotly.graph_objects.Figure, plotly.graph_objects.Figure) """ + def get_y_values(data, y_data_max, param, norm_factor): + if "receive_rate" in param: + y_vals_raw = data[param].to_list()[0] + else: + y_vals_raw = data[param].to_list() + y_data = [(y * norm_factor) for y in y_vals_raw] + try: + y_data_max = max(max(y_data), y_data_max) + except TypeError: + y_data_max = 0 + return y_data, y_data_max + fig_tput = None + fig_band = None fig_lat = None tput_traces = list() y_tput_max = 0 + y_units = set() + lat_traces = list() y_lat_max = 0 x_lat = list() - y_units = set() - show_latency = False - show_tput = False + + band_traces = list() + y_band_max = 0 + y_band_units = set() + x_band = list() + for idx, itm in enumerate(sel): itm_data = select_iterative_data(data, itm) @@ -120,13 +138,8 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict, y_units.update(itm_data[C.UNIT[ttype]].unique().tolist()) - if itm["testtype"] == "mrr": - y_data_raw = itm_data[C.VALUE_ITER[ttype]].to_list()[0] - else: - y_data_raw = itm_data[C.VALUE_ITER[ttype]].to_list() - y_data = [(y * norm_factor) for y in y_data_raw] - if y_data: - y_tput_max = max(max(y_data), y_tput_max) + y_data, y_tput_max = \ + get_y_values(itm_data, y_tput_max, C.VALUE_ITER[ttype], norm_factor) nr_of_samples = len(y_data) @@ -167,64 +180,98 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict, customdata=customdata ) tput_traces.append(go.Box(**tput_kwargs)) - show_tput = True - if ttype == "pdr": - customdata = list() - for _, row in itm_data.iterrows(): - hdrh = get_hdrh_latencies( - row, - f"{metadata['infra']}-{metadata['test']}" + if ttype in ("ndr", "pdr"): + y_band, y_band_max = get_y_values( + itm_data, + y_band_max, + C.VALUE_ITER[f"{ttype}-bandwidth"], + norm_factor + ) + if not all(pd.isna(y_band)): + y_band_units.update( + itm_data[C.UNIT[f"{ttype}-bandwidth"]].unique().\ + dropna().tolist() ) - metadata["csit-ref"] = f"{row['job']}/{row['build']}" - customdata.append({ - "metadata": deepcopy(metadata), - "hdrh": hdrh - }) - - y_lat_row = itm_data[C.VALUE_ITER["latency"]].to_list() - y_lat = [(y / norm_factor) for y in y_lat_row] - if y_lat: - try: - y_lat_max = max(max(y_lat), y_lat_max) - except TypeError: - continue - nr_of_samples = len(y_lat) - lat_kwargs = dict( - y=y_lat, - name=( - f"{idx + 1}. " - f"({nr_of_samples:02d} " - f"run{u's' if nr_of_samples > 1 else u''}) " - f"{itm['id']}" - ), - hoverinfo="all", - boxpoints="all", - jitter=0.3, - marker=dict(color=get_color(idx)), - customdata=customdata + band_kwargs = dict( + y=y_band, + name=( + f"{idx + 1}. " + f"({nr_of_samples:02d} " + f"run{'s' if nr_of_samples > 1 else ''}) " + f"{itm['id']}" + ), + hoverinfo=u"y+name", + boxpoints="all", + jitter=0.3, + marker=dict(color=get_color(idx)), + customdata=customdata + ) + x_band.append(idx + 1) + band_traces.append(go.Box(**band_kwargs)) + + if ttype == "pdr": + y_lat, y_lat_max = get_y_values( + itm_data, + y_lat_max, + C.VALUE_ITER["latency"], + 1 / norm_factor ) - x_lat.append(idx + 1) - lat_traces.append(go.Box(**lat_kwargs)) - show_latency = True - else: - lat_traces.append(go.Box()) + if not all(pd.isna(y_lat)): + customdata = list() + for _, row in itm_data.iterrows(): + hdrh = get_hdrh_latencies( + row, + f"{metadata['infra']}-{metadata['test']}" + ) + metadata["csit-ref"] = f"{row['job']}/{row['build']}" + customdata.append({ + "metadata": deepcopy(metadata), + "hdrh": hdrh + }) + nr_of_samples = len(y_lat) + lat_kwargs = dict( + y=y_lat, + name=( + f"{idx + 1}. " + f"({nr_of_samples:02d} " + f"run{u's' if nr_of_samples > 1 else u''}) " + f"{itm['id']}" + ), + hoverinfo="all", + boxpoints="all", + jitter=0.3, + marker=dict(color=get_color(idx)), + customdata=customdata + ) + x_lat.append(idx + 1) + lat_traces.append(go.Box(**lat_kwargs)) - if show_tput: + if tput_traces: pl_tput = deepcopy(layout["plot-throughput"]) pl_tput["xaxis"]["tickvals"] = [i for i in range(len(sel))] pl_tput["xaxis"]["ticktext"] = [str(i + 1) for i in range(len(sel))] pl_tput["yaxis"]["title"] = f"Throughput [{'|'.join(sorted(y_units))}]" if y_tput_max: - pl_tput["yaxis"]["range"] = [0, (int(y_tput_max / 1e6) + 2) * 1e6] + pl_tput["yaxis"]["range"] = [0, int(y_tput_max) + 2e6] fig_tput = go.Figure(data=tput_traces, layout=pl_tput) - if show_latency: + if band_traces: + pl_band = deepcopy(layout["plot-bandwidth"]) + pl_band["xaxis"]["tickvals"] = [i for i in range(len(x_band))] + pl_band["xaxis"]["ticktext"] = x_band + pl_band["yaxis"]["title"] = \ + f"Bandwidth [{'|'.join(sorted(y_band_units))}]" + if y_band_max: + pl_band["yaxis"]["range"] = [0, int(y_band_max) + 2e9] + fig_band = go.Figure(data=band_traces, layout=pl_band) + + if lat_traces: pl_lat = deepcopy(layout["plot-latency"]) pl_lat["xaxis"]["tickvals"] = [i for i in range(len(x_lat))] pl_lat["xaxis"]["ticktext"] = x_lat if y_lat_max: - pl_lat["yaxis"]["range"] = [0, (int(y_lat_max / 10) + 1) * 10] + pl_lat["yaxis"]["range"] = [0, int(y_lat_max) + 5] fig_lat = go.Figure(data=lat_traces, layout=pl_lat) - return fig_tput, fig_lat + return fig_tput, fig_band, fig_lat |