Report: Add data
[csit.git] / resources / tools / presentation / generator_plots.py
index 30e2710..869d2ca 100644 (file)
@@ -372,14 +372,6 @@ def plot_perf_box_name(plot, input_data):
     # Prepare the data for the plot
     plot_title = plot.get(u"title", u"").lower()
 
-    if u"-pdr" in plot_title:
-        ttype = u"PDR"
-    elif u"-ndr" in plot_title:
-        ttype = u"NDR"
-    else:
-        raise RuntimeError(u"Wrong title. No information about test type. Add"
-                           u"'-ndr' or '-pdr' to the test title.")
-
     if u"-gbps" in plot_title:
         value = u"gbps"
         multiplier = 1e6
@@ -388,44 +380,66 @@ def plot_perf_box_name(plot, input_data):
         multiplier = 1.0
     y_vals = OrderedDict()
     test_type = u""
-    for job in data:
-        for build in job:
-            for test in build:
-                if y_vals.get(test[u"parent"], None) is None:
-                    y_vals[test[u"parent"]] = list()
-                try:
-                    if test[u"type"] in (u"NDRPDR", ):
-                        test_type = u"NDRPDR"
 
-                        y_vals[test[u"parent"]].append(
-                            test[value][ttype][u"LOWER"] * multiplier
-                        )
-
-                    elif test[u"type"] in (u"SOAK", ):
-                        y_vals[test[u"parent"]].\
-                            append(test[u"throughput"][u"LOWER"])
-                        test_type = u"SOAK"
+    for item in plot.get(u"include", tuple()):
+        reg_ex = re.compile(str(item).lower())
+        for job in data:
+            for build in job:
+                for test_id, test in build.iteritems():
+                    if not re.match(reg_ex, str(test_id).lower()):
+                        continue
+                    if y_vals.get(test[u"parent"], None) is None:
+                        y_vals[test[u"parent"]] = list()
+                    try:
+                        if test[u"type"] in (u"NDRPDR", u"CPS"):
+                            test_type = test[u"type"]
+
+                            if u"-pdr" in plot_title:
+                                ttype = u"PDR"
+                            elif u"-ndr" in plot_title:
+                                ttype = u"NDR"
+                            else:
+                                raise RuntimeError(
+                                    u"Wrong title. No information about test "
+                                    u"type. Add '-ndr' or '-pdr' to the test "
+                                    u"title."
+                                )
 
-                    elif test[u"type"] in (u"HOSTSTACK", ):
-                        if u"LDPRELOAD" in test[u"tags"]:
-                            y_vals[test[u"parent"]].append(
-                                float(test[u"result"][u"bits_per_second"]) / 1e3
-                            )
-                        elif u"VPPECHO" in test[u"tags"]:
                             y_vals[test[u"parent"]].append(
-                                (float(test[u"result"][u"client"][u"tx_data"])
-                                 * 8 / 1e3) /
-                                ((float(test[u"result"][u"client"][u"time"]) +
-                                  float(test[u"result"][u"server"][u"time"])) /
-                                 2)
+                                test[value][ttype][u"LOWER"] * multiplier
                             )
-                        test_type = u"HOSTSTACK"
 
-                    else:
-                        continue
+                        elif test[u"type"] in (u"SOAK",):
+                            y_vals[test[u"parent"]]. \
+                                append(test[u"throughput"][u"LOWER"])
+                            test_type = u"SOAK"
+
+                        elif test[u"type"] in (u"HOSTSTACK",):
+                            if u"LDPRELOAD" in test[u"tags"]:
+                                y_vals[test[u"parent"]].append(
+                                    float(
+                                        test[u"result"][u"bits_per_second"]
+                                    ) / 1e3
+                                )
+                            elif u"VPPECHO" in test[u"tags"]:
+                                y_vals[test[u"parent"]].append(
+                                    (float(
+                                        test[u"result"][u"client"][u"tx_data"]
+                                    ) * 8 / 1e3) /
+                                    ((float(
+                                        test[u"result"][u"client"][u"time"]
+                                    ) +
+                                      float(
+                                          test[u"result"][u"server"][u"time"])
+                                      ) / 2)
+                                )
+                            test_type = u"HOSTSTACK"
+
+                        else:
+                            continue
 
