X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Fgenerator_cpta.py;h=2f2ab970e4c58de96cee49e14cad25edd8874d4e;hb=52e3b0f6b6b4f92c5ee5ecf003623cb59c798290;hp=ac0a5c60e17d0c14677f5f203565fdf1ea12da90;hpb=1945ebc5fe96f2289c6ffc4cc162daa1d3b8658f;p=csit.git
diff --git a/resources/tools/presentation/generator_cpta.py b/resources/tools/presentation/generator_cpta.py
index ac0a5c60e1..2f2ab970e4 100644
--- a/resources/tools/presentation/generator_cpta.py
+++ b/resources/tools/presentation/generator_cpta.py
@@ -92,20 +92,31 @@ THEME_OVERRIDES = u"""/* override table width restrictions */
}
"""
-COLORS = [
- u"SkyBlue", u"Olive", u"Purple", u"Coral", u"Indigo", u"Pink",
- u"Chocolate", u"Brown", u"Magenta", u"Cyan", u"Orange", u"Black",
- u"Violet", u"Blue", u"Yellow", u"BurlyWood", u"CadetBlue", u"Crimson",
- u"DarkBlue", u"DarkCyan", u"DarkGreen", u"Green", u"GoldenRod",
- u"LightGreen", u"LightSeaGreen", u"LightSkyBlue", u"Maroon",
- u"MediumSeaGreen", u"SeaGreen", u"LightSlateGrey",
- u"SkyBlue", u"Olive", u"Purple", u"Coral", u"Indigo", u"Pink",
- u"Chocolate", u"Brown", u"Magenta", u"Cyan", u"Orange", u"Black",
- u"Violet", u"Blue", u"Yellow", u"BurlyWood", u"CadetBlue", u"Crimson",
- u"DarkBlue", u"DarkCyan", u"DarkGreen", u"Green", u"GoldenRod",
- u"LightGreen", u"LightSeaGreen", u"LightSkyBlue", u"Maroon",
- u"MediumSeaGreen", u"SeaGreen", u"LightSlateGrey"
-]
+COLORS = (
+ u"#1A1110",
+ u"#DA2647",
+ u"#214FC6",
+ u"#01786F",
+ u"#BD8260",
+ u"#FFD12A",
+ u"#A6E7FF",
+ u"#738276",
+ u"#C95A49",
+ u"#FC5A8D",
+ u"#CEC8EF",
+ u"#391285",
+ u"#6F2DA8",
+ u"#FF878D",
+ u"#45A27D",
+ u"#FFD0B9",
+ u"#FD5240",
+ u"#DB91EF",
+ u"#44D7A8",
+ u"#4F86F7",
+ u"#84DE02",
+ u"#FFCFF1",
+ u"#614051"
+)
def generate_cpta(spec, data):
@@ -146,7 +157,7 @@ def generate_cpta(spec, data):
def _generate_trending_traces(in_data, job_name, build_info,
- show_trend_line=True, name=u"", color=u""):
+ name=u"", color=u"", incl_tests=u"MRR"):
"""Generate the trending traces:
- samples,
- outliers, regress, progress
@@ -155,22 +166,30 @@ def _generate_trending_traces(in_data, job_name, build_info,
:param in_data: Full data set.
:param job_name: The name of job which generated the data.
:param build_info: Information about the builds.
- :param show_trend_line: Show moving median (trending plot).
:param name: Name of the plot
:param color: Name of the color for the plot.
+ :param incl_tests: Included tests, accepted values: MRR, NDR, PDR
:type in_data: OrderedDict
:type job_name: str
:type build_info: dict
- :type show_trend_line: bool
:type name: str
:type color: str
+ :type incl_tests: str
:returns: Generated traces (list) and the evaluated result.
:rtype: tuple(traces, result)
"""
+ if incl_tests not in (u"MRR", u"NDR", u"PDR"):
+ return list(), None
+
data_x = list(in_data.keys())
- data_y_pps = list(in_data.values())
- data_y_mpps = [float(item) / 1e6 for item in data_y_pps]
+ data_y_pps = list()
+ data_y_mpps = list()
+ data_y_stdev = list()
+ for item in in_data.values():
+ data_y_pps.append(float(item[u"receive-rate"]))
+ data_y_stdev.append(float(item[u"receive-stdev"]) / 1e6)
+ data_y_mpps.append(float(item[u"receive-rate"]) / 1e6)
hover_text = list()
xaxis = list()
@@ -178,28 +197,44 @@ def _generate_trending_traces(in_data, job_name, build_info,
str_key = str(key)
date = build_info[job_name][str_key][0]
hover_str = (u"date: {date}
"
- u"value [Mpps]: {value:.3f}
"
+ u"{property} [Mpps]: {value:.3f}
"
+ u""
u"{sut}-ref: {build}
"
- u"csit-ref: mrr-{period}-build-{build_nr}
"
+ u"csit-ref: {test}-{period}-build-{build_nr}
"
u"testbed: {testbed}")
+ if incl_tests == u"MRR":
+ hover_str = hover_str.replace(
+ u"", f"stdev [Mpps]: {data_y_stdev[index]:.3f}
"
+ )
+ else:
+ hover_str = hover_str.replace(u"", u"")
+ if u"-cps" in name:
+ hover_str = hover_str.replace(u"[Mpps]", u"[Mcps]")
if u"dpdk" in job_name:
hover_text.append(hover_str.format(
date=date,
+ property=u"average" if incl_tests == u"MRR" else u"throughput",
value=data_y_mpps[index],
sut=u"dpdk",
build=build_info[job_name][str_key][1].rsplit(u'~', 1)[0],
+ test=incl_tests.lower(),
period=u"weekly",
build_nr=str_key,
testbed=build_info[job_name][str_key][2]))
elif u"vpp" in job_name:
- hover_text.append(hover_str.format(
+ hover_str = hover_str.format(
date=date,
+ property=u"average" if incl_tests == u"MRR" else u"throughput",
value=data_y_mpps[index],
sut=u"vpp",
build=build_info[job_name][str_key][1].rsplit(u'~', 1)[0],
- period=u"daily",
+ test=incl_tests.lower(),
+ period=u"daily" if incl_tests == u"MRR" else u"weekly",
build_nr=str_key,
- testbed=build_info[job_name][str_key][2]))
+ testbed=build_info[job_name][str_key][2])
+ if u"-cps" in name:
+ hover_str = hover_str.replace(u"throughput", u"connection rate")
+ hover_text.append(hover_str)
xaxis.append(datetime(int(date[0:4]), int(date[4:6]), int(date[6:8]),
int(date[9:11]), int(date[12:])))
@@ -208,8 +243,9 @@ def _generate_trending_traces(in_data, job_name, build_info,
for key, value in zip(xaxis, data_y_pps):
data_pd[key] = value
- anomaly_classification, avgs_pps = classify_anomalies(data_pd)
+ anomaly_classification, avgs_pps, stdevs_pps = classify_anomalies(data_pd)
avgs_mpps = [avg_pps / 1e6 for avg_pps in avgs_pps]
+ stdevs_mpps = [stdev_pps / 1e6 for stdev_pps in stdevs_pps]
anomalies = OrderedDict()
anomalies_colors = list()
@@ -221,8 +257,7 @@ def _generate_trending_traces(in_data, job_name, build_info,
}
if anomaly_classification:
for index, (key, value) in enumerate(data_pd.items()):
- if anomaly_classification[index] in \
- (u"outlier", u"regression", u"progression"):
+ if anomaly_classification[index] in (u"regression", u"progression"):
anomalies[key] = value / 1e6
anomalies_colors.append(
anomaly_color[anomaly_classification[index]])
@@ -251,23 +286,30 @@ def _generate_trending_traces(in_data, job_name, build_info,
)
traces = [trace_samples, ]
- if show_trend_line:
- trace_trend = plgo.Scatter(
- x=xaxis,
- y=avgs_mpps,
- mode=u"lines",
- line={
- u"shape": u"linear",
- u"width": 1,
- u"color": color,
- },
- showlegend=False,
- legendgroup=name,
- name=f"{name}",
- text=[f"trend [Mpps]: {avg:.3f}" for avg in avgs_mpps],
- hoverinfo=u"text+name"
+ trend_hover_text = list()
+ for idx in range(len(data_x)):
+ trend_hover_str = (
+ f"trend [Mpps]: {avgs_mpps[idx]:.3f}
"
+ f"stdev [Mpps]: {stdevs_mpps[idx]:.3f}"
)
- traces.append(trace_trend)
+ trend_hover_text.append(trend_hover_str)
+
+ trace_trend = plgo.Scatter(
+ x=xaxis,
+ y=avgs_mpps,
+ mode=u"lines",
+ line={
+ u"shape": u"linear",
+ u"width": 1,
+ u"color": color,
+ },
+ showlegend=False,
+ legendgroup=name,
+ name=f"{name}",
+ text=trend_hover_text,
+ hoverinfo=u"text+name"
+ )
+ traces.append(trace_trend)
trace_anomalies = plgo.Scatter(
x=list(anomalies.keys()),
@@ -340,6 +382,8 @@ def _generate_all_charts(spec, input_data):
logging.info(f" Generating the chart {graph.get(u'title', u'')} ...")
+ incl_tests = graph.get(u"include-tests", u"MRR")
+
job_name = list(graph[u"data"].keys())[0]
csv_tbl = list()
@@ -347,20 +391,20 @@ def _generate_all_charts(spec, input_data):
# Transform the data
logging.info(
- f" Creating the data set for the {graph.get(u'type', u'')} "
- f"{graph.get(u'title', u'')}."
+ f" Creating the data set for the {graph.get(u'type', u'')} "
+ f"{graph.get(u'title', u'')}."
)
if graph.get(u"include", None):
data = input_data.filter_tests_by_name(
graph,
- params=[u"type", u"result", u"tags"],
+ params=[u"type", u"result", u"throughput", u"tags"],
continue_on_error=True
)
else:
data = input_data.filter_data(
graph,
- params=[u"type", u"result", u"tags"],
+ params=[u"type", u"result", u"throughput", u"tags"],
continue_on_error=True)
if data is None or data.empty:
@@ -377,8 +421,21 @@ def _generate_all_charts(spec, input_data):
if chart_data.get(test_name, None) is None:
chart_data[test_name] = OrderedDict()
try:
- chart_data[test_name][int(index)] = \
- test[u"result"][u"receive-rate"]
+ if incl_tests == u"MRR":
+ rate = test[u"result"][u"receive-rate"]
+ stdev = test[u"result"][u"receive-stdev"]
+ elif incl_tests == u"NDR":
+ rate = test[u"throughput"][u"NDR"][u"LOWER"]
+ stdev = float(u"nan")
+ elif incl_tests == u"PDR":
+ rate = test[u"throughput"][u"PDR"][u"LOWER"]
+ stdev = float(u"nan")
+ else:
+ continue
+ chart_data[test_name][int(index)] = {
+ u"receive-rate": rate,
+ u"receive-stdev": stdev
+ }
chart_tags[test_name] = test.get(u"tags", None)
except (KeyError, TypeError):
pass
@@ -387,9 +444,12 @@ def _generate_all_charts(spec, input_data):
for tst_name, tst_data in chart_data.items():
tst_lst = list()
for bld in builds_dict[job_name]:
- itm = tst_data.get(int(bld), u'')
+ itm = tst_data.get(int(bld), dict())
# CSIT-1180: Itm will be list, compute stats.
- tst_lst.append(str(itm))
+ try:
+ tst_lst.append(str(itm.get(u"receive-rate", u"")))
+ except AttributeError:
+ tst_lst.append(u"")
csv_tbl.append(f"{tst_name}," + u",".join(tst_lst) + u'\n')
# Generate traces:
@@ -415,7 +475,9 @@ def _generate_all_charts(spec, input_data):
build_info=build_info,
name=u'-'.join(tst_name.split(u'.')[-1].
split(u'-')[2:-1]),
- color=COLORS[index])
+ color=COLORS[index],
+ incl_tests=incl_tests
+ )
except IndexError:
logging.error(f"Out of colors: index: "
f"{index}, test: {tst_name}")
@@ -439,7 +501,9 @@ def _generate_all_charts(spec, input_data):
build_info=build_info,
name=u'-'.join(
tst_name.split(u'.')[-1].split(u'-')[2:-1]),
- color=COLORS[index])
+ color=COLORS[index],
+ incl_tests=incl_tests
+ )
except IndexError:
logging.error(
f"Out of colors: index: {index}, test: {tst_name}"