aboutsummaryrefslogtreecommitdiffstats
path: root/csit.infra.dash
diff options
context:
space:
mode:
Diffstat (limited to 'csit.infra.dash')
-rw-r--r--csit.infra.dash/app/cdash/comparisons/layout.py5
-rw-r--r--csit.infra.dash/app/cdash/comparisons/tables.py6
-rw-r--r--csit.infra.dash/app/cdash/coverage/layout.py4
-rw-r--r--csit.infra.dash/app/cdash/coverage/tables.py8
-rw-r--r--csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_devicebin0 -> 5726 bytes
-rw-r--r--csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_ndrpdrbin0 -> 11868 bytes
-rw-r--r--csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_hoststackbin0 -> 8303 bytes
-rw-r--r--csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_mrrbin0 -> 9704 bytes
-rw-r--r--csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_ndrpdrbin0 -> 15951 bytes
-rw-r--r--csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_soakbin0 -> 9328 bytes
-rw-r--r--csit.infra.dash/app/cdash/data/data.yaml162
-rw-r--r--csit.infra.dash/app/cdash/news/layout.py4
-rw-r--r--csit.infra.dash/app/cdash/report/graphs.py55
-rw-r--r--csit.infra.dash/app/cdash/report/layout.py4
-rw-r--r--csit.infra.dash/app/cdash/search/layout.py9
-rw-r--r--csit.infra.dash/app/cdash/search/tables.py3
-rw-r--r--csit.infra.dash/app/cdash/stats/graphs.py6
-rw-r--r--csit.infra.dash/app/cdash/stats/layout.py17
-rw-r--r--csit.infra.dash/app/cdash/stats/layout.yaml4
-rw-r--r--csit.infra.dash/app/cdash/trending/graphs.py45
-rw-r--r--csit.infra.dash/app/cdash/trending/layout.py4
-rw-r--r--csit.infra.dash/app/cdash/trending/layout.yaml6
-rw-r--r--csit.infra.dash/app/cdash/utils/constants.py2
-rw-r--r--csit.infra.dash/app/cdash/utils/telemetry_data.py7
-rw-r--r--csit.infra.dash/app/cdash/utils/utils.py68
-rw-r--r--csit.infra.dash/app/requirements.txt82
26 files changed, 368 insertions, 133 deletions
diff --git a/csit.infra.dash/app/cdash/comparisons/layout.py b/csit.infra.dash/app/cdash/comparisons/layout.py
index 57a1c2a1b4..735f199158 100644
--- a/csit.infra.dash/app/cdash/comparisons/layout.py
+++ b/csit.infra.dash/app/cdash/comparisons/layout.py
@@ -33,7 +33,8 @@ from ..utils.control_panel import ControlPanel
from ..utils.trigger import Trigger
from ..utils.url_processing import url_decode
from ..utils.utils import generate_options, gen_new_url, navbar_report, \
- filter_table_data, sort_table_data, show_iterative_graph_data, show_tooltip
+ filter_table_data, sort_table_data, show_iterative_graph_data, \
+ show_tooltip, get_topo_arch
from .tables import comparison_table
from ..report.graphs import graph_iterative
@@ -124,7 +125,7 @@ class Layout:
lst_job = row["job"].split("-")
dut = lst_job[1]
dver = f"{row['release']}-{row['dut_version']}"
- tbed = "-".join(lst_job[-2:])
+ tbed = get_topo_arch(lst_job)
lst_test_id = row["test_id"].split(".")
suite = lst_test_id[-2].replace("2n1l-", "").replace("1n1l-", "").\
diff --git a/csit.infra.dash/app/cdash/comparisons/tables.py b/csit.infra.dash/app/cdash/comparisons/tables.py
index a951ab85e9..fa92f3da7f 100644
--- a/csit.infra.dash/app/cdash/comparisons/tables.py
+++ b/csit.infra.dash/app/cdash/comparisons/tables.py
@@ -232,7 +232,7 @@ def comparison_table(
:returns: A list of simple items.
:rtype: list
"""
- l_infra = sel["infra"].split("-")
+ l_infra = sel["infra"].rsplit("-", maxsplit=2)
selection = list()
for core in sel["core"]:
for fsize in sel["frmsize"]:
@@ -240,8 +240,8 @@ def comparison_table(
selection.append({
"dut": sel["dut"],
"dutver": sel["dutver"],
- "tbed": f"{l_infra[0]}-{l_infra[1]}",
- "nic": l_infra[2],
+ "tbed": l_infra[0],
+ "nic": l_infra[1],
"driver": l_infra[-1].replace("_", "-"),
"core": core,
"frmsize": fsize,
diff --git a/csit.infra.dash/app/cdash/coverage/layout.py b/csit.infra.dash/app/cdash/coverage/layout.py
index b8fa0236a5..7442891198 100644
--- a/csit.infra.dash/app/cdash/coverage/layout.py
+++ b/csit.infra.dash/app/cdash/coverage/layout.py
@@ -32,7 +32,7 @@ from ..utils.constants import Constants as C
from ..utils.control_panel import ControlPanel
from ..utils.trigger import Trigger
from ..utils.utils import label, gen_new_url, generate_options, navbar_report, \
- show_tooltip
+ show_tooltip, get_topo_arch
from ..utils.url_processing import url_decode
from .tables import coverage_tables, select_coverage_data
@@ -96,7 +96,7 @@ class Layout:
lst_job = row["job"].split("-")
dut = lst_job[1]
d_ver = row["dut_version"]
- tbed = "-".join(lst_job[-2:])
+ tbed = get_topo_arch(lst_job)
lst_test_id = row["test_id"].split(".")
if dut == "dpdk":
area = "dpdk"
diff --git a/csit.infra.dash/app/cdash/coverage/tables.py b/csit.infra.dash/app/cdash/coverage/tables.py
index 84adb091a1..d38e51e243 100644
--- a/csit.infra.dash/app/cdash/coverage/tables.py
+++ b/csit.infra.dash/app/cdash/coverage/tables.py
@@ -52,9 +52,9 @@ def select_coverage_data(
l_data = list()
# Filter data selected by the user.
- phy = selected["phy"].split("-")
- if len(phy) == 4:
- topo, arch, nic, drv = phy
+ phy = selected["phy"].rsplit("-", maxsplit=2)
+ if len(phy) == 3:
+ topo_arch, nic, drv = phy
drv_str = "" if drv == "dpdk" else drv.replace("_", "-")
else:
return l_data, None
@@ -66,7 +66,7 @@ def select_coverage_data(
(data["release"] == selected["rls"])
)])
df = df[
- (df.job.str.endswith(f"{topo}-{arch}")) &
+ (df.job.str.endswith(topo_arch)) &
(df.test_id.str.contains(
f"^.*\.{selected['area']}\..*{nic}.*{drv_str}.*$",
regex=True
diff --git a/csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_device b/csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_device
new file mode 100644
index 0000000000..011ebba41f
--- /dev/null
+++ b/csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_device
Binary files differ
diff --git a/csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_ndrpdr b/csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_ndrpdr
new file mode 100644
index 0000000000..06bc618bea
--- /dev/null
+++ b/csit.infra.dash/app/cdash/data/_metadata/coverage_rls2410_ndrpdr
Binary files differ
diff --git a/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_hoststack b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_hoststack
new file mode 100644
index 0000000000..1e9c708253
--- /dev/null
+++ b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_hoststack
Binary files differ
diff --git a/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_mrr b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_mrr
new file mode 100644
index 0000000000..ced78967c5
--- /dev/null
+++ b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_mrr
Binary files differ
diff --git a/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_ndrpdr b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_ndrpdr
new file mode 100644
index 0000000000..cf2b8a116b
--- /dev/null
+++ b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_ndrpdr
Binary files differ
diff --git a/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_soak b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_soak
new file mode 100644
index 0000000000..4502ca4f59
--- /dev/null
+++ b/csit.infra.dash/app/cdash/data/_metadata/iterative_rls2410_soak
Binary files differ
diff --git a/csit.infra.dash/app/cdash/data/data.yaml b/csit.infra.dash/app/cdash/data/data.yaml
index c1b45536b7..36fb450587 100644
--- a/csit.infra.dash/app/cdash/data/data.yaml
+++ b/csit.infra.dash/app/cdash/data/data.yaml
@@ -539,3 +539,165 @@
- passed
- test_id
- version
+- data_type: iterative
+ partition: test_type
+ partition_name: mrr
+ release: rls2410
+ path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/iterative_rls2410
+ schema: iterative_rls2410_mrr
+ columns:
+ - job
+ - build
+ - dut_type
+ - dut_version
+ - tg_type
+ - hosts
+ - start_time
+ - passed
+ - test_id
+ - version
+ - result_receive_rate_rate_avg
+ - result_receive_rate_rate_stdev
+ - result_receive_rate_rate_unit
+ - result_receive_rate_bandwidth_avg
+ - result_receive_rate_bandwidth_stdev
+ - result_receive_rate_bandwidth_unit
+- data_type: iterative
+ partition: test_type
+ partition_name: ndrpdr
+ release: rls2410
+ path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/iterative_rls2410
+ schema: iterative_rls2410_ndrpdr
+ columns:
+ - job
+ - build
+ - dut_type
+ - dut_version
+ - tg_type
+ - hosts
+ - start_time
+ - passed
+ - test_id
+ - version
+ - result_pdr_lower_rate_unit
+ - result_pdr_lower_rate_value
+ - result_ndr_lower_rate_unit
+ - result_ndr_lower_rate_value
+ - result_pdr_lower_bandwidth_unit
+ - result_pdr_lower_bandwidth_value
+ - result_ndr_lower_bandwidth_unit
+ - result_ndr_lower_bandwidth_value
+ - result_latency_reverse_pdr_90_hdrh
+ - result_latency_reverse_pdr_50_hdrh
+ - result_latency_reverse_pdr_10_hdrh
+ - result_latency_reverse_pdr_0_hdrh
+ - result_latency_forward_pdr_90_hdrh
+ - result_latency_forward_pdr_50_avg
+ - result_latency_forward_pdr_50_hdrh
+ - result_latency_forward_pdr_50_unit
+ - result_latency_forward_pdr_10_hdrh
+ - result_latency_forward_pdr_0_hdrh
+- data_type: iterative
+ partition: test_type
+ partition_name: hoststack
+ release: rls2410
+ path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/iterative_rls2410
+ schema: iterative_rls2410_hoststack
+ columns:
+ - job
+ - build
+ - dut_type
+ - dut_version
+ - hosts
+ - tg_type
+ - result_bandwidth_unit
+ - result_bandwidth_value
+ - result_rate_unit
+ - result_rate_value
+ - start_time
+ - passed
+ - test_id
+ - version
+- data_type: iterative
+ partition: test_type
+ partition_name: soak
+ release: rls2410
+ path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/iterative_rls2410
+ schema: iterative_rls2410_soak
+ columns:
+ - job
+ - build
+ - dut_type
+ - dut_version
+ - hosts
+ - tg_type
+ - result_critical_rate_lower_bandwidth_unit
+ - result_critical_rate_lower_bandwidth_value
+ - result_critical_rate_lower_rate_unit
+ - result_critical_rate_lower_rate_value
+ - start_time
+ - passed
+ - telemetry
+ - test_id
+ - version
+- data_type: coverage
+ partition: test_type
+ partition_name: ndrpdr
+ release: rls2410
+ path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/coverage_rls2410
+ schema: coverage_rls2410_ndrpdr
+ columns:
+ - job
+ - build
+ - dut_type
+ - dut_version
+ - tg_type
+ - start_time
+ - passed
+ - test_id
+ - version
+ - result_pdr_lower_rate_unit
+ - result_pdr_lower_rate_value
+ - result_ndr_lower_rate_value
+ - result_pdr_lower_bandwidth_value
+ - result_ndr_lower_bandwidth_value
+ - result_latency_reverse_pdr_90_hdrh
+ - result_latency_reverse_pdr_50_hdrh
+ - result_latency_reverse_pdr_10_hdrh
+ - result_latency_forward_pdr_90_hdrh
+ - result_latency_forward_pdr_50_hdrh
+ - result_latency_forward_pdr_10_hdrh
+- data_type: coverage
+ partition: test_type
+ partition_name: mrr
+ release: rls2410
+ path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/coverage_rls2410
+ schema: iterative_rls2410_mrr
+ columns:
+ - job
+ - build
+ - dut_type
+ - dut_version
+ - tg_type
+ - start_time
+ - passed
+ - test_id
+ - version
+ - result_receive_rate_rate_avg
+ - result_receive_rate_rate_stdev
+ - result_receive_rate_rate_unit
+- data_type: coverage
+ partition: test_type
+ partition_name: device
+ release: rls2410
+ path: s3://fdio-docs-s3-cloudfront-index/csit/parquet/coverage_rls2410
+ schema: coverage_rls2410_device
+ columns:
+ - job
+ - build
+ - dut_type
+ - dut_version
+ - tg_type
+ - passed
+ - test_id
+ - version
diff --git a/csit.infra.dash/app/cdash/news/layout.py b/csit.infra.dash/app/cdash/news/layout.py
index ba4fc85163..8fe3d35e6a 100644
--- a/csit.infra.dash/app/cdash/news/layout.py
+++ b/csit.infra.dash/app/cdash/news/layout.py
@@ -24,7 +24,7 @@ from dash import callback_context
from dash import Input, Output, State
from ..utils.constants import Constants as C
-from ..utils.utils import gen_new_url, navbar_trending
+from ..utils.utils import gen_new_url, navbar_trending, get_topo_arch
from ..utils.anomalies import classify_anomalies
from ..utils.url_processing import url_decode
from .tables import table_summary
@@ -78,7 +78,7 @@ class Layout:
d_job_info["dut"].append(lst_job[1])
d_job_info["ttype"].append(lst_job[3])
d_job_info["cadence"].append(lst_job[4])
- d_job_info["tbed"].append("-".join(lst_job[-2:]))
+ d_job_info["tbed"].append(get_topo_arch(lst_job))
self.job_info = pd.DataFrame.from_dict(d_job_info)
# Pre-process the data:
diff --git a/csit.infra.dash/app/cdash/report/graphs.py b/csit.infra.dash/app/cdash/report/graphs.py
index e13ec54a89..5e57713f11 100644
--- a/csit.infra.dash/app/cdash/report/graphs.py
+++ b/csit.infra.dash/app/cdash/report/graphs.py
@@ -24,7 +24,7 @@ from ..utils.constants import Constants as C
from ..utils.utils import get_color, get_hdrh_latencies
-def select_iterative_data(data: pd.DataFrame, itm:dict) -> pd.DataFrame:
+def select_iterative_data(data: pd.DataFrame, itm: dict) -> pd.DataFrame:
"""Select the data for graphs and tables from the provided data frame.
:param data: Data frame with data for graphs and tables.
@@ -36,9 +36,9 @@ def select_iterative_data(data: pd.DataFrame, itm:dict) -> pd.DataFrame:
:rtype: pandas.DataFrame
"""
- phy = itm["phy"].split("-")
- if len(phy) == 4:
- topo, arch, nic, drv = phy
+ phy = itm["phy"].rsplit("-", maxsplit=2)
+ if len(phy) == 3:
+ topo_arch, nic, drv = phy
if drv == "dpdk":
drv = ""
else:
@@ -61,12 +61,12 @@ def select_iterative_data(data: pd.DataFrame, itm:dict) -> pd.DataFrame:
(data["passed"] == True)
)]
- core = str() if itm["dut"] == "trex" else f"{itm['core']}"
+ core = str() if itm["dut"] == "trex" else itm["core"]
ttype = "ndrpdr" if itm["testtype"] in ("ndr", "pdr") else itm["testtype"]
regex_test = \
f"^.*[.|-]{nic}.*{itm['framesize']}-{core}-{drv}{itm['test']}-{ttype}$"
df = df[
- (df.job.str.endswith(f"{topo}-{arch}")) &
+ (df.job.str.endswith(topo_arch)) &
(df.dut_version.str.contains(itm["dutver"].replace(".r", "-r").\
replace("rls", "release"))) &
(df.test_id.str.contains(regex_test, regex=True))
@@ -96,16 +96,9 @@ def graph_iterative(data: pd.DataFrame, sel: list, layout: dict,
:rtype: tuple(plotly.graph_objects.Figure, plotly.graph_objects.Figure)
"""
- def get_y_values(data, y_data_max, param, norm_factor, release=str(),
+ def get_y_values(data, y_data_max, param, norm_factor,
remove_outliers=False):
- if param == "result_receive_rate_rate_values":
- if release in ("rls2402", "rls2406", "rls2410"):
- y_vals_raw = data["result_receive_rate_rate_avg"].to_list()
- else:
- y_vals_raw = data[param].to_list()[0]
- else:
- y_vals_raw = data[param].to_list()
- y_data = [(y * norm_factor) for y in y_vals_raw]
+ y_data = [(y * norm_factor) for y in data[param].to_list()]
if remove_outliers:
try:
@@ -146,9 +139,9 @@ def graph_iterative(data: pd.DataFrame, sel: list, layout: dict,
if itm_data.empty:
continue
- phy = itm["phy"].split("-")
- topo_arch = f"{phy[0]}-{phy[1]}" if len(phy) == 4 else str()
- norm_factor = (C.NORM_FREQUENCY / C.FREQUENCY[topo_arch]) \
+ phy = itm["phy"].rsplit("-", maxsplit=2)
+ topo_arch = phy[0] if len(phy) == 3 else str()
+ norm_factor = (C.NORM_FREQUENCY / C.FREQUENCY.get(topo_arch, 1.0)) \
if normalize else 1.0
if itm["area"] == "hoststack":
@@ -163,7 +156,6 @@ def graph_iterative(data: pd.DataFrame, sel: list, layout: dict,
y_tput_max,
C.VALUE_ITER[ttype],
norm_factor,
- itm["rls"],
remove_outliers
)
@@ -181,28 +173,19 @@ def graph_iterative(data: pd.DataFrame, sel: list, layout: dict,
)
}
- if itm["testtype"] == "mrr" and itm["rls"] == "rls2310":
- trial_run = "trial"
- metadata["csit-ref"] = (
- f"{itm_data['job'].to_list()[0]}/",
- f"{itm_data['build'].to_list()[0]}"
- )
- customdata = [{"metadata": metadata}, ] * nr_of_samples
- else:
- trial_run = "run"
- for _, row in itm_data.iterrows():
- metadata["csit-ref"] = f"{row['job']}/{row['build']}"
- try:
- metadata["hosts"] = ", ".join(row["hosts"])
- except (KeyError, TypeError):
- pass
- customdata.append({"metadata": deepcopy(metadata)})
+ for _, row in itm_data.iterrows():
+ metadata["csit-ref"] = f"{row['job']}/{row['build']}"
+ try:
+ metadata["hosts"] = ", ".join(row["hosts"])
+ except (KeyError, TypeError):
+ pass
+ customdata.append({"metadata": deepcopy(metadata)})
tput_kwargs = dict(
y=y_data,
name=(
f"{idx + 1}. "
f"({nr_of_samples:02d} "
- f"{trial_run}{'s' if nr_of_samples > 1 else ''}) "
+ f"run{'s' if nr_of_samples > 1 else ''}) "
f"{itm['id']}"
),
hoverinfo=u"y+name",
diff --git a/csit.infra.dash/app/cdash/report/layout.py b/csit.infra.dash/app/cdash/report/layout.py
index 2d325b0447..cd16bfbca0 100644
--- a/csit.infra.dash/app/cdash/report/layout.py
+++ b/csit.infra.dash/app/cdash/report/layout.py
@@ -32,7 +32,7 @@ from ..utils.constants import Constants as C
from ..utils.control_panel import ControlPanel
from ..utils.trigger import Trigger
from ..utils.utils import show_tooltip, label, sync_checklists, gen_new_url, \
- generate_options, get_list_group_items, navbar_report, \
+ generate_options, get_list_group_items, navbar_report, get_topo_arch, \
show_iterative_graph_data
from ..utils.url_processing import url_decode
from .graphs import graph_iterative, select_iterative_data
@@ -122,7 +122,7 @@ class Layout:
lst_job = row["job"].split("-")
dut = lst_job[1]
d_ver = row["dut_version"]
- tbed = "-".join(lst_job[-2:])
+ tbed = get_topo_arch(lst_job)
lst_test_id = row["test_id"].split(".")
if dut == "dpdk":
area = "dpdk"
diff --git a/csit.infra.dash/app/cdash/search/layout.py b/csit.infra.dash/app/cdash/search/layout.py
index aa4dd53d5b..8dd244a3c1 100644
--- a/csit.infra.dash/app/cdash/search/layout.py
+++ b/csit.infra.dash/app/cdash/search/layout.py
@@ -33,7 +33,7 @@ from ..utils.control_panel import ControlPanel
from ..utils.trigger import Trigger
from ..utils.utils import gen_new_url, generate_options, navbar_trending, \
filter_table_data, sort_table_data, show_trending_graph_data, \
- show_iterative_graph_data, show_tooltip
+ show_iterative_graph_data, show_tooltip, get_topo_arch
from ..utils.url_processing import url_decode
from .tables import search_table
from ..coverage.tables import coverage_tables
@@ -110,7 +110,7 @@ class Layout:
l_id = row["test_id"].split(".")
suite = l_id[-2].replace("2n1l-", "").replace("1n1l-", "").\
replace("2n-", "")
- tb = "-".join(row["job"].split("-")[-2:])
+ tb = get_topo_arch(row["job"].split("-"))
nic = suite.split("-")[0]
for driver in C.DRIVERS:
if driver in suite:
@@ -644,7 +644,7 @@ class Layout:
"release-dis": C.STYLE_DONT_DISPLAY,
"release-val": str(),
"help-dis": disabled,
- "help-val": "<testbed> <nic> <driver> " + \
+ "help-val": "<topo> <arch> <nic> <driver> " + \
"<framesize> <cores> <test>",
"search-dis": disabled,
"search-val": str()
@@ -664,7 +664,7 @@ class Layout:
ctrl_panel.set({
"release-val": trigger.value,
"help-dis": C.STYLE_DISPLAY,
- "help-val": "<DUT version> <testbed> <nic> " + \
+ "help-val": "<DUT version> <topo> <arch> <nic> " + \
"<driver> <framesize> <core> <test>",
"search-dis": C.STYLE_DISPLAY,
"search-val": str()
@@ -758,7 +758,6 @@ class Layout:
(data["dut_version"] == dutver) &
(data["release"] == rls)
)])
-
df = df[df.full_id.str.contains(
f".*{tb}.*{nic}.*{test_name}",
regex=True
diff --git a/csit.infra.dash/app/cdash/search/tables.py b/csit.infra.dash/app/cdash/search/tables.py
index a5ffd76d3d..3492fba16f 100644
--- a/csit.infra.dash/app/cdash/search/tables.py
+++ b/csit.infra.dash/app/cdash/search/tables.py
@@ -18,6 +18,7 @@
import pandas as pd
from ..utils.constants import Constants as C
+from ..utils.utils import get_topo_arch
def select_search_data(data: pd.DataFrame, selection: list) -> pd.DataFrame:
@@ -80,7 +81,7 @@ def search_table(data: pd.DataFrame, selection: list) -> pd.DataFrame:
l_id = row["test_id"].split(".")
suite = l_id[-2].replace("2n1l-", "").replace("1n1l-", "").\
replace("2n-", "")
- l_tb.append("-".join(row["job"].split("-")[-2:]))
+ l_tb.append(get_topo_arch(row["job"].split("-")))
l_nic.append(suite.split("-")[0])
if selection["datatype"] != "trending":
l_dutver.append(row["dut_version"])
diff --git a/csit.infra.dash/app/cdash/stats/graphs.py b/csit.infra.dash/app/cdash/stats/graphs.py
index 4b25396680..61eef41115 100644
--- a/csit.infra.dash/app/cdash/stats/graphs.py
+++ b/csit.infra.dash/app/cdash/stats/graphs.py
@@ -17,6 +17,9 @@
import plotly.graph_objects as go
import pandas as pd
+from datetime import datetime
+from pytz import UTC
+
from ..utils.constants import Constants as C
@@ -86,6 +89,7 @@ def graph_statistics(df: pd.DataFrame, job: str, layout: dict) -> tuple:
)
)
+ x_range = [data["start_time"][0], datetime.now(tz=UTC).strftime("%Y-%m-%d")]
tickvals = [0, ]
step = max(data["duration"]) / 5
for i in range(5):
@@ -97,6 +101,7 @@ def graph_statistics(df: pd.DataFrame, job: str, layout: dict) -> tuple:
f"{(val // 3600):02d}:{((val % 3600) // 60):02d}" \
for val in tickvals
]
+ layout_duration["xaxis"]["range"] = x_range
fig_duration.update_layout(layout_duration)
# Passed / failed:
@@ -124,6 +129,7 @@ def graph_statistics(df: pd.DataFrame, job: str, layout: dict) -> tuple:
)
layout_pf = layout.get("plot-stats-passed", dict())
if layout_pf:
+ layout_pf["xaxis"]["range"] = x_range
fig_passed.update_layout(layout_pf)
return fig_passed, fig_duration
diff --git a/csit.infra.dash/app/cdash/stats/layout.py b/csit.infra.dash/app/cdash/stats/layout.py
index 6f7031aedc..4aae11a06b 100644
--- a/csit.infra.dash/app/cdash/stats/layout.py
+++ b/csit.infra.dash/app/cdash/stats/layout.py
@@ -29,7 +29,8 @@ from yaml import load, FullLoader, YAMLError
from ..utils.constants import Constants as C
from ..utils.control_panel import ControlPanel
from ..utils.utils import show_tooltip, gen_new_url, get_ttypes, get_cadences, \
- get_test_beds, get_job, generate_options, set_job_params, navbar_trending
+ get_test_beds, get_job, generate_options, set_job_params, navbar_trending, \
+ get_url_job, get_url_logs, get_topo_arch
from ..utils.url_processing import url_decode
from .graphs import graph_statistics, select_data
@@ -92,13 +93,12 @@ class Layout:
"tbed": list()
}
for job in jobs:
- idx = -3 if "-x-" in job else -2
lst_job = job.split("-")
d_job_info["job"].append(job)
d_job_info["dut"].append(lst_job[1])
d_job_info["ttype"].append(lst_job[3])
d_job_info["cadence"].append(lst_job[4])
- d_job_info["tbed"].append("-".join(lst_job[idx:]))
+ d_job_info["tbed"].append(get_topo_arch(lst_job))
self._job_info = pd.DataFrame.from_dict(d_job_info)
self._default = set_job_params(self._job_info, d_job_info["job"][0])
@@ -197,7 +197,7 @@ class Layout:
"dd-tbeds-value": self._default["tbed"],
"al-job-children": html.A(
self._default["job"],
- href=f"{C.URL_CICD}{self._default['job']}",
+ href=get_url_job(self._default["job"]),
target="_blank"
)
}
@@ -631,10 +631,7 @@ class Layout:
"dd-tbeds-value": job_params["tbed"],
"al-job-children": html.A(
self._default["job"],
- href=(
- f"{C.URL_CICD}"
- f"{self._default['job']}"
- ),
+ href=get_url_job(self._default["job"]),
target="_blank"
)
},
@@ -655,7 +652,7 @@ class Layout:
{
"al-job-children": html.A(
job,
- href=f"{C.URL_CICD}{job}",
+ href=get_url_job(job),
target="_blank"
)
}
@@ -785,7 +782,7 @@ class Layout:
dbc.Badge(lst_itm[0]),
html.A(
lst_itm[1],
- href=f"{C.URL_LOGS}{lst_itm[1]}",
+ href=get_url_logs(lst_itm[1]),
target="_blank"
)
])
diff --git a/csit.infra.dash/app/cdash/stats/layout.yaml b/csit.infra.dash/app/cdash/stats/layout.yaml
index 488654640f..70ba940910 100644
--- a/csit.infra.dash/app/cdash/stats/layout.yaml
+++ b/csit.infra.dash/app/cdash/stats/layout.yaml
@@ -15,7 +15,7 @@ plot-stats-passed:
xaxis:
title: 'Date [MMDD]'
type: "date"
- autorange: True
+ autorange: False
fixedrange: False
showgrid: True
gridcolor: "rgb(238, 238, 238)"
@@ -56,7 +56,7 @@ plot-stats-duration:
xaxis:
title: 'Date [MMDD]'
type: "date"
- autorange: True
+ autorange: False
fixedrange: False
showgrid: True
gridcolor: "rgb(238, 238, 238)"
diff --git a/csit.infra.dash/app/cdash/trending/graphs.py b/csit.infra.dash/app/cdash/trending/graphs.py
index 10eb392648..512a9d8de9 100644
--- a/csit.infra.dash/app/cdash/trending/graphs.py
+++ b/csit.infra.dash/app/cdash/trending/graphs.py
@@ -19,6 +19,8 @@ import plotly.graph_objects as go
import pandas as pd
from numpy import nan
+from datetime import datetime
+from pytz import UTC
from ..utils.constants import Constants as C
from ..utils.utils import get_color, get_hdrh_latencies
@@ -37,9 +39,9 @@ def select_trending_data(data: pd.DataFrame, itm: dict) -> pd.DataFrame:
:rtype: pandas.DataFrame
"""
- phy = itm["phy"].split("-")
- if len(phy) == 4:
- topo, arch, nic, drv = phy
+ phy = itm["phy"].rsplit("-", maxsplit=2)
+ if len(phy) == 3:
+ topo_arch, nic, drv = phy
if drv == "dpdk":
drv = ""
else:
@@ -60,8 +62,8 @@ def select_trending_data(data: pd.DataFrame, itm: dict) -> pd.DataFrame:
(data["test_type"] == test_type) &
(data["passed"] == True)
)]
- df = df[df.job.str.endswith(f"{topo}-{arch}")]
- core = str() if itm["dut"] == "trex" else f"{itm['core']}"
+ df = df[df.job.str.endswith(topo_arch)]
+ core = str() if itm["dut"] == "trex" else itm["core"]
ttype = "ndrpdr" if itm["testtype"] in ("ndr", "pdr") else itm["testtype"]
df = df[df.test_id.str.contains(
f"^.*[.|-]{nic}.*{itm['framesize']}-{core}-{drv}{itm['test']}-{ttype}$",
@@ -237,10 +239,17 @@ def graph_trending(
hosts = f"<br>hosts: {', '.join(row['hosts'])}"
except (KeyError, TypeError):
hosts = str()
+
+ for drv in C.DRIVERS:
+ if drv in name_lst:
+ split_idx = name_lst.index(drv) + 1
+ break
+ else:
+ split_idx = 5
hover_itm = (
f"dut: {name_lst[0]}<br>"
- f"infra: {'-'.join(name_lst[1:5])}<br>"
- f"test: {'-'.join(name_lst[5:])}<br>"
+ f"infra: {'-'.join(name_lst[1:split_idx])}<br>"
+ f"test: {'-'.join(name_lst[split_idx:])}<br>"
f"date: {row['start_time'].strftime('%Y-%m-%d %H:%M:%S')}<br>"
f"{h_tput}{h_tput_trials}{h_band}{h_band_trials}{h_lat}"
f"{row['dut_type']}-ref: {row['dut_version']}<br>"
@@ -446,15 +455,17 @@ def graph_trending(
fig_tput = None
fig_lat = None
fig_band = None
+ start_times = list()
y_units = set()
for idx, itm in enumerate(sel):
df = select_trending_data(data, itm)
if df is None or df.empty:
continue
+ start_times.append(df["start_time"][0])
if normalize:
- phy = itm["phy"].split("-")
- topo_arch = f"{phy[0]}-{phy[1]}" if len(phy) == 4 else str()
+ phy = itm["phy"].rsplit("-", maxsplit=2)
+ topo_arch = phy[0] if len(phy) == 3 else str()
norm_factor = (C.NORM_FREQUENCY / C.FREQUENCY.get(topo_arch, 1.0)) \
if topo_arch else 1.0
else:
@@ -521,15 +532,21 @@ def graph_trending(
y_units.update(units)
+ x_range = [min(start_times), datetime.now(tz=UTC).strftime("%Y-%m-%d")]
if fig_tput:
- fig_layout = layout.get("plot-trending-tput", dict())
- fig_layout["yaxis"]["title"] = \
+ layout_tput = layout.get("plot-trending-tput", dict())
+ layout_tput["yaxis"]["title"] = \
f"Throughput [{'|'.join(sorted(y_units))}]"
- fig_tput.update_layout(fig_layout)
+ layout_tput["xaxis"]["range"] = x_range
+ fig_tput.update_layout(layout_tput)
if fig_band:
- fig_band.update_layout(layout.get("plot-trending-bandwidth", dict()))
+ layout_band = layout.get("plot-trending-bandwidth", dict())
+ layout_band["xaxis"]["range"] = x_range
+ fig_band.update_layout(layout_band)
if fig_lat:
- fig_lat.update_layout(layout.get("plot-trending-lat", dict()))
+ layout_lat = layout.get("plot-trending-lat", dict())
+ layout_lat["xaxis"]["range"] = x_range
+ fig_lat.update_layout(layout_lat)
return fig_tput, fig_band, fig_lat
diff --git a/csit.infra.dash/app/cdash/trending/layout.py b/csit.infra.dash/app/cdash/trending/layout.py
index c844f73b65..1e2d4cdbd2 100644
--- a/csit.infra.dash/app/cdash/trending/layout.py
+++ b/csit.infra.dash/app/cdash/trending/layout.py
@@ -34,7 +34,7 @@ from ..utils.control_panel import ControlPanel
from ..utils.trigger import Trigger
from ..utils.telemetry_data import TelemetryData
from ..utils.utils import show_tooltip, label, sync_checklists, gen_new_url, \
- generate_options, get_list_group_items, navbar_trending, \
+ generate_options, get_list_group_items, navbar_trending, get_topo_arch, \
show_trending_graph_data
from ..utils.url_processing import url_decode
from .graphs import graph_trending, select_trending_data, graph_tm_trending
@@ -116,7 +116,7 @@ class Layout:
for _, row in self._data[cols].drop_duplicates().iterrows():
lst_job = row["job"].split("-")
dut = lst_job[1]
- tbed = "-".join(lst_job[-2:])
+ tbed = get_topo_arch(lst_job)
lst_test = row["test_id"].split(".")
if dut == "dpdk":
area = "dpdk"
diff --git a/csit.infra.dash/app/cdash/trending/layout.yaml b/csit.infra.dash/app/cdash/trending/layout.yaml
index e4fcd29260..948ca9372b 100644
--- a/csit.infra.dash/app/cdash/trending/layout.yaml
+++ b/csit.infra.dash/app/cdash/trending/layout.yaml
@@ -16,7 +16,7 @@ plot-trending-tput:
xaxis:
title: 'Date [MMDD]'
type: "date"
- autorange: True
+ autorange: False
fixedrange: False
showgrid: True
gridcolor: "rgb(238, 238, 238)"
@@ -56,7 +56,7 @@ plot-trending-bandwidth:
xaxis:
title: 'Date [MMDD]'
type: "date"
- autorange: True
+ autorange: False
fixedrange: False
showgrid: True
gridcolor: "rgb(238, 238, 238)"
@@ -96,7 +96,7 @@ plot-trending-lat:
xaxis:
title: 'Date [MMDD]'
type: "date"
- autorange: True
+ autorange: False
fixedrange: False
showgrid: True
gridcolor: "rgb(238, 238, 238)"
diff --git a/csit.infra.dash/app/cdash/utils/constants.py b/csit.infra.dash/app/cdash/utils/constants.py
index 3b6e125d8e..444ccd3981 100644
--- a/csit.infra.dash/app/cdash/utils/constants.py
+++ b/csit.infra.dash/app/cdash/utils/constants.py
@@ -331,7 +331,7 @@ class Constants:
}
VALUE_ITER = {
- "mrr": "result_receive_rate_rate_values",
+ "mrr": "result_receive_rate_rate_avg",
"ndr": "result_ndr_lower_rate_value",
"pdr": "result_pdr_lower_rate_value",
"mrr-bandwidth": "result_receive_rate_bandwidth_avg",
diff --git a/csit.infra.dash/app/cdash/utils/telemetry_data.py b/csit.infra.dash/app/cdash/utils/telemetry_data.py
index c63ee0057a..d3a114c596 100644
--- a/csit.infra.dash/app/cdash/utils/telemetry_data.py
+++ b/csit.infra.dash/app/cdash/utils/telemetry_data.py
@@ -283,8 +283,11 @@ class TelemetryData:
for _, row in self._unique_metrics_labels.iterrows():
if _is_selected(row["labels"], selection):
lst_items.append(row.to_frame().T)
- self._selected_metrics_labels = \
- pd.concat(lst_items, ignore_index=True, axis=0, copy=False)
+ if len(lst_items) == 1:
+ self._selected_metrics_labels = lst_items[0]
+ elif len(lst_items) > 1:
+ self._selected_metrics_labels = \
+ pd.concat(lst_items, ignore_index=True, axis=0, copy=False)
return self._selected_metrics_labels
def select_tm_trending_data(
diff --git a/csit.infra.dash/app/cdash/utils/utils.py b/csit.infra.dash/app/cdash/utils/utils.py
index 27ecd1f763..8171c905c3 100644
--- a/csit.infra.dash/app/cdash/utils/utils.py
+++ b/csit.infra.dash/app/cdash/utils/utils.py
@@ -721,7 +721,7 @@ def show_trending_graph_data(
dbc.Badge(lst_itm[0]),
html.A(
lst_itm[1],
- href=f"{C.URL_LOGS}{lst_itm[1]}",
+ href=get_url_logs(lst_itm[1]),
target="_blank"
)
])
@@ -853,7 +853,7 @@ def show_iterative_graph_data(
continue
list_group_item = dbc.ListGroupItem([
dbc.Badge(k),
- html.A(v, href=f"{C.URL_LOGS}{v}", target="_blank")
+ html.A(v, href=get_url_logs(v), target="_blank")
])
else:
list_group_item = dbc.ListGroupItem([dbc.Badge(k), v])
@@ -904,3 +904,67 @@ def show_iterative_graph_data(
]
return metadata, graph, True
+
+
+def get_url_job(job: str) -> str:
+ """Generates a URL to CI/CD job.
+
+ :param job: The name of job.
+ :type job: str
+ :raises KeyError: If the job name is not a valid job name.
+ :returns: The URL to CI/CD job.
+ """
+
+ if C.CICD_TYPE == "jenkins":
+ return f"{C.URL_CICD}{job}"
+ elif C.CICD_TYPE == "github":
+ l_j = job.split("-")
+ try:
+ return f"{C.URL_CICD}{l_j[0]}-{l_j[1]}-{l_j[2]}-{l_j[4]}.yml"
+ except KeyError:
+ return str()
+ else:
+ return str()
+
+
+def get_url_logs(job_build: str) -> str:
+ """Generates a URL to CI/CD job and its build.
+
+ :param job_build: The name of job and number of build. Its structure is:
+ "<job name>/<build number>".
+ :type job: str
+ :raises KeyError: If the job name is not a valid job name.
+ :returns: The URL to CI/CD build.
+ """
+
+ if C.CICD_TYPE == "jenkins":
+ return f"{C.URL_LOGS}{job_build}"
+ elif C.CICD_TYPE == "github":
+ try:
+ return f"{C.URL_LOGS}{job_build.split('/')[1]}"
+ except KeyError:
+ return str()
+ else:
+ return str()
+
+
+def get_topo_arch(lst_job: list) -> str:
+ """Get the topology and architecture string from the job name.
+
+ :param lst_job: The job name split into substrings.
+ :type lst_job: list
+ :returns: String with information about topology and architecture.
+ :rtype: str
+ """
+
+ if len(lst_job) < 2:
+ return str()
+
+ if "x" in lst_job[1:-1]:
+ # External testbeds.
+ # The structure of the name:
+ # <to be removed>-x-<topo>-<arch>-<other parts separated by dashes>
+ return "-".join(lst_job[(lst_job.index("x") + 1):])
+ else:
+ # Topology and architecture are the last two substrings.
+ return "-".join(lst_job[-2:])
diff --git a/csit.infra.dash/app/requirements.txt b/csit.infra.dash/app/requirements.txt
index edea01075d..7dfd7c8ccf 100644
--- a/csit.infra.dash/app/requirements.txt
+++ b/csit.infra.dash/app/requirements.txt
@@ -1,58 +1,60 @@
# AWS integration
-awswrangler==3.2.1
-pip==23.2.1
+awswrangler==3.9.0
+pip==24.1.2
# Dash integration
-dash==2.11.1
-dash-bootstrap-components==1.4.2
+dash==2.17.1
+dash-bootstrap-components==1.6.0
dash-core-components==2.0.0
dash-html-components==2.0.0
dash-renderer==1.9.1
dash-table==5.0.0
-numpy==1.25.2
-pandas==2.0.3
-plotly==5.15.0
-numexpr==2.8.4
-Bottleneck==1.3.7
+numpy==1.26.4 # awswrangler 3.9.0 depends on numpy<2.0 and >=1.18
+pandas==2.2.2
+plotly==5.23.0
+numexpr==2.10.1
+Bottleneck==1.4.0
# Web Application Integration
-Flask==2.2.5
-Flask-Assets==2.0
-Flask-Compress==1.13
-Jinja2==3.1.2
-libsass==0.22.0
-uWSGI==2.0.22
-uwsgitop==0.11
+Flask==3.0.3
+Flask-Assets==2.1.0
+Flask-Compress==1.15
+Jinja2==3.1.4
+libsass==0.23.0
+uWSGI==2.0.26
+uwsgitop==0.12
webassets==2.0
# Web Application Dependencies
-hdrhistogram==0.10.2
-python-dateutil==2.8.2
+hdrhistogram==0.10.3
+python-dateutil==2.9.0
PyYAML==6.0.1
# PIP freeze
-ansi2html==1.8.0
-boto3==1.28.17
-botocore==1.31.17
-Brotli==1.0.9
-certifi==2023.7.22
-charset-normalizer==3.2.0
-click==8.1.6
-idna==3.4
-itsdangerous==2.1.2
+blinker==1.8.2
+boto3==1.34.149
+Brotli==1.1.0
+certifi==2024.7.4
+charset-normalizer==3.3.2
+click==8.1.7
+idna==3.7
+importlib_metadata==8.2.0
+itsdangerous==2.2.0
jmespath==1.0.1
-MarkupSafe==2.1.3
-nest-asyncio==1.5.7
-packaging==23.1
-pbr==5.11.1
-pyarrow==12.0.1
-pytz==2023.3
-requests==2.31.0
+MarkupSafe==2.1.5
+nest-asyncio==1.6.0
+packaging==24.1
+pbr==6.0.0
+pyarrow==17.0.0
+pytz==2024.1
+requests==2.32.3
retrying==1.3.4
-s3transfer==0.6.1
+s3transfer==0.10.2
six==1.16.0
-tenacity==8.2.2
-typing_extensions==4.7.1
-tzdata==2023.3
-urllib3==1.26.16
-Werkzeug==2.2.3 \ No newline at end of file
+tenacity==8.5.0
+typing_extensions==4.12.2
+tzdata==2024.1
+urllib3==2.2.2
+Werkzeug==3.0.3
+zipp==3.19.2
+zstandard==0.23.0