fix(api): restore Alertmanager project context
Some checks failed
CD Pipeline / tests (push) Successful in 1m26s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 4m23s
CD Pipeline / post-deploy-checks (push) Has been cancelled

This commit is contained in:
Your Name
2026-06-11 11:46:43 +08:00
parent e1cacdf39f
commit 6bae94fa0b
2 changed files with 76 additions and 9 deletions

View File

@@ -120,6 +120,26 @@ from src.workers import close_signal_worker, init_signal_worker
setup_logging()
logger = get_logger("awoooi.api")
ALERTMANAGER_WEBHOOK_PATH = "/api/v1/webhooks/alertmanager"
ALERTMANAGER_DEFAULT_PROJECT_ID = "awoooi"
def _resolve_request_project_context(request: Request) -> tuple[str | None, str]:
"""Resolve tenant context for RLS while keeping non-webhook routes fail-closed."""
for candidate in (
request.headers.get("X-Project-ID"),
request.headers.get("X-Tenant-ID"),
request.query_params.get("project_id"),
):
project_id = candidate.strip() if candidate else None
if project_id:
return project_id, "request.header_or_query"
if request.url.path == ALERTMANAGER_WEBHOOK_PATH:
return ALERTMANAGER_DEFAULT_PROJECT_ID, "request.alertmanager.default_project"
return None, "request.project_id.missing"
# =============================================================================
# Sentry SDK Initialization (Error Tracking - 補強 SignOz)
# Self-Hosted @ 192.168.0.110
@@ -905,15 +925,7 @@ async def request_logging_middleware(request: Request, call_next):
from src.core.context import clear_project_context, get_current_project_context, set_project_context
request_id = request.headers.get("X-Request-ID") or str(uuid4())
project_id = (
request.headers.get("X-Project-ID")
or request.headers.get("X-Tenant-ID")
or request.query_params.get("project_id")
)
project_id = project_id.strip() if project_id else None
source = "request.project_id.missing"
if project_id:
source = "request.header_or_query"
project_id, source = _resolve_request_project_context(request)
context_tokens = set_project_context(
project_id=project_id,