feat(uti): Add structured menu for stats
[csit.git] / resources / tools / dash / app / pal / trending / graphs.py
index dc4e7af..1d9fd1c 100644 (file)
@@ -165,7 +165,7 @@ def select_trending_data(data: pd.DataFrame, itm:dict) -> pd.DataFrame:
     phy = itm["phy"].split("-")
     if len(phy) == 4:
         topo, arch, nic, drv = phy
-        if drv in ("dpdk", "ixgbe"):
+        if drv == "dpdk":
             drv = ""
         else:
             drv += "-"
@@ -199,10 +199,13 @@ def _generate_trending_traces(ttype: str, name: str, df: pd.DataFrame,
     """
 
     df = df.dropna(subset=[_VALUE[ttype], ])
+    if df.empty:
+        return list()
+    df = df.loc[((df["start_time"] >= start) & (df["start_time"] <= end))]
     if df.empty:
         return list()
 
-    x_axis = [d for d in df["start_time"] if d >= start and d <= end]
+    x_axis = df["start_time"].tolist()
 
     anomalies, trend_avg, trend_stdev = _classify_anomalies(
         {k: v for k, v in zip(x_axis, df[_VALUE[ttype]])}
@@ -285,21 +288,31 @@ def _generate_trending_traces(ttype: str, name: str, df: pd.DataFrame,
         anomaly_x = list()
         anomaly_y = list()
         anomaly_color = list()
+        hover = list()
         for idx, anomaly in enumerate(anomalies):
             if anomaly in (u"regression", u"progression"):
                 anomaly_x.append(x_axis[idx])
                 anomaly_y.append(trend_avg[idx])
                 anomaly_color.append(_ANOMALY_COLOR[anomaly])
+                hover_itm = (
+                    f"date: {x_axis[idx].strftime('%d-%m-%Y %H:%M:%S')}<br>"
+                    f"trend [pps]: {trend_avg[idx]}<br>"
+                    f"classification: {anomaly}"
+                )
+                if ttype == "pdr-lat":
+                    hover_itm = hover_itm.replace("[pps]", "[us]")
+                hover.append(hover_itm)
         anomaly_color.extend([0.0, 0.5, 1.0])
         traces.append(
             go.Scatter(
                 x=anomaly_x,
                 y=anomaly_y,
                 mode=u"markers",
-                hoverinfo=u"none",
+                text=hover,
+                hoverinfo=u"text+name",
                 showlegend=False,
                 legendgroup=name,
-                name=f"{name}-anomalies",
+                name=name,
                 marker={
                     u"size": 15,
                     u"symbol": u"circle-open",
@@ -315,9 +328,6 @@ def _generate_trending_traces(ttype: str, name: str, df: pd.DataFrame,
                         u"len": 0.8,
                         u"title": u"Circles Marking Data Classification",
                         u"titleside": u"right",
-                        # u"titlefont": {
-                        #     u"size": 14
-                        # },
                         u"tickmode": u"array",
                         u"tickvals": [0.167, 0.500, 0.833],
                         u"ticktext": _TICK_TEXT_LAT \
@@ -386,11 +396,6 @@ def graph_hdrh_latency(data: dict, layout: dict) -> go.Figure:
 
     fig = None
 
-    try:
-        name = data.pop("name")
-    except (KeyError, AttributeError):
-        return None
-
     traces = list()
     for idx, (lat_name, lat_hdrh) in enumerate(data.items()):
         try:
@@ -450,7 +455,6 @@ def graph_hdrh_latency(data: dict, layout: dict) -> go.Figure:
         fig.add_traces(traces)
         layout_hdrh = layout.get("plot-hdrh-latency", None)
         if lat_hdrh:
-            layout_hdrh["title"]["text"] = f"<b>{name}</b>"
             fig.update_layout(layout_hdrh)
 
     return fig