mirror of
https://github.com/hoshikawa2/compass_backoffice.git
synced 2026-07-09 22:04:20 +00:00
first commit
This commit is contained in:
58
src/api/dependencies/logging_context.py
Normal file
58
src/api/dependencies/logging_context.py
Normal file
@@ -0,0 +1,58 @@
|
||||
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")
|
||||
)
|
||||
Reference in New Issue
Block a user