trending: new view in regressions and progressions
[csit.git] / resources / tools / presentation / generator_tables.py
index 28f42ec..2e7d3de 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -297,28 +297,15 @@ def table_oper_data_html(table, input_data):
             threads = dict({idx: list() for idx in range(len(runtime))})
             for idx, run_data in runtime.items():
                 for gnode, gdata in run_data.items():
-                    if gdata[u"vectors"] > 0:
-                        clocks = gdata[u"clocks"] / gdata[u"vectors"]
-                    elif gdata[u"calls"] > 0:
-                        clocks = gdata[u"clocks"] / gdata[u"calls"]
-                    elif gdata[u"suspends"] > 0:
-                        clocks = gdata[u"clocks"] / gdata[u"suspends"]
-                    else:
-                        clocks = 0.0
-                    if gdata[u"calls"] > 0:
-                        vectors_call = gdata[u"vectors"] / gdata[u"calls"]
-                    else:
-                        vectors_call = 0.0
-                    if int(gdata[u"calls"]) + int(gdata[u"vectors"]) + \
-                            int(gdata[u"suspends"]):
-                        threads[idx].append([
-                            gnode,
-                            int(gdata[u"calls"]),
-                            int(gdata[u"vectors"]),
-                            int(gdata[u"suspends"]),
-                            clocks,
-                            vectors_call
-                        ])
+                    threads[idx].append([
+                        gnode,
+                        int(gdata[u"calls"]),
+                        int(gdata[u"vectors"]),
+                        int(gdata[u"suspends"]),
+                        float(gdata[u"clocks"]),
+                        float(gdata[u"vectors"] / gdata[u"calls"]) \
+                            if gdata[u"calls"] else 0.0
+                    ])
 
             bold = ET.SubElement(tcol, u"b")
             bold.text = (
@@ -972,7 +959,7 @@ def table_perf_trending_dash(table, input_data):
     header = [
         u"Test Case",
         u"Trend [Mpps]",
-        u"Short-Term Change [%]",
+        u"Runs [#]",
         u"Long-Term Change [%]",
         u"Regressions [#]",
         u"Progressions [#]"
@@ -1034,6 +1021,13 @@ def table_perf_trending_dash(table, input_data):
         last_avg = avgs[-1]
         avg_week_ago = avgs[max(-win_size, -len(avgs))]
 
+        nr_of_last_avgs = 0;
+        for x in reversed(avgs):
+            if x == last_avg:
+                nr_of_last_avgs += 1
+            else:
+                break
+
         if isnan(last_avg) or isnan(avg_week_ago) or avg_week_ago == 0.0:
             rel_change_last = nan
         else:
@@ -1055,28 +1049,23 @@ def table_perf_trending_dash(table, input_data):
             tbl_lst.append(
                 [tbl_dict[tst_name][u"name"],
                  round(last_avg / 1e6, 2),
-                 rel_change_last,
+                 nr_of_last_avgs,
                  rel_change_long,
                  classification_lst[-win_size+1:].count(u"regression"),
                  classification_lst[-win_size+1:].count(u"progression")])
 
     tbl_lst.sort(key=lambda rel: rel[0])
-    tbl_lst.sort(key=lambda rel: rel[3])
     tbl_lst.sort(key=lambda rel: rel[2])
-
-    tbl_sorted = list()
-    for nrr in range(table[u"window"], -1, -1):
-        tbl_reg = [item for item in tbl_lst if item[4] == nrr]
-        for nrp in range(table[u"window"], -1, -1):
-            tbl_out = [item for item in tbl_reg if item[5] == nrp]
-            tbl_sorted.extend(tbl_out)
+    tbl_lst.sort(key=lambda rel: rel[3])
+    tbl_lst.sort(key=lambda rel: rel[5], reverse=True)
+    tbl_lst.sort(key=lambda rel: rel[4], reverse=True)
 
     file_name = f"{table[u'output-file']}{table[u'output-file-ext']}"
 
     logging.info(f"    Writing file: {file_name}")
     with open(file_name, u"wt") as file_handler:
         file_handler.write(header_str)
-        for test in tbl_sorted:
+        for test in tbl_lst:
             file_handler.write(u",".join([str(item) for item in test]) + u'\n')
 
     logging.info(f"    Writing file: {table[u'output-file']}.txt")
@@ -1279,6 +1268,8 @@ def _generate_url(testbed, test_name):
             bsf += u"-sw"
         elif u"hw" in test_name:
             bsf += u"-hw"
+        elif u"spe" in test_name:
+            bsf += u"-spe"
     elif u"ethip4vxlan" in test_name:
         domain = u"ip4_tunnels"
     elif u"ethip4udpgeneve" in test_name: