Spaces:
Running
on
Zero
Running
on
Zero
import gradio as gr | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
import json | |
from io import BytesIO | |
from datetime import datetime | |
from PIL import Image, ImageDraw | |
def load_usage_data(): | |
"""load usage_log.json file to be DataFrame""" | |
try: | |
with open("usage_log.json", "r") as f: | |
data = json.load(f) | |
if not data.get("runs"): | |
return None | |
df = pd.DataFrame(data["runs"]) | |
df["timestamp"] = pd.to_datetime(df["timestamp"], errors='coerce') | |
df.dropna(subset=["timestamp"], inplace=True) | |
df["date"] = df["timestamp"].dt.date | |
return df | |
except Exception as e: | |
print(f"Error loading usage data: {e}") | |
return None | |
def plot_daily_usage(df): | |
try: | |
counts = df.groupby("date").size() | |
fig, ax = plt.subplots(figsize=(8, 4)) | |
counts.plot(kind="bar", ax=ax, color="#4A90E2") | |
ax.set_title("Daily Usage of PawMatch AI") | |
ax.set_xlabel("Date") | |
ax.set_ylabel("Runs") | |
ax.grid(axis='y', linestyle='--', alpha=0.7) | |
plt.xticks(rotation=45) | |
plt.tight_layout() | |
buf = BytesIO() | |
plt.savefig(buf, format="png") | |
plt.close(fig) | |
buf.seek(0) | |
return buf | |
except Exception as e: | |
return f"Error generating plot: {e}" | |
def create_analytics_tab(): | |
def generate_plot(): | |
df = load_usage_data() | |
if df is None or df.empty: | |
img = Image.new("RGB", (600, 200), color=(255, 255, 255)) | |
draw = ImageDraw.Draw(img) | |
draw.text((20, 80), "No usage data available.", fill=(0, 0, 0)) | |
return img | |
return plot_daily_usage(df) | |
with gr.Tab("\ud83d\udcca Usage Analytics"): | |
gr.Markdown("### Daily Usage Trend of PawMatch AI") | |
with gr.Row(): | |
img = gr.Image(type="pil", label="Daily Usage", show_label=True) | |
plot_btn = gr.Button("\ud83d\udd04 Refresh") | |
plot_btn.click(fn=generate_plot, outputs=[img]) |