X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Fgenerator_plots.py;h=2fb4159a1f2150f2714158a0e651fc02ec74c5b4;hp=729c2cc72c4d2378db0f83f470358842edbbdae7;hb=b5e2d94901060f29dddbc3cc1c3dcf47499dd158;hpb=d639b4d35441078219c77a887d222d26d42ebeff diff --git a/resources/tools/presentation/generator_plots.py b/resources/tools/presentation/generator_plots.py index 729c2cc72c..2fb4159a1f 100644 --- a/resources/tools/presentation/generator_plots.py +++ b/resources/tools/presentation/generator_plots.py @@ -40,7 +40,7 @@ COLORS = [u"SkyBlue", u"Olive", u"Purple", u"Coral", u"Indigo", u"Pink", u"LightGreen", u"LightSeaGreen", u"LightSkyBlue", u"Maroon", u"MediumSeaGreen", u"SeaGreen", u"LightSlateGrey"] -REGEX_NIC = re.compile(r'\d*ge\dp\d\D*\d*-') +REGEX_NIC = re.compile(r'(\d*ge\dp\d\D*\d*[a-z]*)-') def generate_plots(spec, data): @@ -199,74 +199,88 @@ def plot_hdrh_lat_by_percentile(plot, input_data): f" Creating the data set for the {plot.get(u'type', u'')} " f"{plot.get(u'title', u'')}." ) - data = input_data.filter_tests_by_name( - plot, params=[u"latency", u"throughput", u"parent", u"tags", u"type"]) - if data is None or len(data[0][0]) == 0: + if plot.get(u"include", None): + data = input_data.filter_tests_by_name( + plot, + params=[u"name", u"latency", u"parent", u"tags", u"type"] + )[0][0] + elif plot.get(u"filter", None): + data = input_data.filter_data( + plot, + params=[u"name", u"latency", u"parent", u"tags", u"type"], + continue_on_error=True + )[0][0] + else: + job = list(plot[u"data"].keys())[0] + build = str(plot[u"data"][job][0]) + data = input_data.tests(job, build) + + if data is None or len(data) == 0: logging.error(u"No data.") return + desc = { + u"LAT0": u"No-load.", + u"PDR10": u"Low-load, 10% PDR.", + u"PDR50": u"Mid-load, 50% PDR.", + u"PDR90": u"High-load, 90% PDR.", + u"PDR": u"Full-load, 100% PDR.", + u"NDR10": u"Low-load, 10% NDR.", + u"NDR50": u"Mid-load, 50% NDR.", + u"NDR90": u"High-load, 90% NDR.", + u"NDR": u"Full-load, 100% NDR." + } + graphs = [ u"LAT0", u"PDR10", u"PDR50", - u"PDR90", - u"NDR", - u"PDR" + u"PDR90" ] - for test in data[0][0]: + file_links = plot.get(u"output-file-links", None) + target_links = plot.get(u"target-links", None) + + for test in data: try: if test[u"type"] not in (u"NDRPDR",): logging.warning(f"Invalid test type: {test[u'type']}") continue name = re.sub(REGEX_NIC, u"", test[u"parent"]. replace(u'-ndrpdr', u'').replace(u'2n1l-', u'')) + try: + nic = re.search(REGEX_NIC, test[u"parent"]).group(1) + except (IndexError, AttributeError, KeyError, ValueError): + nic = u"" + name_link = f"{nic}-{test[u'name']}".replace(u'-ndrpdr', u'') - logging.info(f" Generating the graph: {name}") - - pdr = test[u"throughput"][u"PDR"][u"LOWER"] - ndr = test[u"throughput"][u"NDR"][u"LOWER"] - - desc = { - u"LAT0": u"No load", - u"PDR10": f"10% PDR background traffic ({(pdr*1e-7):.2f}Mpps)", - u"PDR50": f"50% PDR background traffic ({(pdr*5e-7):.2f}Mpps)", - u"PDR90": f"90% PDR background traffic ({(pdr*9e-7):.2f}Mpps)", - u"PDR": f"100% PDR background traffic ({(pdr*1e-6):.2f}Mpps)", - u"NDR10": f"10% NDR background traffic ({(ndr*1e-7):.2f}Mpps)", - u"NDR50": f"50% NDR background traffic ({(ndr*5e-7):.2f}Mpps)", - u"NDR90": f"90% NDR background traffic ({(ndr*9e-7):.2f}Mpps)", - u"NDR": f"100% NDR background traffic ({(ndr*1e-6):.2f}Mpps)" - } - - fig = make_subplots( - rows=1, - cols=2, - column_widths=[0.5, 0.5], - shared_xaxes=True, - subplot_titles=( - u"Direction: W-E", - u"Direction: E-W" - ), - specs=[[{"type": "scatter"}, {"type": "scatter"}], ] - ) + logging.info(f" Generating the graph: {name_link}") + + fig = plgo.Figure() layout = deepcopy(plot[u"layout"]) for color, graph in enumerate(graphs): for idx, direction in enumerate((u"direction1", u"direction2")): - xaxis = list() - yaxis = list() - hovertext = list() + xaxis = [0.0, ] + yaxis = [0.0, ] + hovertext = [ + f"{desc[graph]}
" + f"Direction: {(u'W-E', u'E-W')[idx % 2]}
" + f"Percentile: 0.0%
" + f"Latency: 0.0uSec" + ] decoded = hdrh.histogram.HdrHistogram.decode( test[u"latency"][graph][direction][u"hdrh"] ) for item in decoded.get_recorded_iterator(): percentile = item.percentile_level_iterated_to - xaxis.append((100.0 / (100.0 - percentile)) - if percentile != 100.0 else 1e6) + if percentile > 99.9: + continue + xaxis.append(percentile) yaxis.append(item.value_iterated_to) hovertext.append( f"{desc[graph]}
" + f"Direction: {(u'W-E', u'E-W')[idx % 2]}
" f"Percentile: {percentile:.5f}%
" f"Latency: {item.value_iterated_to}uSec" ) @@ -279,46 +293,37 @@ def plot_hdrh_lat_by_percentile(plot, input_data): legendgroup=desc[graph], showlegend=bool(idx), line=dict( - color=COLORS[color] + color=COLORS[color], + dash=u"solid" if idx % 2 else u"dash" ), hovertext=hovertext, hoverinfo=u"text" - ), - row=1, - col=idx + 1, - ) - fig.update_xaxes( - row=1, - col=idx + 1, - **layout[u"xaxis"] - ) - fig.update_yaxes( - row=1, - col=idx + 1, - **layout[u"yaxis"] + ) ) - try: - del layout[u"xaxis"] - except KeyError: - pass - try: - del layout[u"yaxis"] - except KeyError: - pass layout[u"title"][u"text"] = f"Latency: {name}" fig.update_layout(layout) # Create plot - file_name = (f"{plot[u'output-file']}-" - f"{name}" - f"{plot.get(u'output-file-type', u'.html')}") + file_name = f"{plot[u'output-file']}-{name_link}.html" logging.info(f" Writing file {file_name}") try: # Export Plot ploff.plot(fig, show_link=False, auto_open=False, filename=file_name) + # Add link to the file: + if file_links and target_links: + with open(file_links, u"a") as fw: + fw.write( + f"- `{name_link} " + f"<{target_links}/{file_name.split(u'/')[-1]}>`_\n" + ) + except FileNotFoundError as err: + logging.error( + f"Not possible to write the link to the file " + f"{file_links}\n{err}" + ) except PlotlyError as err: logging.error(f" Finished with error: {repr(err)}") @@ -1325,7 +1330,7 @@ def plot_nf_heatmap(plot, input_data): regex_cn = re.compile(r'^(\d*)R(\d*)C$') regex_test_name = re.compile(r'^.*-(\d+ch|\d+pl)-' r'(\d+mif|\d+vh)-' - r'(\d+vm\d+t|\d+dcr\d+t).*$') + r'(\d+vm\d+t|\d+dcr\d+t|\d+dcr\d+c).*$') vals = dict() # Transform the data