Advanced

Admin Dashboard

Build an admin dashboard showing usage stats, cost reports, and provider health.

Dashboard API

# src/dashboard.py
from fastapi import APIRouter, Request
from datetime import datetime, timedelta

router = APIRouter(prefix="/admin", tags=["admin"])

@router.get("/stats")
async def get_stats(request: Request):
    """Get overall gateway statistics."""
    redis = request.app.state.redis
    today = datetime.now().strftime('%Y-%m-%d')

    # Get today's request count
    day_key = f"costs:{today}"
    total_requests = await redis.zcard(day_key)

    # Get cache stats
    cache = request.app.state.cache
    cache_stats = cache.get_stats() if cache else {}

    # Get provider status
    router_state = request.app.state.router
    provider_status = router_state.get_status()

    return {
        "timestamp": datetime.now().isoformat(),
        "today": {
            "total_requests": total_requests,
            "date": today,
        },
        "cache": cache_stats,
        "providers": provider_status,
    }

@router.get("/costs")
async def get_costs(request: Request, days: int = 7):
    """Get cost report for the last N days."""
    cost_tracker = request.app.state.costs
    reports = []
    for i in range(days):
        date = (datetime.now() - timedelta(days=i)).strftime('%Y-%m-%d')
        summary = await cost_tracker.get_daily_summary(date)
        reports.append(summary)
    total = sum(r["total_cost"] for r in reports)
    return {"period_days": days, "total_cost": round(total, 4),
            "daily": reports}

@router.get("/providers")
async def provider_health(request: Request):
    """Get provider health status."""
    router_state = request.app.state.router
    return router_state.get_status()

@router.get("/users/{user_id}")
async def user_usage(request: Request, user_id: str):
    """Get usage stats for a specific user."""
    redis = request.app.state.redis
    limiter = request.app.state.limiter
    usage = await limiter.get_usage(user_id)
    daily_cost = await redis.get(f"cost:user:{user_id}:daily")
    return {
        "user_id": user_id,
        "rate_limit_usage": usage,
        "daily_cost": float(daily_cost) if daily_cost else 0,
    }

@router.post("/budgets/{team_id}")
async def set_budget(request: Request, team_id: str, budget: float):
    """Set monthly budget for a team."""
    cost_tracker = request.app.state.costs
    cost_tracker.set_budget(team_id, budget)
    status = await cost_tracker.check_budget(team_id)
    return {"message": f"Budget set for {team_id}", **status}

Integrate Dashboard

# In src/main.py, add:
from dashboard import router as admin_router
app.include_router(admin_router)

# Test endpoints:
# GET /admin/stats
# GET /admin/costs?days=7
# GET /admin/providers
# GET /admin/users/user123
# POST /admin/budgets/engineering?budget=1000
💡
Production tip: Add authentication to the admin endpoints. Use API keys or OAuth for production deployments.