f'src="../..{out_file_name.replace(u"_build", u"")}_in.html">'
f'</iframe>\n\n'
)
+
+ # TODO: Use html (rst) list for legend and footnote
if legend:
rst_file.write(legend[1:].replace(u"\n", u" |br| "))
if footnote:
f"Percentage change calculated for mean values.\n"
u"Stdev(Diff): "
u"Standard deviation of percentage change calculated for mean "
- u"values.\n"
- u":END"
+ u"values."
)
except (AttributeError, KeyError) as err:
logging.error(f"The model is invalid, missing parameter: {repr(err)}")
]
header_str = u",".join(header) + u"\n"
+ incl_tests = table.get(u"include-tests", u"MRR")
+
# Prepare data to the table:
tbl_dict = dict()
for job, builds in table[u"data"].items():
u"data": OrderedDict()
}
try:
- tbl_dict[tst_name][u"data"][str(build)] = \
- tst_data[u"result"][u"receive-rate"]
+ if incl_tests == u"MRR":
+ tbl_dict[tst_name][u"data"][str(build)] = \
+ tst_data[u"result"][u"receive-rate"]
+ elif incl_tests == u"NDR":
+ tbl_dict[tst_name][u"data"][str(build)] = \
+ tst_data[u"throughput"][u"NDR"][u"LOWER"]
+ elif incl_tests == u"PDR":
+ tbl_dict[tst_name][u"data"][str(build)] = \
+ tst_data[u"throughput"][u"PDR"][u"LOWER"]
except (TypeError, KeyError):
pass # No data in output.xml for this test
if len(data_t) < 2:
continue
- classification_lst, avgs = classify_anomalies(data_t)
+ classification_lst, avgs, _ = classify_anomalies(data_t)
win_size = min(len(data_t), table[u"window"])
long_win_size = min(len(data_t), table[u"long-trend-window"])
round(last_avg / 1e6, 2),
rel_change_last,
rel_change_long,
- classification_lst[-win_size:].count(u"regression"),
- classification_lst[-win_size:].count(u"progression")])
+ classification_lst[-win_size+1:].count(u"regression"),
+ classification_lst[-win_size+1:].count(u"progression")])
tbl_lst.sort(key=lambda rel: rel[0])
attrib=dict(align=u"left" if c_idx == 0 else u"center")
)
# Name:
- if c_idx == 0:
+ if c_idx == 0 and table.get(u"add-links", True):
ref = ET.SubElement(
tdata,
u"a",
)
data = input_data.filter_data(table, continue_on_error=True)
+ test_type = u"MRR"
+ if u"NDRPDR" in table.get(u"filter", list()):
+ test_type = u"NDRPDR"
+
# Prepare the header of the tables
header = [
u"Test Case",
fails_last_csit = val[3]
if fails_nr:
max_fails = fails_nr if fails_nr > max_fails else max_fails
- tbl_lst.append(
- [
- tst_data[u"name"],
- fails_nr,
- fails_last_date,
- fails_last_vpp,
- f"mrr-daily-build-{fails_last_csit}"
- ]
- )
+ tbl_lst.append([
+ tst_data[u"name"],
+ fails_nr,
+ fails_last_date,
+ fails_last_vpp,
+ f"{u'mrr-daily' if test_type == u'MRR' else u'ndrpdr-weekly'}"
+ f"-build-{fails_last_csit}"
+ ])
tbl_lst.sort(key=lambda rel: rel[2], reverse=True)
tbl_sorted = list()
u"stdev": tst_data[u"stdev"]
}
+ if not tbl_dict:
+ logging.warning(f"No data for table {table.get(u'title', u'')}!")
+ return
+
tbl_lst = list()
for tst_data in tbl_dict.values():
row = [tst_data[u"name"], ]
with open(txt_file_name, u'a', encoding='utf-8') as txt_file:
txt_file.write(legend)
txt_file.write(footnote)
- if legend or footnote:
- txt_file.write(u"\n:END")
# Generate html table:
_tpc_generate_html_table(
)
header = [
- [u"Version"],
- [u"Date", ],
- [u"Build", ],
- [u"Testbed", ]
+ [u"VPP Version", ],
+ [u"Start Timestamp", ],
+ [u"CSIT Build", ],
+ [u"CSIT Testbed", ]
]
tbl_dict = dict()
idx = 0
idx_cmp = cmp.get(u"compare", None)
if idx_ref is None or idx_cmp is None:
continue
- header[0].append(f"Diff{idx + 1}")
- header[1].append(header[0][idx_ref - idx - 1])
- header[2].append(u"vs")
- header[3].append(header[0][idx_cmp - idx - 1])
+ header[0].append(
+ f"Diff({header[0][idx_ref - idx].split(u'~')[-1]} vs "
+ f"{header[0][idx_cmp - idx].split(u'~')[-1]})"
+ )
+ header[1].append(u"")
+ header[2].append(u"")
+ header[3].append(u"")
for tst_name, tst_data in tbl_dict.items():
if not cmp_dict.get(tst_name, None):
cmp_dict[tst_name] = list()