initial project setup with README and ignore

This commit is contained in:
2026-04-08 15:13:42 +05:30
commit 2d5688cb35
47 changed files with 7929 additions and 0 deletions

79
app/routes/cache.py Normal file
View File

@@ -0,0 +1,79 @@
"""Cache management API endpoints."""
import logging
from fastapi import APIRouter, HTTPException
from typing import Dict, Any
from app.services import cache
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/v1/cache", tags=["Cache Management"])
@router.get("/stats", response_model=Dict[str, Any])
async def get_cache_stats():
"""
Get cache statistics.
Returns:
- hits: Number of cache hits
- misses: Number of cache misses
- sets: Number of cache writes
- total_keys: Current number of cached route keys
- enabled: Whether Redis cache is enabled
"""
try:
stats = cache.get_stats()
# Calculate hit rate
total_requests = stats.get("hits", 0) + stats.get("misses", 0)
if total_requests > 0:
stats["hit_rate"] = round(stats.get("hits", 0) / total_requests * 100, 2)
else:
stats["hit_rate"] = 0.0
return stats
except Exception as e:
logger.error(f"Error getting cache stats: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.get("/keys")
async def list_cache_keys(pattern: str = "routes:*"):
"""
List cache keys matching pattern.
- **pattern**: Redis key pattern (default: "routes:*")
"""
try:
keys = cache.get_keys(pattern)
return {
"pattern": pattern,
"count": len(keys),
"keys": keys[:100] # Limit to first 100 for response size
}
except Exception as e:
logger.error(f"Error listing cache keys: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.delete("/clear")
async def clear_cache(pattern: str = "routes:*"):
"""
Clear cache keys matching pattern.
- **pattern**: Redis key pattern to delete (default: "routes:*")
[WARN] **Warning**: This will delete cached route optimizations!
"""
try:
deleted_count = cache.delete(pattern)
logger.info(f"Cleared {deleted_count} cache keys matching pattern: {pattern}")
return {
"pattern": pattern,
"deleted_count": deleted_count,
"message": f"Cleared {deleted_count} cache keys"
}
except Exception as e:
logger.error(f"Error clearing cache: {e}")
raise HTTPException(status_code=500, detail="Internal server error")