Files
compass_backoffice/src/api/dependencies/logging_context.py
2026-06-13 08:23:21 -03:00

59 lines
2.0 KiB
Python

import uuid
from datetime import datetime, timezone
from src.api.schemas.anatel_schemas import TicketRequestEvent
from src.core.config import settings
from src.core.logging import (
set_conversation_start_ts,
set_request_id,
set_requesting_agent,
set_session_id,
set_source_channel,
set_trace_id,
set_user_id,
)
def set_ticket_log_context(event: TicketRequestEvent, transaction_id: str = None) -> None:
"""
Populates logging contextvars from a TicketRequestEvent.
Centralised so both the FastAPI dependency and the OCI streaming
worker call the same logic. Covers correlation IDs (request/session/
trace/user) plus the conversation-context fields required by the
OCI Logging policy (source_channel, conversation_start_time_ts,
requesting_agent).
"""
transaction_id = transaction_id or event.transactionId
origin = event.origin
submitted_by = origin.submittedBy if origin else None
set_request_id(str(uuid.uuid4()))
set_session_id(transaction_id)
set_trace_id(transaction_id)
set_user_id(submitted_by.userId if submitted_by else "")
set_requesting_agent(settings.AGENT_TYPE)
if origin and origin.sourceSystem:
set_source_channel(origin.sourceSystem)
set_conversation_start_ts(datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z"))
def inject_log_context(event: TicketRequestEvent) -> TicketRequestEvent:
"""FastAPI dependency: calls set_ticket_log_context before entering the route handler."""
set_ticket_log_context(event)
return event
def set_emulator_log_context(transaction_id: str, user_id: str = "cms") -> None:
"""Populates logging contextvars for emulator REST endpoints."""
set_request_id(str(uuid.uuid4()))
set_session_id(transaction_id)
set_trace_id(transaction_id)
set_user_id(user_id)
set_requesting_agent(settings.AGENT_TYPE)
set_source_channel("cms")
set_conversation_start_ts(
datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z")
)