mirror of
https://github.com/hoshikawa2/compass_backoffice.git
synced 2026-07-09 22:04:20 +00:00
59 lines
2.0 KiB
Python
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")
|
|
)
|