analytics / app.py
GitHub Action
Deploy analytics from e28872748e63c7413a718770d3f14cb198801702
c939d66
Raw
History Blame Contribute Delete
4.89 kB
"""
Analytics - Analytics dashboard application.
"""
import sys
from pathlib import Path
# Add project root to path for local development
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
import gradio as gr
# Support both local (apps.shared) and HF Spaces (shared) imports
try:
from apps.shared.custom_components import AppBase
from config.settings import LOCAL_PORTS, is_dev_mode
except ImportError:
from shared.custom_components import AppBase
from config.settings import LOCAL_PORTS, is_dev_mode
class AnalyticsApp(AppBase):
"""Analytics dashboard application with Home and Settings pages."""
def register_pages(self) -> None:
"""Register all pages for the analytics app."""
self.add_page("Home", "/", self.build_home)
self.add_page("Settings", "/settings", self.build_settings)
def build_home(self) -> None:
"""Build the home page content."""
gr.Markdown("## Analytics Dashboard")
gr.Markdown("View your analytics data here.")
with gr.Row():
with gr.Column(scale=2):
gr.Markdown("### Overview")
with gr.Row():
total_users = gr.Number(label="Total Users", value=1234, interactive=False)
active_sessions = gr.Number(label="Active Sessions", value=56, interactive=False)
conversion_rate = gr.Number(label="Conversion Rate (%)", value=3.2, interactive=False)
with gr.Column(scale=1):
gr.Markdown("### Actions")
refresh_btn = gr.Button("Refresh Data", variant="primary")
export_btn = gr.Button("Export Report", variant="secondary")
with gr.Row():
date_range = gr.Dropdown(
label="Date Range",
choices=["Today", "Last 7 Days", "Last 30 Days", "Last 90 Days"],
value="Last 7 Days",
)
metric_type = gr.Dropdown(
label="Metric Type",
choices=["Users", "Sessions", "Pageviews", "Events"],
value="Users",
)
status_output = gr.Textbox(label="Status", interactive=False)
def refresh_data():
import random
return (
random.randint(1000, 2000),
random.randint(40, 80),
round(random.uniform(2.0, 5.0), 1),
"Data refreshed",
)
def export_report(date: str, metric: str) -> str:
return f"Exporting {metric} report for {date}..."
refresh_btn.click(
fn=refresh_data,
outputs=[total_users, active_sessions, conversion_rate, status_output],
)
export_btn.click(
fn=export_report,
inputs=[date_range, metric_type],
outputs=status_output,
)
def build_settings(self) -> None:
"""Build the settings page content."""
gr.Markdown("## Analytics Settings")
gr.Markdown("Configure your analytics preferences here.")
with gr.Group():
gr.Markdown("### Data Collection")
tracking_enabled = gr.Checkbox(
label="Enable Tracking",
value=True,
)
anonymize_ip = gr.Checkbox(
label="Anonymize IP Addresses",
value=True,
)
with gr.Group():
gr.Markdown("### Report Settings")
default_date_range = gr.Dropdown(
label="Default Date Range",
choices=["Today", "Last 7 Days", "Last 30 Days", "Last 90 Days"],
value="Last 7 Days",
)
email_reports = gr.Checkbox(
label="Email Weekly Reports",
value=False,
)
report_email = gr.Textbox(
label="Report Email",
placeholder="your@email.com",
visible=True,
)
save_btn = gr.Button("Save Settings", variant="primary")
status = gr.Textbox(label="Status", interactive=False)
def save_settings(tracking, anonymize, date_range, email_reports, email):
return f"Settings saved: Tracking={tracking}, Anonymize={anonymize}, Range={date_range}"
save_btn.click(
fn=save_settings,
inputs=[tracking_enabled, anonymize_ip, default_date_range, email_reports, report_email],
outputs=status,
)
if __name__ == "__main__":
app = AnalyticsApp(
app_id="analytics",
title="Analytics",
description="View and analyze your data",
)
demo = app.build()
# Only specify port in dev mode; HF Spaces manages ports automatically
if is_dev_mode():
demo.launch(server_port=LOCAL_PORTS.get("analytics", 7861))
else:
demo.launch()