PAL: Do not read sh run for trending
[csit.git] / resources / tools / presentation / generator_tables.py
index 0d8b272..8218084 100644 (file)
@@ -24,6 +24,7 @@ from xml.etree import ElementTree as ET
 from datetime import datetime as dt
 from datetime import timedelta
 from copy import deepcopy
 from datetime import datetime as dt
 from datetime import timedelta
 from copy import deepcopy
+from json import loads
 
 import plotly.graph_objects as go
 import plotly.offline as ploff
 
 import plotly.graph_objects as go
 import plotly.offline as ploff
@@ -183,10 +184,47 @@ def table_oper_data_html(table, input_data):
             tcol = ET.SubElement(
                 trow, u"td", attrib=dict(align=u"left", colspan=u"6")
             )
             tcol = ET.SubElement(
                 trow, u"td", attrib=dict(align=u"left", colspan=u"6")
             )
-            if dut_data.get(u"threads", None) is None:
+            if dut_data.get(u"runtime", None) is None:
                 tcol.text = u"No Data"
                 continue
 
                 tcol.text = u"No Data"
                 continue
 
+            runtime = loads(dut_data[u"runtime"])
+
+            try:
+                threads_nr = len(runtime[0][u"clocks"])
+            except (IndexError, KeyError):
+                tcol.text = u"No Data"
+                continue
+
+            threads = OrderedDict({idx: list() for idx in range(threads_nr)})
+            for item in runtime:
+                for idx in range(threads_nr):
+                    if item[u"vectors"][idx] > 0:
+                        clocks = item[u"clocks"][idx] / item[u"vectors"][idx]
+                    elif item[u"calls"][idx] > 0:
+                        clocks = item[u"clocks"][idx] / item[u"calls"][idx]
+                    elif item[u"suspends"][idx] > 0:
+                        clocks = item[u"clocks"][idx] / item[u"suspends"][idx]
+                    else:
+                        clocks = 0.0
+
+                    if item[u"calls"][idx] > 0:
+                        vectors_call = item[u"vectors"][idx] / item[u"calls"][
+                            idx]
+                    else:
+                        vectors_call = 0.0
+
+                    if int(item[u"calls"][idx]) + int(item[u"vectors"][idx]) + \
+                        int(item[u"suspends"][idx]):
+                        threads[idx].append([
+                            item[u"name"],
+                            item[u"calls"][idx],
+                            item[u"vectors"][idx],
+                            item[u"suspends"][idx],
+                            clocks,
+                            vectors_call
+                        ])
+
             bold = ET.SubElement(tcol, u"b")
             bold.text = (
                 f"Host IP: {dut_data.get(u'host', '')}, "
             bold = ET.SubElement(tcol, u"b")
             bold.text = (
                 f"Host IP: {dut_data.get(u'host', '')}, "
@@ -200,7 +238,7 @@ def table_oper_data_html(table, input_data):
             )
             thead.text = u"\t"
 
             )
             thead.text = u"\t"
 
-            for thread_nr, thread in dut_data[u"threads"].items():
+            for thread_nr, thread in threads.items():
                 trow = ET.SubElement(
                     tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
                 )
                 trow = ET.SubElement(
                     tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
                 )
@@ -323,7 +361,8 @@ def table_merged_details(table, input_data):
         suite_name = suite[u"name"]
         table_lst = list()
         for test in data.keys():
         suite_name = suite[u"name"]
         table_lst = list()
         for test in data.keys():
-            if data[test][u"parent"] not in suite_name:
+            if data[test][u"status"] != u"PASS" or \
+                    data[test][u"parent"] not in suite_name:
                 continue
             row_lst = list()
             for column in table[u"columns"]:
                 continue
             row_lst = list()
             for column in table[u"columns"]:
@@ -351,10 +390,12 @@ def table_merged_details(table, input_data):
                                 col_data = col_data.split(u" |br| ", 1)[1]
                             except IndexError:
                                 pass
                                 col_data = col_data.split(u" |br| ", 1)[1]
                             except IndexError:
                                 pass
