- for job in data:
- for build in job:
- for test in build:
- for tag in test['tags']:
- groups = re.search(REGEX_CN, tag)
- if groups:
- c = str(groups.group(1))
- n = str(groups.group(2))
- break
- else:
- continue
- groups = re.search(REGEX_TEST_NAME, test["name"])
- if groups and len(groups.groups()) == 3:
- hover_name = "{chain}-{vhost}-{vm}".format(
- chain=str(groups.group(1)),
- vhost=str(groups.group(2)),
- vm=str(groups.group(3)))
- else:
- hover_name = ""
- if vals.get(c, None) is None:
- vals[c] = dict()
- if vals[c].get(n, None) is None:
- vals[c][n] = dict(name=hover_name,
- vals_r=list(),
- vals_c=list(),
- nr_r=None,
- nr_c=None,
- mean_r=None,
- mean_c=None,
- stdev_r=None,
- stdev_c=None)
- try:
- if plot["include-tests"] == "MRR":
- result = test["result"]["receive-rate"].avg
- elif plot["include-tests"] == "PDR":
- result = test["throughput"]["PDR"]["LOWER"]
- elif plot["include-tests"] == "NDR":
- result = test["throughput"]["NDR"]["LOWER"]
- else:
- result = None
- except TypeError:
- result = None
-
- if result:
- for tag in test['tags']:
- groups = re.search(REGEX_THREADS, tag)
- if groups and len(groups.groups()) == 3:
- if str(groups.group(3)) == \
- plot["reference"]["include"]:
- vals[c][n]["vals_r"].append(result)
- elif str(groups.group(3)) == \
- plot["compare"]["include"]:
- vals[c][n]["vals_c"].append(result)
- break
- if not vals:
- logging.error("No data.")
- return
-
- for key_c in vals.keys():
- txt_chains.append(key_c)
- for key_n in vals[key_c].keys():
- txt_nodes.append(key_n)
- if vals[key_c][key_n]["vals_r"]:
- vals[key_c][key_n]["nr_r"] = len(vals[key_c][key_n]["vals_r"])
- vals[key_c][key_n]["mean_r"] = \
- round(mean(vals[key_c][key_n]["vals_r"]) / 1000000, 1)
- vals[key_c][key_n]["stdev_r"] = \
- round(stdev(vals[key_c][key_n]["vals_r"]) / 1000000, 1)
- if vals[key_c][key_n]["vals_c"]:
- vals[key_c][key_n]["nr_c"] = len(vals[key_c][key_n]["vals_c"])
- vals[key_c][key_n]["mean_c"] = \
- round(mean(vals[key_c][key_n]["vals_c"]) / 1000000, 1)
- vals[key_c][key_n]["stdev_c"] = \
- round(stdev(vals[key_c][key_n]["vals_c"]) / 1000000, 1)
-
- txt_nodes = list(set(txt_nodes))
-
- txt_chains = sorted(txt_chains, key=lambda chain: int(chain))
- txt_nodes = sorted(txt_nodes, key=lambda node: int(node))
-
- chains = [i + 1 for i in range(len(txt_chains))]
- nodes = [i + 1 for i in range(len(txt_nodes))]
-
- data_r = [list() for _ in range(len(chains))]
- data_c = [list() for _ in range(len(chains))]
- diff = [list() for _ in range(len(chains))]
- for c in chains:
- for n in nodes:
- try:
- val_r = vals[txt_chains[c - 1]][txt_nodes[n - 1]]["mean_r"]
- except (KeyError, IndexError):
- val_r = None
- data_r[c - 1].append(val_r)
- try:
- val_c = vals[txt_chains[c - 1]][txt_nodes[n - 1]]["mean_c"]
- except (KeyError, IndexError):
- val_c = None
- data_c[c - 1].append(val_c)
-
- if val_c is not None and val_r:
- diff[c - 1].append(round((val_c - val_r) * 100 / val_r, 1))
- else:
- diff[c - 1].append(None)
-
- # Colorscales:
- my_green = [[0.0, 'rgb(235, 249, 242)'],
- [1.0, 'rgb(45, 134, 89)']]
-
- my_blue = [[0.0, 'rgb(236, 242, 248)'],
- [1.0, 'rgb(57, 115, 172)']]
-
- my_grey = [[0.0, 'rgb(230, 230, 230)'],
- [1.0, 'rgb(102, 102, 102)']]
-
- hovertext = list()
-
- annotations = list()
- annotations_r = list()
- annotations_c = list()
- annotations_diff = list()
-
- text = ("Test: {name}"
- "<br>{title_r}: {text_r}"
- "<br>{title_c}: {text_c}{text_diff}")
- text_r = "Thput: {val_r}; StDev: {stdev_r}; Runs: {nr_r}"
- text_c = "Thput: {val_c}; StDev: {stdev_c}; Runs: {nr_c}"
- text_diff = "<br>Relative Difference {title_c} vs. {title_r}: {diff}%"
-
- for c in range(len(txt_chains)):
- hover_line = list()
- for n in range(len(txt_nodes)):
- point = dict(
- x=n + 1,
- y=c + 1,
- xref="x",
- yref="y",
- xanchor="center",
- yanchor="middle",
- text="",
- font=dict(
- size=14,
- ),
- align="center",
- showarrow=False
- )
-
- point_text_r = "Not present"
- point_text_c = "Not present"
- point_text_diff = ""