-# Copyright (c) 2022 Cisco and/or its affiliates.
+# Copyright (c) 2023 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 ..utils.utils import show_tooltip, label, sync_checklists, gen_new_url, \
generate_options, get_list_group_items
from ..utils.url_processing import url_decode
-from ..data.data import Data
-from .graphs import graph_iterative, get_short_version, select_iterative_data
+from .graphs import graph_iterative, select_iterative_data
# Control panel partameters and their default values.
"""The layout of the dash app and the callbacks.
"""
- def __init__(self, app: Flask, releases: list, html_layout_file: str,
- graph_layout_file: str, data_spec_file: str, tooltip_file: str) -> None:
+ def __init__(
+ self,
+ app: Flask,
+ data_iterative: pd.DataFrame,
+ html_layout_file: str,
+ graph_layout_file: str,
+ tooltip_file: str
+ ) -> None:
"""Initialization:
- save the input parameters,
- read and pre-process the data,
- read tooltips from the tooltip file.
:param app: Flask application running the dash application.
- :param releases: Lis of releases to be displayed.
:param html_layout_file: Path and name of the file specifying the HTML
layout of the dash application.
:param graph_layout_file: Path and name of the file with layout of
plot.ly graphs.
- :param data_spec_file: Path and name of the file specifying the data to
- be read from parquets for this application.
:param tooltip_file: Path and name of the yaml file specifying the
tooltips.
:type app: Flask
- :type releases: list
:type html_layout_file: str
:type graph_layout_file: str
- :type data_spec_file: str
:type tooltip_file: str
"""
# Inputs
self._app = app
- self.releases = releases
self._html_layout_file = html_layout_file
self._graph_layout_file = graph_layout_file
- self._data_spec_file = data_spec_file
self._tooltip_file = tooltip_file
-
- # Read the data:
- self._data = pd.DataFrame()
- for rls in releases:
- data_mrr = Data(self._data_spec_file, True).\
- read_iterative_mrr(release=rls.replace("csit", "rls"))
- data_mrr["release"] = rls
- data_ndrpdr = Data(self._data_spec_file, True).\
- read_iterative_ndrpdr(release=rls.replace("csit", "rls"))
- data_ndrpdr["release"] = rls
- self._data = pd.concat(
- [self._data, data_mrr, data_ndrpdr],
- ignore_index=True
- )
+ self._data = data_iterative
# Get structure of tests:
tbs = dict()
- cols = ["job", "test_id", "test_type", "dut_version", "release"]
+ cols = [
+ "job", "test_id", "test_type", "dut_version", "tg_type", "release"
+ ]
for _, row in self._data[cols].drop_duplicates().iterrows():
rls = row["release"]
- ttype = row["test_type"]
lst_job = row["job"].split("-")
dut = lst_job[1]
- d_ver = get_short_version(row["dut_version"], dut)
+ d_ver = row["dut_version"]
tbed = "-".join(lst_job[-2:])
lst_test_id = row["test_id"].split(".")
if dut == "dpdk":
tbs[rls][dut][d_ver][infra][area][test]["frame-size"].append(
framesize.upper()
)
- if ttype == "mrr":
+ if row["test_type"] == "mrr":
if "MRR" not in \
tbs[rls][dut][d_ver][infra][area][test]["test-type"]:
tbs[rls][dut][d_ver][infra][area][test]["test-type"].append(
"MRR"
)
- elif ttype == "ndrpdr":
+ elif row["test_type"] == "ndrpdr":
if "NDR" not in \
tbs[rls][dut][d_ver][infra][area][test]["test-type"]:
tbs[rls][dut][d_ver][infra][area][test]["test-type"].extend(
("NDR", "PDR", )
)
+ elif row["test_type"] == "hoststack" and \
+ row["tg_type"] in ("iperf", "vpp"):
+ if "BPS" not in \
+ tbs[rls][dut][d_ver][infra][area][test]["test-type"]:
+ tbs[rls][dut][d_ver][infra][area][test]["test-type"].append(
+ "BPS"
+ )
+ elif row["test_type"] == "hoststack" and row["tg_type"] == "ab":
+ if "CPS" not in \
+ tbs[rls][dut][d_ver][infra][area][test]["test-type"]:
+ tbs[rls][dut][d_ver][infra][area][test]["test-type"].extend(
+ ("CPS", "RPS")
+ )
self._spec_tbs = tbs
# Read from files:
return dbc.Col(
id="col-plotting-area",
children=[
- dcc.Loading(
+ dbc.Spinner(
children=[
dbc.Row(
id="plotting-area",
dbc.Row(
class_name="g-0 p-1",
children=[
- dbc.Label(
- children=show_tooltip(
- self._tooltips,
- "help-framesize",
- "Frame Size"
- )
- ),
- dbc.Col(
- children=[
- dbc.Checklist(
- id={"type": "ctrl-cl", "index": "frmsize-all"},
- options=C.CL_ALL_DISABLED,
- inline=True,
- switch=False,
- input_class_name="border-info bg-info"
+ dbc.InputGroup(
+ [
+ dbc.InputGroupText(
+ children=show_tooltip(
+ self._tooltips,
+ "help-framesize",
+ "Frame Size"
+ )
+ ),
+ dbc.Col(
+ children=[
+ dbc.Checklist(
+ id={
+ "type": "ctrl-cl",
+ "index": "frmsize-all"
+ },
+ options=C.CL_ALL_DISABLED,
+ inline=True,
+ class_name="ms-2"
+ )
+ ],
+ width=2
+ ),
+ dbc.Col(
+ children=[
+ dbc.Checklist(
+ id={
+ "type": "ctrl-cl",
+ "index": "frmsize"
+ },
+ inline=True
+ )
+ ]
)
],
- width=3
- ),
- dbc.Col(
- children=[
- dbc.Checklist(
- id={"type": "ctrl-cl", "index": "frmsize"},
- inline=True,
- switch=False,
- input_class_name="border-info bg-info"
- )
- ]
+ style={"align-items": "center"},
+ size="sm"
)
]
),
dbc.Row(
class_name="g-0 p-1",
children=[
- dbc.Label(
- children=show_tooltip(
- self._tooltips,
- "help-cores",
- "Number of Cores"
- )
- ),
- dbc.Col(
- children=[
- dbc.Checklist(
- id={"type": "ctrl-cl", "index": "core-all"},
- options=C.CL_ALL_DISABLED,
- inline=False,
- switch=False,
- input_class_name="border-info bg-info"
+ dbc.InputGroup(
+ [
+ dbc.InputGroupText(
+ children=show_tooltip(
+ self._tooltips,
+ "help-cores",
+ "Number of Cores"
+ )
+ ),
+ dbc.Col(
+ children=[
+ dbc.Checklist(
+ id={
+ "type": "ctrl-cl",
+ "index": "core-all"
+ },
+ options=C.CL_ALL_DISABLED,
+ inline=True,
+ class_name="ms-2"
+ )
+ ],
+ width=2
+ ),
+ dbc.Col(
+ children=[
+ dbc.Checklist(
+ id={
+ "type": "ctrl-cl",
+ "index": "core"
+ },
+ inline=True
+ )
+ ]
)
],
- width=3
- ),
- dbc.Col(
- children=[
- dbc.Checklist(
- id={"type": "ctrl-cl", "index": "core"},
- inline=True,
- switch=False,
- input_class_name="border-info bg-info"
- )
- ]
+ style={"align-items": "center"},
+ size="sm"
)
]
),
dbc.Row(
class_name="g-0 p-1",
children=[
- dbc.Label(
- children=show_tooltip(
- self._tooltips,
- "help-ttype",
- "Test Type"
- )
- ),
- dbc.Col(
- children=[
- dbc.Checklist(
- id={"type": "ctrl-cl", "index": "tsttype-all"},
- options=C.CL_ALL_DISABLED,
- inline=True,
- switch=False,
- input_class_name="border-info bg-info"
+ dbc.InputGroup(
+ [
+ dbc.InputGroupText(
+ children=show_tooltip(
+ self._tooltips,
+ "help-ttype",
+ "Test Type"
+ )
+ ),
+ dbc.Col(
+ children=[
+ dbc.Checklist(
+ id={
+ "type": "ctrl-cl",
+ "index": "tsttype-all"
+ },
+ options=C.CL_ALL_DISABLED,
+ inline=True,
+ class_name="ms-2"
+ )
+ ],
+ width=2
+ ),
+ dbc.Col(
+ children=[
+ dbc.Checklist(
+ id={
+ "type": "ctrl-cl",
+ "index": "tsttype"
+ },
+ inline=True
+ )
+ ]
)
],
- width=3
- ),
- dbc.Col(
- children=[
- dbc.Checklist(
- id={"type": "ctrl-cl", "index": "tsttype"},
- inline=True,
- switch=False,
- input_class_name="border-info bg-info"
- )
- ]
+ style={"align-items": "center"},
+ size="sm"
)
]
),
dbc.Row(
class_name="g-0 p-1",
children=[
- dbc.Label(
- children=show_tooltip(
- self._tooltips,
- "help-normalize",
- "Normalize"
- )
- ),
- dbc.Col(
- children=[
- dbc.Checklist(
- id="normalize",
- options=[{
- "value": "normalize",
- "label": (
- "Normalize results to CPU "
- "frequency 2GHz"
- )
- }],
- value=[],
- inline=True,
- switch=False,
- input_class_name="border-info bg-info"
+ dbc.InputGroup(
+ [
+ dbc.InputGroupText(
+ children=show_tooltip(
+ self._tooltips,
+ "help-normalize",
+ "Normalization"
+ )
),
- ]
+ dbc.Col(
+ children=[
+ dbc.Checklist(
+ id="normalize",
+ options=[{
+ "value": "normalize",
+ "label": (
+ "Normalize to CPU frequency "
+ "2GHz"
+ )
+ }],
+ value=[],
+ inline=True,
+ class_name="ms-2"
+ )
+ ]
+ )
+ ],
+ style={"align-items": "center"},
+ size="sm"
)
]
),
[
dbc.Button(
id="plot-btn-url",
- children="URL",
+ children="Show URL",
class_name="me-1",
color="info",
style={
f"cl-{param}-val": val_sel,
f"cl-{param}-all-val": val_all,
})
- if all((ctrl_panel.get("cl-core-val"),
+ if all((ctrl_panel.get("cl-core-val"),
ctrl_panel.get("cl-frmsize-val"),
ctrl_panel.get("cl-tsttype-val"), )):
ctrl_panel.set({"btn-add-dis": False})
if on_draw:
if store_sel:
- lg_selected = get_list_group_items(store_sel)
+ lg_selected = get_list_group_items(store_sel, "sel-cl")
plotting_area = self._get_plotting_area(
store_sel,
bool(normalize),