47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
|
|
"""
|
||
|
|
AppTrigger management service.
|
||
|
|
|
||
|
|
Handles AppTrigger model CRUD operations and status management.
|
||
|
|
This service centralizes all AppTrigger-related business logic.
|
||
|
|
"""
|
||
|
|
|
||
|
|
import logging
|
||
|
|
|
||
|
|
from sqlalchemy import update
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
|
||
|
|
from extensions.ext_database import db
|
||
|
|
from models.enums import AppTriggerStatus
|
||
|
|
from models.trigger import AppTrigger
|
||
|
|
|
||
|
|
logger = logging.getLogger(__name__)
|
||
|
|
|
||
|
|
|
||
|
|
class AppTriggerService:
|
||
|
|
"""Service for managing AppTrigger lifecycle and status."""
|
||
|
|
|
||
|
|
@staticmethod
|
||
|
|
def mark_tenant_triggers_rate_limited(tenant_id: str) -> None:
|
||
|
|
"""
|
||
|
|
Mark all enabled triggers for a tenant as rate limited due to quota exceeded.
|
||
|
|
|
||
|
|
This method is called when a tenant's quota is exhausted. It updates all
|
||
|
|
enabled triggers to RATE_LIMITED status to prevent further executions until
|
||
|
|
quota is restored.
|
||
|
|
|
||
|
|
Args:
|
||
|
|
tenant_id: Tenant ID whose triggers should be marked as rate limited
|
||
|
|
|
||
|
|
"""
|
||
|
|
try:
|
||
|
|
with Session(db.engine) as session:
|
||
|
|
session.execute(
|
||
|
|
update(AppTrigger)
|
||
|
|
.where(AppTrigger.tenant_id == tenant_id, AppTrigger.status == AppTriggerStatus.ENABLED)
|
||
|
|
.values(status=AppTriggerStatus.RATE_LIMITED)
|
||
|
|
)
|
||
|
|
session.commit()
|
||
|
|
logger.info("Marked all enabled triggers as rate limited for tenant %s", tenant_id)
|
||
|
|
except Exception:
|
||
|
|
logger.exception("Failed to mark all enabled triggers as rate limited for tenant %s", tenant_id)
|