Skip to main content
Glama
nesirat

MCP Vulnerability Management System

by nesirat
dashboard.py3.96 kB
from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from sqlalchemy import func, and_ from typing import List from datetime import datetime, timedelta from app.core.database import get_db from app.core.auth import get_current_user from app.models.user import User from app.models.ticket import Ticket from app.models.api_key import APIKey from app.models.api_usage import APIUsage from app.schemas.dashboard import DashboardStats, RecentTicket, APIUsageData router = APIRouter(prefix="/dashboard", tags=["dashboard"]) @router.get("/stats", response_model=DashboardStats) async def get_dashboard_stats( current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): """Get dashboard statistics for the current user.""" try: # Get ticket counts open_tickets = db.query(Ticket).filter( Ticket.user_id == current_user.id, Ticket.status == "open" ).count() resolved_tickets = db.query(Ticket).filter( Ticket.user_id == current_user.id, Ticket.status == "resolved" ).count() # Get API key statistics active_api_keys = db.query(APIKey).filter( APIKey.user_id == current_user.id, APIKey.is_active == True ).count() # Get API usage statistics total_api_calls = db.query(APIUsage).filter( APIUsage.user_id == current_user.id ).count() # Calculate success rate and average response time success_count = db.query(APIUsage).filter( APIUsage.user_id == current_user.id, APIUsage.status_code >= 200, APIUsage.status_code < 300 ).count() avg_response_time = db.query(func.avg(APIUsage.response_time)).filter( APIUsage.user_id == current_user.id ).scalar() or 0 success_rate = (success_count / total_api_calls * 100) if total_api_calls > 0 else 0 # Get recent tickets recent_tickets = db.query(Ticket).filter( Ticket.user_id == current_user.id ).order_by(Ticket.created_at.desc()).limit(5).all() # Get API keys with usage api_keys = db.query(APIKey).filter( APIKey.user_id == current_user.id ).all() # Format recent tickets formatted_tickets = [ RecentTicket( id=ticket.id, subject=ticket.subject, status=ticket.status, created_at=ticket.created_at ) for ticket in recent_tickets ] # Format API keys formatted_api_keys = [] for api_key in api_keys: usage_count = db.query(APIUsage).filter( APIUsage.api_key_id == api_key.id ).count() last_used = db.query(APIUsage).filter( APIUsage.api_key_id == api_key.id ).order_by(APIUsage.created_at.desc()).first() formatted_api_keys.append({ "id": api_key.id, "name": api_key.name, "is_active": api_key.is_active, "usage_count": usage_count, "last_used": last_used.created_at if last_used else None }) # Create API usage data api_usage = APIUsageData( success_rate=success_rate, avg_response_time=float(avg_response_time) ) return DashboardStats( open_tickets=open_tickets, resolved_tickets=resolved_tickets, active_api_keys=active_api_keys, total_api_calls=total_api_calls, api_usage=api_usage, recent_tickets=formatted_tickets, api_keys=formatted_api_keys ) except Exception as e: raise HTTPException( status_code=500, detail=f"Error fetching dashboard statistics: {str(e)}" )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nesirat/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server