Update monitoring_app.py
Browse files- monitoring_app.py +10 -2
monitoring_app.py
CHANGED
|
@@ -110,18 +110,26 @@ def render_summary(summary: dict, df: pd.DataFrame) -> None:
|
|
| 110 |
c1.metric("Total monitored", summary.get("total_monitored", 0))
|
| 111 |
c2.metric("Needs review", summary.get("needs_review", 0))
|
| 112 |
c3.metric("Shown after filters", len(df))
|
| 113 |
-
|
| 114 |
c4.metric(
|
| 115 |
"Problem rate",
|
| 116 |
f"{(len(df[df['overall_status'] != 'ok']) / len(df) * 100):.1f}%"
|
| 117 |
if len(df)
|
| 118 |
-
else "0.0%"
|
| 119 |
)
|
| 120 |
|
| 121 |
if df.empty:
|
| 122 |
st.info("No monitoring results match the current filters.")
|
| 123 |
return
|
| 124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
def render_problem_patterns(df: pd.DataFrame) -> None:
|
| 126 |
st.subheader("Problem Patterns")
|
| 127 |
|
|
|
|
| 110 |
c1.metric("Total monitored", summary.get("total_monitored", 0))
|
| 111 |
c2.metric("Needs review", summary.get("needs_review", 0))
|
| 112 |
c3.metric("Shown after filters", len(df))
|
|
|
|
| 113 |
c4.metric(
|
| 114 |
"Problem rate",
|
| 115 |
f"{(len(df[df['overall_status'] != 'ok']) / len(df) * 100):.1f}%"
|
| 116 |
if len(df)
|
| 117 |
+
else "0.0%",
|
| 118 |
)
|
| 119 |
|
| 120 |
if df.empty:
|
| 121 |
st.info("No monitoring results match the current filters.")
|
| 122 |
return
|
| 123 |
|
| 124 |
+
st.markdown("#### Label judgment distribution")
|
| 125 |
+
label_df = (
|
| 126 |
+
df["label_judgment"]
|
| 127 |
+
.value_counts()
|
| 128 |
+
.rename_axis("label_judgment")
|
| 129 |
+
.reset_index(name="count")
|
| 130 |
+
)
|
| 131 |
+
st.bar_chart(label_df.set_index("label_judgment"))
|
| 132 |
+
|
| 133 |
def render_problem_patterns(df: pd.DataFrame) -> None:
|
| 134 |
st.subheader("Problem Patterns")
|
| 135 |
|