-                except (KeyError, TypeError):
-                    y_vals[test[u"parent"]].append(None)
+                    except (KeyError, TypeError):
+                        y_vals[test[u"parent"]].append(None)
 
     # Add None to the lists with missing data
     max_len = 0
@@ -477,6 +491,8 @@ def plot_perf_box_name(plot, input_data):
         if layout.get(u"title", None):
             if test_type in (u"HOSTSTACK", ):
                 layout[u"title"] = f"<b>Bandwidth:</b> {layout[u'title']}"
+            elif test_type in (u"CPS", ):
+                layout[u"title"] = f"<b>CPS:</b> {layout[u'title']}"
             else:
                 layout[u"title"] = f"<b>Throughput:</b> {layout[u'title']}"
         if y_max:
@@ -534,37 +550,43 @@ def plot_tsa_name(plot, input_data):
         multiplier = 1.0
 
     y_vals = OrderedDict()
-    for job in data:
-        for build in job:
-            for test in build:
-                if y_vals.get(test[u"parent"], None) is None:
-                    y_vals[test[u"parent"]] = {
-                        u"1": list(),
-                        u"2": list(),
-                        u"4": list()
-                    }
-                try:
-                    if test[u"type"] not in (u"NDRPDR",):
-                        continue
-
-                    if u"-pdr" in plot_title:
-                        ttype = u"PDR"
-                    elif u"-ndr" in plot_title:
-                        ttype = u"NDR"
-                    else:
-                        continue
-
-                    if u"1C" in test[u"tags"]:
-                        y_vals[test[u"parent"]][u"1"]. \
-                            append(test[value][ttype][u"LOWER"] * multiplier)
-                    elif u"2C" in test[u"tags"]:
-                        y_vals[test[u"parent"]][u"2"]. \
-                            append(test[value][ttype][u"LOWER"] * multiplier)
-                    elif u"4C" in test[u"tags"]:
-                        y_vals[test[u"parent"]][u"4"]. \
-                            append(test[value][ttype][u"LOWER"] * multiplier)
-                except (KeyError, TypeError):
-                    pass
+    for item in plot.get(u"include", tuple()):
+        reg_ex = re.compile(str(item).lower())
+        for job in data:
+            for build in job:
+                for test_id, test in build.iteritems():
+                    if re.match(reg_ex, str(test_id).lower()):
+                        if y_vals.get(test[u"parent"], None) is None:
+                            y_vals[test[u"parent"]] = {
+                                u"1": list(),
+                                u"2": list(),
+                                u"4": list()
+                            }
+                        try:
+                            if test[u"type"] not in (u"NDRPDR", u"CPS"):
+                                continue
+
+                            if u"-pdr" in plot_title:
+                                ttype = u"PDR"
+                            elif u"-ndr" in plot_title:
+                                ttype = u"NDR"
+                            else:
+                                continue
+
+                            if u"1C" in test[u"tags"]:
+                                y_vals[test[u"parent"]][u"1"].append(
+                                    test[value][ttype][u"LOWER"] * multiplier
+                                )
+                            elif u"2C" in test[u"tags"]:
+                                y_vals[test[u"parent"]][u"2"].append(
+                                    test[value][ttype][u"LOWER"] * multiplier
+                                )
+                            elif u"4C" in test[u"tags"]:
+                                y_vals[test[u"parent"]][u"4"].append(
+                                    test[value][ttype][u"LOWER"] * multiplier
+                                )
+                        except (KeyError, TypeError):
+                            pass
 
     if not y_vals:
         logging.warning(f"No data for the plot {plot.get(u'title', u'')}")
@@ -584,7 +606,7 @@ def plot_tsa_name(plot, input_data):
     y_max = list()
     nic_limit = 0
     lnk_limit = 0
-    pci_limit = plot[u"limits"][u"pci"][u"pci-g3-x8"]
+    pci_limit = 0
     for test_name, test_vals in y_vals.items():
         try:
             if test_vals[u"1"][1]:
@@ -668,49 +690,53 @@ def plot_tsa_name(plot, input_data):
         if limit > lnk_limit:
             lnk_limit = limit
 
