File size: 1,938 Bytes
d8d19cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""
Performance monitoring API endpoints.
"""
from fastapi import APIRouter, HTTPException
from typing import Dict, Any
import logging

from app.utils.performance_monitor import get_performance_report

logger = logging.getLogger(__name__)
router = APIRouter()

@router.get("/performance/metrics", response_model=Dict[str, Any])
async def get_performance_metrics():
    """
    Get current performance metrics and recommendations.
    """
    try:
        logger.info("Fetching performance metrics")
        
        report = get_performance_report()
        
        logger.info(f"Performance report generated: {report['metrics']['total_queries']} queries tracked")
        return {
            "status": "success",
            "data": report
        }
        
    except Exception as e:
        logger.error(f"Error fetching performance metrics: {e}")
        raise HTTPException(
            status_code=500, 
            detail=f"Failed to fetch performance metrics: {str(e)}"
        )

@router.post("/performance/reset")
async def reset_performance_metrics():
    """
    Reset performance metrics (useful for testing and monitoring).
    """
    try:
        logger.info("Resetting performance metrics")
        
        from app.utils.performance_monitor import performance_metrics
        
        # Reset metrics
        performance_metrics.query_times = []
        performance_metrics.slow_queries = []
        performance_metrics.total_queries = 0
        performance_metrics.total_time = 0.0
        
        logger.info("Performance metrics reset successfully")
        return {
            "status": "success",
            "message": "Performance metrics reset successfully"
        }
        
    except Exception as e:
        logger.error(f"Error resetting performance metrics: {e}")
        raise HTTPException(
            status_code=500, 
            detail=f"Failed to reset performance metrics: {str(e)}"
        )