+ REGEX_CN = re.compile(r'^(\d*)R(\d*)C$')
+ REGEX_TEST_NAME = re.compile(r'^.*-(\d+vhost|\d+memif)-'
+ r'(\d+chain|\d+pipe)-'
+ r'(\d+vm|\d+dcr|\d+drc).*$')
+
+ txt_chains = list()
+ txt_nodes = list()
+ vals = dict()
+
+ # Transform the data
+ logging.info(" Creating the data set for the {0} '{1}'.".
+ format(plot.get("type", ""), plot.get("title", "")))
+ data = input_data.filter_data(plot, continue_on_error=True)
+ if data is None or data.empty:
+ logging.error("No data.")
+ return
+
+ 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 = "{vhost}-{chain}-{vm}".format(
+ vhost=str(groups.group(1)),
+ chain=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=list(),
+ nr=None,
+ mean=None,
+ stdev=None)
+ 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
+
+ if result:
+ vals[c][n]["vals"].append(result)
+
+ 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"]:
+ vals[key_c][key_n]["nr"] = len(vals[key_c][key_n]["vals"])
+ vals[key_c][key_n]["mean"] = \
+ round(mean(vals[key_c][key_n]["vals"]) / 1000000, 1)
+ vals[key_c][key_n]["stdev"] = \
+ round(stdev(vals[key_c][key_n]["vals"]) / 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))
+