Implement Manticore fully and re-theme
This commit is contained in:
@@ -5,12 +5,19 @@ import time
|
||||
from asgiref.sync import sync_to_async
|
||||
from django.conf import settings
|
||||
|
||||
from core.events.manticore import get_event_ledger_backend
|
||||
from core.models import ConversationEvent
|
||||
from core.observability.tracing import ensure_trace_id
|
||||
from core.util import logs
|
||||
|
||||
log = logs.get_logger("event-ledger")
|
||||
|
||||
|
||||
def event_ledger_enabled() -> bool:
|
||||
return bool(getattr(settings, "EVENT_LEDGER_DUAL_WRITE", False))
|
||||
return bool(
|
||||
getattr(settings, "EVENT_LEDGER_DUAL_WRITE", False)
|
||||
or getattr(settings, "EVENT_PRIMARY_WRITE_PATH", False)
|
||||
)
|
||||
|
||||
|
||||
def event_ledger_status() -> dict:
|
||||
@@ -72,38 +79,78 @@ def append_event_sync(
|
||||
normalized_direction = _normalize_direction(direction)
|
||||
normalized_trace = ensure_trace_id(trace_id, payload or {})
|
||||
|
||||
safe_ts = _safe_ts(ts)
|
||||
transport = str(origin_transport or "").strip().lower()
|
||||
message_id = str(origin_message_id or "").strip()
|
||||
dedup_row = None
|
||||
if transport and message_id:
|
||||
dedup_row = (
|
||||
ConversationEvent.objects.filter(
|
||||
actor_identifier = str(actor_identifier or "").strip()
|
||||
origin_chat_id = str(origin_chat_id or "").strip()
|
||||
payload = dict(payload or {})
|
||||
raw_payload = dict(raw_payload or {})
|
||||
|
||||
dual_write = bool(getattr(settings, "EVENT_LEDGER_DUAL_WRITE", False))
|
||||
primary_write = bool(getattr(settings, "EVENT_PRIMARY_WRITE_PATH", False))
|
||||
write_django = dual_write and not primary_write
|
||||
|
||||
row = None
|
||||
if write_django:
|
||||
dedup_row = None
|
||||
if transport and message_id:
|
||||
dedup_row = (
|
||||
ConversationEvent.objects.filter(
|
||||
user=user,
|
||||
session=session,
|
||||
event_type=normalized_type,
|
||||
origin_transport=transport,
|
||||
origin_message_id=message_id,
|
||||
)
|
||||
.order_by("-created_at")
|
||||
.first()
|
||||
)
|
||||
if dedup_row is not None:
|
||||
row = dedup_row
|
||||
else:
|
||||
row = ConversationEvent.objects.create(
|
||||
user=user,
|
||||
session=session,
|
||||
ts=safe_ts,
|
||||
event_type=normalized_type,
|
||||
direction=normalized_direction,
|
||||
actor_identifier=actor_identifier,
|
||||
origin_transport=transport,
|
||||
origin_message_id=message_id,
|
||||
origin_chat_id=origin_chat_id,
|
||||
payload=payload,
|
||||
raw_payload=raw_payload,
|
||||
trace_id=normalized_trace,
|
||||
)
|
||||
.order_by("-created_at")
|
||||
.first()
|
||||
)
|
||||
if dedup_row is not None:
|
||||
return dedup_row
|
||||
|
||||
return ConversationEvent.objects.create(
|
||||
user=user,
|
||||
session=session,
|
||||
ts=_safe_ts(ts),
|
||||
event_type=normalized_type,
|
||||
direction=normalized_direction,
|
||||
actor_identifier=str(actor_identifier or "").strip(),
|
||||
origin_transport=transport,
|
||||
origin_message_id=message_id,
|
||||
origin_chat_id=str(origin_chat_id or "").strip(),
|
||||
payload=dict(payload or {}),
|
||||
raw_payload=dict(raw_payload or {}),
|
||||
trace_id=normalized_trace,
|
||||
)
|
||||
try:
|
||||
get_event_ledger_backend().upsert_event(
|
||||
user_id=int(user.id),
|
||||
person_id=str(session.identifier.person_id),
|
||||
session_id=str(session.id),
|
||||
event_type=normalized_type,
|
||||
direction=normalized_direction,
|
||||
ts=safe_ts,
|
||||
actor_identifier=actor_identifier,
|
||||
origin_transport=transport,
|
||||
origin_message_id=message_id,
|
||||
origin_chat_id=origin_chat_id,
|
||||
payload=payload,
|
||||
raw_payload=raw_payload,
|
||||
trace_id=normalized_trace,
|
||||
)
|
||||
except Exception as exc:
|
||||
if primary_write:
|
||||
raise
|
||||
log.warning(
|
||||
"Event ledger manticore dual-write failed session=%s event_type=%s err=%s",
|
||||
getattr(session, "id", "-"),
|
||||
normalized_type,
|
||||
exc,
|
||||
)
|
||||
|
||||
return row
|
||||
|
||||
|
||||
async def append_event(**kwargs):
|
||||
|
||||
Reference in New Issue
Block a user