+                        col_data = col_data.replace(u'\n', u' |br| ').\
+                            replace(u'\r', u'').replace(u'"', u"'")
                         col_data = f" |prein| {col_data} |preout| "
                     elif column[u"data"].split(u" ")[1] in \
                             (u"conf-history", u"show-run"):
                         col_data = f" |prein| {col_data} |preout| "
                     elif column[u"data"].split(u" ")[1] in \
                             (u"conf-history", u"show-run"):
-                        col_data = col_data.replace(u" |br| ", u"", 1)
+                        col_data = col_data.replace(u'\n', u' |br| ')
                         col_data = f" |prein| {col_data[:-5]} |preout| "
                     row_lst.append(f'"{col_data}"')
                 except KeyError:
                         col_data = f" |prein| {col_data[:-5]} |preout| "
                     row_lst.append(f'"{col_data}"')
                 except KeyError:
@@ -386,12 +427,7 @@ def _tpc_modify_test_name(test_name, ignore_nic=False):
     :rtype: str
     """
     test_name_mod = test_name.\
     :rtype: str
     """
     test_name_mod = test_name.\
-        replace(u"-ndrpdrdisc", u""). \
         replace(u"-ndrpdr", u"").\
         replace(u"-ndrpdr", u"").\
-        replace(u"-pdrdisc", u""). \
-        replace(u"-ndrdisc", u"").\
-        replace(u"-pdr", u""). \
-        replace(u"-ndr", u""). \
         replace(u"1t1c", u"1c").\
         replace(u"2t1c", u"1c"). \
         replace(u"2t2c", u"2c").\
         replace(u"1t1c", u"1c").\
         replace(u"2t1c", u"1c"). \
         replace(u"2t2c", u"2c").\
@@ -425,7 +461,7 @@ def _tpc_insert_data(target, src, include_tests):
     """Insert src data to the target structure.
 
     :param target: Target structure where the data is placed.
     """Insert src data to the target structure.
 
     :param target: Target structure where the data is placed.
-    :param src: Source data to be placed into the target stucture.
+    :param src: Source data to be placed into the target structure.
     :param include_tests: Which results will be included (MRR, NDR, PDR).
     :type target: list
     :type src: dict
     :param include_tests: Which results will be included (MRR, NDR, PDR).
     :type target: list
     :type src: dict
