mohsenfayyaz commited on
Commit
a9bd7dd
·
verified ·
1 Parent(s): 826bc35

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -35
app.py CHANGED
@@ -1,5 +1,6 @@
1
  import os
2
  import gradio as gr
 
3
  import pandas as pd
4
  import datetime
5
  import plotly.express as px
@@ -54,10 +55,12 @@ def _pick_col(df, candidates):
54
  return norm[cand]
55
  return None
56
 
57
- def _kblocks_to_tib(kblocks):
58
- # KiB blocks -> TiB (so 104149210112 -> ~97.0)
59
  return kblocks / (1024**3)
60
 
 
 
 
61
  def plot_disks(alert_threshold_pct=99.0):
62
  df = datasets.load_dataset(
63
  "pluslab/PLUS_Lab_GPUs_Data",
@@ -88,61 +91,54 @@ def plot_disks(alert_threshold_pct=99.0):
88
  else:
89
  df["Label"] = df[server_col].astype(str) + " • " + df[fs_col].astype(str)
90
 
91
- # Totals & pct (compute ourselves)
92
  df["Total_kb"] = df[used_col] + df[avail_col]
93
  df["Used_pct"] = (df[used_col] / df["Total_kb"]) * 100.0
94
  df["Used_pct"] = df["Used_pct"].clip(0, 100)
95
  df["Avail_pct"] = (100.0 - df["Used_pct"]).clip(0, 100)
96
 
97
- # Sizes in TiB (shown as "TB")
98
  df["Used_TB"] = _kblocks_to_tib(df[used_col])
99
- df["Avail_TB"] = _kblocks_to_tib(df[avail_col])
100
  df["Total_TB"] = _kblocks_to_tib(df["Total_kb"])
 
101
 
102
- # Alert rows
103
  df["ALERT"] = df["Used_pct"] > alert_threshold_pct
104
 
105
- # Sort by total desc
106
  df = df.sort_values("Total_kb", ascending=False).reset_index(drop=True)
107
 
108
- # Display text
109
- used_text = [f"{u:.1f} TB ({p:.0f}%)" for u, p in zip(df["Used_TB"], df["Used_pct"])]
110
- total_text = [f"{t:.1f} TB" for t in df["Total_TB"]]
111
- avail_text = [f"{a:.1f} TB" for a in df["Avail_TB"]]
112
 
113
- # Pro palette + alert accent
114
- COLOR_TOTAL = "#CBD5E1" # slate-300
115
- COLOR_USED = "#2563EB" # blue-600
116
- COLOR_FREE = "#94A3B8" # slate-400
117
- COLOR_ALERT = "#F59E0B" # amber-500 (dashboard alert)
118
- COLOR_OKTXT = "#0F172A" # slate-900
119
- COLOR_ALTXT = "#B45309" # amber-700
120
 
121
- # Used color per row (highlight alerts)
 
 
 
 
122
  used_colors = np.where(df["ALERT"].to_numpy(), COLOR_ALERT, COLOR_USED)
123
 
124
- # Add an icon to the y label for alerts
125
- y_labels = np.where(df["ALERT"].to_numpy(), "⚠ " + df["Label"], df["Label"])
126
-
127
  fig = go.Figure()
128
 
129
- # Gray background (hover shows AVAILABLE)
130
  fig.add_trace(
131
  go.Bar(
132
  y=y_labels,
133
  x=[100] * len(df),
134
  base=0,
135
- name="(hover) Available",
136
  orientation="h",
137
  marker=dict(color=COLOR_TOTAL),
138
  opacity=0.40,
139
  hovertemplate="<b>%{y}</b><br>Available: %{customdata}<br><extra></extra>",
140
- customdata=avail_text,
141
  showlegend=False,
142
  )
143
  )
144
 
145
- # Used (colored per-row; alert if >99%)
146
  fig.add_trace(
147
  go.Bar(
148
  y=y_labels,
@@ -163,9 +159,9 @@ def plot_disks(alert_threshold_pct=99.0):
163
  ),
164
  customdata=np.stack(
165
  [
166
- df["Used_TB"].to_numpy(),
167
- df["Avail_TB"].to_numpy(),
168
- df["Total_TB"].to_numpy(),
169
  df["Used_pct"].to_numpy(),
170
  ],
171
  axis=1,
@@ -173,7 +169,7 @@ def plot_disks(alert_threshold_pct=99.0):
173
  )
174
  )
175
 
176
- # Available
177
  fig.add_trace(
178
  go.Bar(
179
  y=y_labels,
@@ -191,7 +187,7 @@ def plot_disks(alert_threshold_pct=99.0):
191
  ),
192
  customdata=np.stack(
193
  [
194
- df["Avail_TB"].map(lambda v: f"{v:.2f} TB").to_numpy(),
195
  df["Used_TB"].map(lambda v: f"{v:.2f} TB").to_numpy(),
196
  df["Total_TB"].map(lambda v: f"{v:.2f} TB").to_numpy(),
197
  ],
@@ -200,17 +196,17 @@ def plot_disks(alert_threshold_pct=99.0):
200
  )
201
  )
202
 
203
- # Total annotation at far right (color it if alert)
204
- for lbl, ttxt, is_alert in zip(y_labels, total_text, df["ALERT"].to_numpy()):
205
  fig.add_annotation(
206
  x=100,
207
- y=lbl,
208
  text=ttxt,
209
  showarrow=False,
210
  xanchor="left",
211
  yanchor="middle",
212
  xshift=6,
213
- font=dict(color=(COLOR_ALTXT if is_alert else "#334155")),
214
  )
215
 
216
  fig.update_layout(
 
1
  import os
2
  import gradio as gr
3
+ import numpy as np
4
  import pandas as pd
5
  import datetime
6
  import plotly.express as px
 
55
  return norm[cand]
56
  return None
57
 
58
+ def _kblocks_to_tib(kblocks): # shown as "TB" per your convention
 
59
  return kblocks / (1024**3)
60
 
61
+ def _kblocks_to_gib(kblocks): # shown as "GB"
62
+ return kblocks / (1024**2)
63
+
64
  def plot_disks(alert_threshold_pct=99.0):
65
  df = datasets.load_dataset(
66
  "pluslab/PLUS_Lab_GPUs_Data",
 
91
  else:
92
  df["Label"] = df[server_col].astype(str) + " • " + df[fs_col].astype(str)
93
 
94
+ # Totals & pct
95
  df["Total_kb"] = df[used_col] + df[avail_col]
96
  df["Used_pct"] = (df[used_col] / df["Total_kb"]) * 100.0
97
  df["Used_pct"] = df["Used_pct"].clip(0, 100)
98
  df["Avail_pct"] = (100.0 - df["Used_pct"]).clip(0, 100)
99
 
100
+ # Sizes
101
  df["Used_TB"] = _kblocks_to_tib(df[used_col])
 
102
  df["Total_TB"] = _kblocks_to_tib(df["Total_kb"])
103
+ df["Avail_GB"] = _kblocks_to_gib(df[avail_col]) # <-- GB for hovers
104
 
105
+ # Alerts
106
  df["ALERT"] = df["Used_pct"] > alert_threshold_pct
107
 
108
+ # Sort
109
  df = df.sort_values("Total_kb", ascending=False).reset_index(drop=True)
110
 
111
+ y_labels = np.where(df["ALERT"].to_numpy(), "⚠ " + df["Label"], df["Label"])
 
 
 
112
 
113
+ used_text = [f"{u:.2f} TB ({p:.0f}%)" for u, p in zip(df["Used_TB"], df["Used_pct"])]
114
+ total_annot = [f"{t:.2f} TB" for t in df["Total_TB"]]
115
+ avail_gb_0 = [f"{g:.0f} GB" for g in df["Avail_GB"]]
 
 
 
 
116
 
117
+ # Colors
118
+ COLOR_TOTAL = "#CBD5E1"
119
+ COLOR_USED = "#2563EB"
120
+ COLOR_FREE = "#94A3B8"
121
+ COLOR_ALERT = "#F59E0B"
122
  used_colors = np.where(df["ALERT"].to_numpy(), COLOR_ALERT, COLOR_USED)
123
 
 
 
 
124
  fig = go.Figure()
125
 
126
+ # Gray background hover: Available in GB (0dp)
127
  fig.add_trace(
128
  go.Bar(
129
  y=y_labels,
130
  x=[100] * len(df),
131
  base=0,
 
132
  orientation="h",
133
  marker=dict(color=COLOR_TOTAL),
134
  opacity=0.40,
135
  hovertemplate="<b>%{y}</b><br>Available: %{customdata}<br><extra></extra>",
136
+ customdata=avail_gb_0,
137
  showlegend=False,
138
  )
139
  )
140
 
141
+ # Used hover: Available in GB (0dp) too
142
  fig.add_trace(
143
  go.Bar(
144
  y=y_labels,
 
159
  ),
160
  customdata=np.stack(
161
  [
162
+ df["Used_TB"].map(lambda v: f"{v:.2f} TB").to_numpy(),
163
+ df["Avail_GB"].map(lambda v: f"{v:.0f} GB").to_numpy(), # <-- changed
164
+ df["Total_TB"].map(lambda v: f"{v:.2f} TB").to_numpy(),
165
  df["Used_pct"].to_numpy(),
166
  ],
167
  axis=1,
 
169
  )
170
  )
171
 
172
+ # Available hover: Available in GB (0dp)
173
  fig.add_trace(
174
  go.Bar(
175
  y=y_labels,
 
187
  ),
188
  customdata=np.stack(
189
  [
190
+ df["Avail_GB"].map(lambda v: f"{v:.0f} GB").to_numpy(), # <-- changed
191
  df["Used_TB"].map(lambda v: f"{v:.2f} TB").to_numpy(),
192
  df["Total_TB"].map(lambda v: f"{v:.2f} TB").to_numpy(),
193
  ],
 
196
  )
197
  )
198
 
199
+ # Total annotation (TB, 2dp)
200
+ for y, ttxt, is_alert in zip(y_labels, total_annot, df["ALERT"].to_numpy()):
201
  fig.add_annotation(
202
  x=100,
203
+ y=y,
204
  text=ttxt,
205
  showarrow=False,
206
  xanchor="left",
207
  yanchor="middle",
208
  xshift=6,
209
+ font=dict(color=("#B45309" if is_alert else "#334155")),
210
  )
211
 
212
  fig.update_layout(