+        if u"cx556a" in test_name:
+            limit = plot[u"limits"][u"pci"][u"pci-g3-x8"]
+        else:
+            limit = plot[u"limits"][u"pci"][u"pci-g3-x16"]
+        if limit > pci_limit:
+            pci_limit = limit
+
     traces = list()
     annotations = list()
     x_vals = [1, 2, 4]
 
     # Limits:
-    if u"-gbps" not in plot_title:
-        try:
-            threshold = 1.1 * max(y_max)  # 10%
-        except ValueError as err:
-            logging.error(err)
-            return
+    if u"-gbps" not in plot_title and u"-cps-" not in plot_title:
         nic_limit /= 1e6
-        traces.append(plgo.Scatter(
-            x=x_vals,
-            y=[nic_limit, ] * len(x_vals),
-            name=f"NIC: {nic_limit:.2f}Mpps",
-            showlegend=False,
-            mode=u"lines",
-            line=dict(
-                dash=u"dot",
-                color=COLORS[-1],
-                width=1),
-            hoverinfo=u"none"
-        ))
-        annotations.append(dict(
-            x=1,
-            y=nic_limit,
-            xref=u"x",
-            yref=u"y",
-            xanchor=u"left",
-            yanchor=u"bottom",
-            text=f"NIC: {nic_limit:.2f}Mpps",
-            font=dict(
-                size=14,
-                color=COLORS[-1],
-            ),
-            align=u"left",
-            showarrow=False
-        ))
-        y_max.append(nic_limit)
-
         lnk_limit /= 1e6
-        if lnk_limit < threshold:
+        pci_limit /= 1e6
+        min_limit = min((nic_limit, lnk_limit, pci_limit))
+        if nic_limit == min_limit:
+            traces.append(plgo.Scatter(
+                x=x_vals,
+                y=[nic_limit, ] * len(x_vals),
+                name=f"NIC: {nic_limit:.2f}Mpps",
+                showlegend=False,
+                mode=u"lines",
+                line=dict(
+                    dash=u"dot",
+                    color=COLORS[-1],
+                    width=1),
+                hoverinfo=u"none"
+            ))
+            annotations.append(dict(
+                x=1,
+                y=nic_limit,
+                xref=u"x",
+                yref=u"y",
+                xanchor=u"left",
+                yanchor=u"bottom",
+                text=f"NIC: {nic_limit:.2f}Mpps",
+                font=dict(
+                    size=14,
+                    color=COLORS[-1],
+                ),
+                align=u"left",
+                showarrow=False
+            ))
+            y_max.append(nic_limit)
+        elif lnk_limit == min_limit:
             traces.append(plgo.Scatter(
                 x=x_vals,
                 y=[lnk_limit, ] * len(x_vals),
@@ -719,7 +745,7 @@ def plot_tsa_name(plot, input_data):
                 mode=u"lines",
                 line=dict(
                     dash=u"dot",
-                    color=COLORS[-2],
+                    color=COLORS[-1],
                     width=1),
                 hoverinfo=u"none"
             ))
@@ -733,16 +759,13 @@ def plot_tsa_name(plot, input_data):
                 text=f"Link: {lnk_limit:.2f}Mpps",
                 font=dict(
                     size=14,
-                    color=COLORS[-2],
+                    color=COLORS[-1],
                 ),
                 align=u"left",
                 showarrow=False
             ))
             y_max.append(lnk_limit)
-
-        pci_limit /= 1e6
-        if (pci_limit < threshold and
-                (pci_limit < lnk_limit * 0.95 or lnk_limit > lnk_limit * 1.05)):
+        elif pci_limit == min_limit:
             traces.append(plgo.Scatter(
                 x=x_vals,
                 y=[pci_limit, ] * len(x_vals),
@@ -751,7 +774,7 @@ def plot_tsa_name(plot, input_data):
                 mode=u"lines",
                 line=dict(
                     dash=u"dot",
-                    color=COLORS[-3],
+                    color=COLORS[-1],
                     width=1),
                 hoverinfo=u"none"
             ))
@@ -765,7 +788,7 @@ def plot_tsa_name(plot, input_data):
                 text=f"PCIe: {pci_limit:.2f}Mpps",
                 font=dict(
                     size=14,
-                    color=COLORS[-3],
+                    color=COLORS[-1],
                 ),
                 align=u"left",
                 showarrow=False