# Prepare the header of the tables
header = ["Test case",
"Thput trend [Mpps]",
- "Change [Mpps]",
+ "Anomaly [Mpps]",
"Change [%]",
- "Anomaly"]
+ "Classification"]
header_str = ",".join(header) + "\n"
# Prepare data to the table:
try:
tbl_dict[tst_name]["data"]. \
append(tst_data["result"]["throughput"])
- except TypeError:
+ except (TypeError, KeyError):
pass # No data in output.xml for this test
tbl_lst = list()
# Test name:
name = tbl_dict[tst_name]["name"]
# Throughput trend:
- trend = list(pd_data.rolling(window=win_size).median())[-2]
+ trend = list(pd_data.rolling(window=win_size, min_periods=2).
+ median())[-2]
# Anomaly:
t_data, _ = find_outliers(pd_data)
last = list(t_data)[-1]
t_stdev = list(t_data.rolling(window=win_size, min_periods=2).
std())[-2]
if isnan(last):
- anomaly = "outlier"
+ classification = "outlier"
+ last = list(pd_data)[-1]
elif last < (trend - 3 * t_stdev):
- anomaly = "regression"
+ classification = "regression"
elif last > (trend + 3 * t_stdev):
- anomaly = "progression"
+ classification = "progression"
else:
- anomaly = "normal"
- # Change:
- change = round(float(last - trend) / 1000000, 2)
- # Relative change:
- rel_change = int(relative_change(float(trend), float(last)))
-
- tbl_lst.append([name,
- round(float(last) / 1000000, 2),
- change,
- rel_change,
- anomaly])
+ classification = "normal"
+
+ if not isnan(last) and not isnan(trend) and trend != 0:
+ # Change:
+ change = round(float(last - trend) / 1000000, 2)
+ # Relative change:
+ rel_change = int(relative_change(float(trend), float(last)))
+
+ tbl_lst.append([name,
+ round(float(trend) / 1000000, 2),
+ last,
+ rel_change,
+ classification])
# Sort the table according to the relative change
- tbl_lst.sort(key=lambda rel: rel[-2], reverse=True)
+ # tbl_lst.sort(key=lambda rel: rel[-2], reverse=True)
+
+ # Sort the table according to the classification
+ tbl_sorted = list()
+ for classification in ("regression", "outlier", "progression", "normal"):
+ tbl_tmp = [item for item in tbl_lst if item[4] == classification]
+ tbl_tmp.sort(key=lambda rel: rel[0])
+ tbl_sorted.extend(tbl_tmp)
file_name = "{0}.{1}".format(table["output-file"], table["output-file-ext"])
logging.info(" Writing file: '{0}'".format(file_name))
with open(file_name, "w") as file_handler:
file_handler.write(header_str)
- for test in tbl_lst:
+ for test in tbl_sorted:
file_handler.write(",".join([str(item) for item in test]) + '\n')
txt_file_name = "{0}.txt".format(table["output-file"])