- # Prepare the data for the plot
- y_vals = dict()
- y_tags = dict()
- for job in data:
- for build in job:
- for test in build:
- if y_vals.get(test["parent"], None) is None:
- y_tags[test["parent"]] = test.get("tags", None)
- try:
- if test["type"] in ("SOAK", ):
- y_vals[test["parent"]] = test["throughput"]
- else:
- continue
- except (KeyError, TypeError):
- y_vals[test["parent"]] = dict()
-
- # Sort the tests
- order = plot.get("sort", None)
- if order and y_tags:
- y_sorted = OrderedDict()
- y_tags_l = {s: [t.lower() for t in ts] for s, ts in y_tags.items()}
- for tag in order:
- logging.debug(tag)
- for suite, tags in y_tags_l.items():
- if "not " in tag:
- tag = tag.split(" ")[-1]
- if tag.lower() in tags:
- continue
- else:
- if tag.lower() not in tags:
+ desc = {
+ u"LAT0": u"No-load.",
+ u"PDR10": u"Low-load, 10% PDR.",
+ u"PDR50": u"Mid-load, 50% PDR.",
+ u"PDR90": u"High-load, 90% PDR.",
+ u"PDR": u"Full-load, 100% PDR.",
+ u"NDR10": u"Low-load, 10% NDR.",
+ u"NDR50": u"Mid-load, 50% NDR.",
+ u"NDR90": u"High-load, 90% NDR.",
+ u"NDR": u"Full-load, 100% NDR."
+ }
+
+ graphs = [
+ u"LAT0",
+ u"PDR10",
+ u"PDR50",
+ u"PDR90"
+ ]
+
+ file_links = plot.get(u"output-file-links", None)
+ target_links = plot.get(u"target-links", None)
+
+ for test in data:
+ try:
+ if test[u"type"] not in (u"NDRPDR",):
+ logging.warning(f"Invalid test type: {test[u'type']}")
+ continue
+ name = re.sub(REGEX_NIC, u"", test[u"parent"].
+ replace(u'-ndrpdr', u'').replace(u'2n1l-', u''))
+ try:
+ nic = re.search(REGEX_NIC, test[u"parent"]).group(1)
+ except (IndexError, AttributeError, KeyError, ValueError):
+ nic = u""
+ name_link = f"{nic}-{test[u'name']}".replace(u'-ndrpdr', u'')
+
+ logging.info(f" Generating the graph: {name_link}")
+
+ fig = plgo.Figure()
+ layout = deepcopy(plot[u"layout"])
+ xaxis_max = 0
+
+ for color, graph in enumerate(graphs):
+ for idx, direction in enumerate((u"direction1", u"direction2")):
+ xaxis = list()
+ yaxis = list()
+ hovertext = list()
+ try:
+ decoded = hdrh.histogram.HdrHistogram.decode(
+ test[u"latency"][graph][direction][u"hdrh"]
+ )
+ except hdrh.codec.HdrLengthException:
+ logging.warning(
+ f"No data for direction {(u'W-E', u'E-W')[idx % 2]}"
+ )