Spaces:
Sleeping
Sleeping
import random | |
import time | |
import pandas as pd | |
import gradio as gr | |
data = {"data": {}} | |
with gr.Blocks() as demo: | |
gr.Markdown("# Monitoring Dashboard") | |
timer = gr.Timer(5) | |
with gr.Row(): | |
start = gr.DateTime("now - 24h", label="Start Time") | |
end = gr.DateTime("now", label="End Time") | |
selected_fn = gr.Dropdown( | |
["All"], | |
value="All", | |
label="Endpoint", | |
info="Select the function to see analytics for, or 'All' for aggregate.", | |
) | |
demo.load( | |
lambda: gr.Dropdown( | |
choices=["All"] | |
+ list({row["function"] for row in data["data"].values()}) # type: ignore | |
), | |
None, | |
selected_fn, | |
) | |
with gr.Group(): | |
with gr.Row(): | |
unique_users = gr.Label(label="Unique Users") | |
total_requests = gr.Label(label="Total Requests") | |
process_time = gr.Label(label="Avg Process Time") | |
plot = gr.BarPlot( | |
x="time", | |
y="function", | |
color="status", | |
title="Requests over Time", | |
y_title="Requests", | |
x_bin="1m", | |
y_aggregate="count", | |
color_map={ | |
"success": "#22c55e", | |
"failure": "#ef4444", | |
"pending": "#eab308", | |
"queued": "#3b82f6", | |
}, | |
) | |
def gen_plot(start, end, selected_fn): | |
df = pd.DataFrame(list(data["data"].values())) | |
if selected_fn != "All": | |
df = df[df["function"] == selected_fn] | |
df = df[(df["time"] >= start) & (df["time"] <= end)] | |
df["time"] = pd.to_datetime(df["time"], unit="s") | |
unique_users = len(df["session_hash"].unique()) # type: ignore | |
total_requests = len(df) | |
process_time = round(df["process_time"].mean(), 2) | |
duration = end - start | |
x_bin = ( | |
"1h" | |
if duration >= 60 * 60 * 24 | |
else "15m" | |
if duration >= 60 * 60 * 3 | |
else "1m" | |
) | |
df = df.drop(columns=["session_hash"]) # type: ignore | |
assert isinstance(df, pd.DataFrame) # noqa: S101 | |
return ( | |
gr.BarPlot(value=df, x_bin=x_bin, x_lim=[start, end]), | |
unique_users, | |
total_requests, | |
process_time, | |
) | |
if __name__ == "__main__": | |
data["data"] = {} | |
for _ in range(random.randint(300, 500)): | |
timedelta = random.randint(0, 60 * 60 * 24 * 3) | |
data["data"][random.randint(1, 100000)] = { | |
"time": time.time() - timedelta, | |
"status": random.choice( | |
["success", "success", "failure"] | |
if timedelta > 30 * 60 | |
else ["queued", "pending"] | |
), | |
"function": random.choice(["predict", "chat", "chat"]), | |
"process_time": random.randint(0, 10), | |
"session_hash": str(random.randint(0, 4)), | |
} | |
demo.launch() | |