code quality run
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# middleware/rate_limiter.py
|
||||
from typing import Dict
|
||||
from datetime import datetime, timedelta
|
||||
import logging
|
||||
from collections import defaultdict, deque
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Dict
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -16,7 +16,9 @@ class RateLimiter:
|
||||
self.cleanup_interval = 3600 # Clean up old entries every hour
|
||||
self.last_cleanup = datetime.utcnow()
|
||||
|
||||
def allow_request(self, client_id: str, max_requests: int, window_seconds: int) -> bool:
|
||||
def allow_request(
|
||||
self, client_id: str, max_requests: int, window_seconds: int
|
||||
) -> bool:
|
||||
"""
|
||||
Check if client is allowed to make a request
|
||||
Uses sliding window algorithm
|
||||
@@ -41,7 +43,9 @@ class RateLimiter:
|
||||
client_requests.append(now)
|
||||
return True
|
||||
|
||||
logger.warning(f"Rate limit exceeded for client {client_id}: {len(client_requests)}/{max_requests}")
|
||||
logger.warning(
|
||||
f"Rate limit exceeded for client {client_id}: {len(client_requests)}/{max_requests}"
|
||||
)
|
||||
return False
|
||||
|
||||
def _cleanup_old_entries(self):
|
||||
@@ -62,7 +66,9 @@ class RateLimiter:
|
||||
for client_id in clients_to_remove:
|
||||
del self.clients[client_id]
|
||||
|
||||
logger.info(f"Rate limiter cleanup completed. Removed {len(clients_to_remove)} inactive clients")
|
||||
logger.info(
|
||||
f"Rate limiter cleanup completed. Removed {len(clients_to_remove)} inactive clients"
|
||||
)
|
||||
|
||||
def get_client_stats(self, client_id: str) -> Dict[str, int]:
|
||||
"""Get statistics for a specific client"""
|
||||
@@ -72,11 +78,13 @@ class RateLimiter:
|
||||
hour_ago = now - timedelta(hours=1)
|
||||
day_ago = now - timedelta(days=1)
|
||||
|
||||
requests_last_hour = sum(1 for req_time in client_requests if req_time > hour_ago)
|
||||
requests_last_hour = sum(
|
||||
1 for req_time in client_requests if req_time > hour_ago
|
||||
)
|
||||
requests_last_day = sum(1 for req_time in client_requests if req_time > day_ago)
|
||||
|
||||
return {
|
||||
"requests_last_hour": requests_last_hour,
|
||||
"requests_last_day": requests_last_day,
|
||||
"total_tracked_requests": len(client_requests)
|
||||
}
|
||||
"total_tracked_requests": len(client_requests),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user