DawnC commited on
Commit
3802c42
·
verified ·
1 Parent(s): 3743469

Create analytics_dashboard.py

Browse files
Files changed (1) hide show
  1. analytics_dashboard.py +58 -0
analytics_dashboard.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import matplotlib.pyplot as plt
4
+ import json
5
+ from io import BytesIO
6
+ from datetime import datetime
7
+
8
+ def load_usage_data():
9
+ """load usage_log.json file to be DataFrame"""
10
+ try:
11
+ with open("usage_log.json", "r") as f:
12
+ data = json.load(f)
13
+ if not data.get("runs"):
14
+ return None
15
+
16
+ df = pd.DataFrame(data["runs"])
17
+ df["timestamp"] = pd.to_datetime(df["timestamp"], errors='coerce')
18
+ df.dropna(subset=["timestamp"], inplace=True)
19
+ df["date"] = df["timestamp"].dt.date
20
+ return df
21
+ except Exception as e:
22
+ print(f"Error loading usage data: {e}")
23
+ return None
24
+
25
+ def plot_daily_usage(df):
26
+ try:
27
+ counts = df.groupby("date").size()
28
+ fig, ax = plt.subplots(figsize=(8, 4))
29
+ counts.plot(kind="bar", ax=ax, color="#4A90E2")
30
+ ax.set_title("Daily Usage of PawMatch AI")
31
+ ax.set_xlabel("Date")
32
+ ax.set_ylabel("Runs")
33
+ ax.grid(axis='y', linestyle='--', alpha=0.7)
34
+ plt.xticks(rotation=45)
35
+ plt.tight_layout()
36
+
37
+ buf = BytesIO()
38
+ plt.savefig(buf, format="png")
39
+ plt.close(fig)
40
+ buf.seek(0)
41
+ return buf
42
+ except Exception as e:
43
+ return f"Error generating plot: {e}"
44
+
45
+ def create_analytics_tab():
46
+ def generate_plot():
47
+ df = load_usage_data()
48
+ if df is None or df.empty:
49
+ return "No usage data available."
50
+ return plot_daily_usage(df)
51
+
52
+ with gr.Tab("\ud83d\udcca Usage Analytics"):
53
+ gr.Markdown("### Daily Usage Trend of PawMatch AI")
54
+ with gr.Row():
55
+ img = gr.Image(type="pil", label="Daily Usage", show_label=True)
56
+ plot_btn = gr.Button("\ud83d\udd04 Refresh")
57
+
58
+ plot_btn.click(fn=generate_plot, outputs=[img])