mirror of
https://github.com/langgenius/dify.git
synced 2026-08-31 21:25:21 +08:00
86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
"""Blinker signal handlers for enterprise telemetry.
|
|
|
|
Registered at import time via ``@signal.connect`` decorators.
|
|
Import must happen during ``ext_enterprise_telemetry.init_app()`` to
|
|
ensure handlers fire. Each handler delegates to ``core.telemetry``
|
|
which handles routing, EE-gating, and dispatch.
|
|
|
|
All handlers are best-effort: exceptions are caught and logged so that
|
|
telemetry failures never break user-facing operations.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from events.app_event import app_was_created, app_was_deleted, app_was_updated
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
__all__ = [
|
|
"_handle_app_created",
|
|
"_handle_app_deleted",
|
|
"_handle_app_updated",
|
|
]
|
|
|
|
|
|
def _optional_str(value: object) -> str | None:
|
|
"""Coerce a value to ``str | None`` for telemetry payloads."""
|
|
if value is None:
|
|
return None
|
|
return str(value)
|
|
|
|
|
|
@app_was_created.connect
|
|
def _handle_app_created(sender: object, **kwargs: object) -> None:
|
|
try:
|
|
from core.telemetry import AppCreatedEvent, TelemetryContext, emit
|
|
|
|
emit(
|
|
AppCreatedEvent(
|
|
context=TelemetryContext(
|
|
tenant_id=str(getattr(sender, "tenant_id", "") or ""),
|
|
),
|
|
payload={
|
|
"app_id": _optional_str(getattr(sender, "id", None)),
|
|
"mode": _optional_str(getattr(sender, "mode", None)),
|
|
},
|
|
)
|
|
)
|
|
except Exception:
|
|
logger.warning("Failed to emit app_created telemetry", exc_info=True)
|
|
|
|
|
|
@app_was_updated.connect
|
|
def _handle_app_updated(sender: object, **kwargs: object) -> None:
|
|
try:
|
|
from core.telemetry import AppUpdatedEvent, TelemetryContext, emit
|
|
|
|
emit(
|
|
AppUpdatedEvent(
|
|
context=TelemetryContext(
|
|
tenant_id=str(getattr(sender, "tenant_id", "") or ""),
|
|
),
|
|
payload={"app_id": _optional_str(getattr(sender, "id", None))},
|
|
)
|
|
)
|
|
except Exception:
|
|
logger.warning("Failed to emit app_updated telemetry", exc_info=True)
|
|
|
|
|
|
@app_was_deleted.connect
|
|
def _handle_app_deleted(sender: object, **kwargs: object) -> None:
|
|
try:
|
|
from core.telemetry import AppDeletedEvent, TelemetryContext, emit
|
|
|
|
emit(
|
|
AppDeletedEvent(
|
|
context=TelemetryContext(
|
|
tenant_id=str(getattr(sender, "tenant_id", "") or ""),
|
|
),
|
|
payload={"app_id": _optional_str(getattr(sender, "id", None))},
|
|
)
|
|
)
|
|
except Exception:
|
|
logger.warning("Failed to emit app_deleted telemetry", exc_info=True)
|