refactor(coordinator-api): make rate limits configurable via environment variables
- Add configurable rate limit settings for all endpoints (jobs, miner, admin, marketplace, exchange) - Replace hardcoded rate limit decorators with lambda functions reading from settings - Add rate limit configuration logging during startup - Implement custom RateLimitExceeded exception handler with structured error responses - Add enhanced shutdown logging for database cleanup and resource management - Set default rate
This commit is contained in:
@@ -7,6 +7,7 @@ from ..schemas import JobCreate, JobView, JobResult, JobPaymentCreate
|
||||
from ..types import JobState
|
||||
from ..services import JobService
|
||||
from ..services.payments import PaymentService
|
||||
from ..config import settings
|
||||
from ..storage import SessionDep
|
||||
|
||||
limiter = Limiter(key_func=get_remote_address)
|
||||
@@ -14,7 +15,7 @@ router = APIRouter(tags=["client"])
|
||||
|
||||
|
||||
@router.post("/jobs", response_model=JobView, status_code=status.HTTP_201_CREATED, summary="Submit a job")
|
||||
@limiter.limit("100/minute")
|
||||
@limiter.limit(lambda: settings.rate_limit_jobs_submit)
|
||||
async def submit_job(
|
||||
req: JobCreate,
|
||||
request: Request,
|
||||
|
||||
@@ -9,6 +9,7 @@ from ..deps import require_miner_key
|
||||
from ..schemas import AssignedJob, JobFailSubmit, JobResultSubmit, JobState, MinerHeartbeat, MinerRegister, PollRequest
|
||||
from ..services import JobService, MinerService
|
||||
from ..services.receipts import ReceiptService
|
||||
from ..config import settings
|
||||
from ..storage import SessionDep
|
||||
from aitbc.logging import get_logger
|
||||
|
||||
@@ -18,7 +19,7 @@ router = APIRouter(tags=["miner"])
|
||||
|
||||
|
||||
@router.post("/miners/register", summary="Register or update miner")
|
||||
@limiter.limit("30/minute")
|
||||
@limiter.limit(lambda: settings.rate_limit_miner_register)
|
||||
async def register(
|
||||
req: MinerRegister,
|
||||
request: Request,
|
||||
@@ -30,7 +31,7 @@ async def register(
|
||||
return {"status": "ok", "session_token": record.session_token}
|
||||
|
||||
@router.post("/miners/heartbeat", summary="Send miner heartbeat")
|
||||
@limiter.limit("60/minute")
|
||||
@limiter.limit(lambda: settings.rate_limit_miner_heartbeat)
|
||||
async def heartbeat(
|
||||
req: MinerHeartbeat,
|
||||
request: Request,
|
||||
|
||||
Reference in New Issue
Block a user