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.
Lilly Tech Systems