-# Copyright (c) 2020 Cisco and/or its affiliates.
+# Copyright (c) 2021 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
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
)
data = input_data.filter_data(
table,
- params=[u"name", u"parent", u"show-run", u"type"],
+ params=[u"name", u"parent", u"telemetry-show-run", u"type"],
continue_on_error=True
)
if data.empty:
)
thead.text = u"\t"
- if tst_data.get(u"show-run", u"No Data") == u"No Data":
+ if tst_data.get(u"telemetry-show-run", None) is None or \
+ isinstance(tst_data[u"telemetry-show-run"], str):
trow = ET.SubElement(
tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
)
u"Average Vector Size"
)
- for dut_data in tst_data[u"show-run"].values():
+ for dut_data in tst_data[u"telemetry-show-run"].values():
trow = ET.SubElement(
tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
)
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
+ runtime = dict()
+ for item in dut_data[u"runtime"].get(u"data", tuple()):
+ tid = int(item[u"labels"][u"thread_id"])
+ if runtime.get(tid, None) is None:
+ runtime[tid] = dict()
+ gnode = item[u"labels"][u"graph_node"]
+ if runtime[tid].get(gnode, None) is None:
+ runtime[tid][gnode] = dict()
+ try:
+ runtime[tid][gnode][item[u"name"]] = float(item[u"value"])
+ except ValueError:
+ runtime[tid][gnode][item[u"name"]] = item[u"value"]
+
+ threads = dict({idx: list() for idx in range(len(runtime))})
+ for idx, run_data in runtime.items():
+ for gnode, gdata in run_data.items():
+ if gdata[u"vectors"] > 0:
+ clocks = gdata[u"clocks"] / gdata[u"vectors"]
+ elif gdata[u"calls"] > 0:
+ clocks = gdata[u"clocks"] / gdata[u"calls"]
+ elif gdata[u"suspends"] > 0:
+ clocks = gdata[u"clocks"] / gdata[u"suspends"]
+ else:
+ clocks = 0.0
+ if gdata[u"calls"] > 0:
+ vectors_call = gdata[u"vectors"] / gdata[u"calls"]
+ else:
+ vectors_call = 0.0
+ if int(gdata[u"calls"]) + int(gdata[u"vectors"]) + \
+ int(gdata[u"suspends"]):
+ threads[idx].append([
+ gnode,
+ int(gdata[u"calls"]),
+ int(gdata[u"vectors"]),
+ int(gdata[u"suspends"]),
+ clocks,
+ vectors_call
+ ])
+
bold = ET.SubElement(tcol, u"b")
bold.text = (
f"Host IP: {dut_data.get(u'host', '')}, "
)
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"])
)
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"]:
# Temporary solution: remove NDR results from message:
if bool(table.get(u'remove-ndr', False)):
try:
- col_data = col_data.split(u" |br| ", 1)[1]
+ col_data = col_data.split(u"\n", 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 = col_data.replace(u" |br| ", u"", 1)
+ elif column[u"data"].split(u" ")[1] in (u"conf-history", ):
+ 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:
:rtype: str
"""
test_name_mod = test_name.\
- replace(u"-ndrpdrdisc", 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").\
"""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
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
- 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
- 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
- testbed in (u"2n-skx", u"3n-skx", u"2n-clx")):
+ testbed in (u"2n-skx", u"3n-skx", u"2n-clx", u"2n-zn2")):
cores = u"2t1c"
elif u"4t2c" in test_name or \
(u"-2c-" in test_name and
- testbed in (u"2n-skx", u"3n-skx", u"2n-clx")):
+ testbed in (u"2n-skx", u"3n-skx", u"2n-clx", u"2n-zn2")):
cores = u"4t2c"
elif u"8t4c" in test_name or \
(u"-4c-" in test_name and
- testbed in (u"2n-skx", u"3n-skx", u"2n-clx")):
+ testbed in (u"2n-skx", u"3n-skx", u"2n-clx", u"2n-zn2")):
cores = u"8t4c"
else:
cores = u""
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:
bsf = u"features-oacl10"
elif u"oacl50s" in test_name:
bsf = u"features-oacl50"
+ elif u"nat44det" in test_name:
+ bsf = u"nat44det-bidir"
+ elif u"nat44ed" in test_name and u"udir" in test_name:
+ bsf = u"nat44ed-udir"
+ elif u"-cps" in test_name and u"ethip4udp" in test_name:
+ bsf = u"udp-cps"
+ elif u"-cps" in test_name and u"ethip4tcp" in test_name:
+ bsf = u"tcp-cps"
+ elif u"-pps" in test_name and u"ethip4udp" in test_name:
+ 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:
bsf = u"features"
elif u"policer" in test_name:
bsf = u"features"
+ elif u"adl" in test_name:
+ bsf = u"features"
elif u"cop" in test_name:
bsf = u"features"
elif u"nat" in test_name:
if u"114b" in test_name and u"vhost" in test_name:
domain = u"vts"
+ elif u"nat44" in test_name or u"-pps" in test_name or u"-cps" in test_name:
+ domain = u"nat44"
+ if u"nat44det" in test_name:
+ domain += u"-det-bidir"
+ else:
+ domain += u"-ed"
+ if u"udir" in test_name:
+ domain += u"-unidir"
+ elif u"-ethip4udp-" in test_name:
+ domain += u"-udp"
+ elif u"-ethip4tcp-" in test_name:
+ domain += u"-tcp"
+ if u"-cps" in test_name:
+ 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:
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:
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
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
# 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))