@@ -990,15 +1026,15 @@ def _generate_url(testbed, test_name):
 
     if u"1t1c" in test_name or \
         (u"-1c-" in test_name and
 
     if u"1t1c" in test_name or \
         (u"-1c-" in test_name and
-         testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv")):
+         testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv", u"2n-tx2")):
         cores = u"1t1c"
     elif u"2t2c" in test_name or \
          (u"-2c-" in test_name and
         cores = u"1t1c"
     elif u"2t2c" in test_name or \
          (u"-2c-" in test_name and
-          testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv")):
+          testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv", u"2n-tx2")):
         cores = u"2t2c"
     elif u"4t4c" in test_name or \
          (u"-4c-" in test_name and
         cores = u"2t2c"
     elif u"4t4c" in test_name or \
          (u"-4c-" in test_name and
-          testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv")):
+          testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv", u"2n-tx2")):
         cores = u"4t4c"
     elif u"2t1c" in test_name or \
          (u"-1c-" in test_name and
         cores = u"4t4c"
     elif u"2t1c" in test_name or \
          (u"-1c-" in test_name and
@@ -1031,7 +1067,7 @@ def _generate_url(testbed, test_name):
     if u"macip-iacl1s" in test_name:
         bsf = u"features-macip-iacl1"
     elif u"macip-iacl10s" in test_name:
     if u"macip-iacl1s" in test_name:
         bsf = u"features-macip-iacl1"
     elif u"macip-iacl10s" in test_name:
-        bsf = u"features-macip-iacl01"
+        bsf = u"features-macip-iacl10"
     elif u"macip-iacl50s" in test_name:
         bsf = u"features-macip-iacl50"
     elif u"iacl1s" in test_name:
     elif u"macip-iacl50s" in test_name:
         bsf = u"features-macip-iacl50"
     elif u"iacl1s" in test_name:
@@ -1058,6 +1094,10 @@ def _generate_url(testbed, test_name):
         bsf = u"udp-pps"
     elif u"-pps" in test_name and u"ethip4tcp" in test_name:
         bsf = u"tcp-pps"
         bsf = u"udp-pps"
     elif u"-pps" in test_name and u"ethip4tcp" in test_name:
         bsf = u"tcp-pps"
+    elif u"-tput" in test_name and u"ethip4udp" in test_name:
+        bsf = u"udp-tput"
+    elif u"-tput" in test_name and u"ethip4tcp" in test_name:
+        bsf = u"tcp-tput"
     elif u"udpsrcscale" in test_name:
         bsf = u"features-udp"
     elif u"iacl" in test_name:
     elif u"udpsrcscale" in test_name:
         bsf = u"features-udp"
     elif u"iacl" in test_name:
@@ -1097,6 +1137,8 @@ def _generate_url(testbed, test_name):
             domain += u"-cps"
         elif u"-pps" in test_name:
             domain += u"-pps"
             domain += u"-cps"
         elif u"-pps" in test_name:
             domain += u"-pps"
+        elif u"-tput" in test_name:
+            domain += u"-tput"
     elif u"testpmd" in test_name or u"l3fwd" in test_name:
         domain = u"dpdk"
     elif u"memif" in test_name:
     elif u"testpmd" in test_name or u"l3fwd" in test_name:
         domain = u"dpdk"
     elif u"memif" in test_name:
@@ -1125,6 +1167,8 @@ def _generate_url(testbed, test_name):
             bsf += u"-hw"
     elif u"ethip4vxlan" in test_name:
         domain = u"ip4_tunnels"
             bsf += u"-hw"
     elif u"ethip4vxlan" in test_name:
         domain = u"ip4_tunnels"
+    elif u"ethip4udpgeneve" in test_name:
+        domain = u"ip4_tunnels"
     elif u"ip4base" in test_name or u"ip4scale" in test_name:
         domain = u"ip4"
     elif u"ip6base" in test_name or u"ip6scale" in test_name:
     elif u"ip4base" in test_name or u"ip4scale" in test_name:
         domain = u"ip4"
     elif u"ip6base" in test_name or u"ip6scale" in test_name:
@@ -1244,8 +1288,8 @@ def table_perf_trending_dash_html(table, input_data):
                     u"a",
                     attrib=dict(
                         href=f"{lnk_dir}"
                     u"a",
                     attrib=dict(
                         href=f"{lnk_dir}"
-                             f"{_generate_url(table.get(u'testbed', ''), item)}"
-                             f"{lnk_sufix}"
+                        f"{_generate_url(table.get(u'testbed', ''), item)}"
+                        f"{lnk_sufix}"
                     )
                 )
                 ref.text = item
                     )
                 )
                 ref.text = item
@@ -1517,8 +1561,8 @@ def table_failed_tests_html(table, input_data):
                     u"a",
                     attrib=dict(
                         href=f"{lnk_dir}"
                     u"a",
                     attrib=dict(
                         href=f"{lnk_dir}"
-                             f"{_generate_url(table.get(u'testbed', ''), item)}"
-                             f"{lnk_sufix}"
+                        f"{_generate_url(table.get(u'testbed', ''), item)}"
+                        f"{lnk_sufix}"
                     )
                 )
                 ref.text = item
                     )
                 )
                 ref.text = item
@@ -2055,7 +2099,7 @@ def table_weekly_comparison(table, in_data):
     # Reorganize header in txt table
     txt_table = list()
     with open(txt_file_name, u"rt", encoding='utf-8') as file_handler:
     # Reorganize header in txt table
     txt_table = list()
     with open(txt_file_name, u"rt", encoding='utf-8') as file_handler:
-        for line in file_handler:
+        for line in list(file_handler):
             txt_table.append(line)
     try:
         txt_table.insert(5, txt_table.pop(2))
             txt_table.append(line)
     try:
         txt_table.insert(5, txt_table.pop(2))