mirror of
https://github.com/langgenius/dify.git
synced 2026-03-06 15:45:14 +00:00
- Add resolved_parent_context property to BaseTraceInfo for reusable parent context extraction - Refactor enterprise_trace.py to use property instead of duplicated dict plucking (~19 lines eliminated) - Fix UUID validation in exporter.py with specific error logging for invalid trace correlation IDs - Add error isolation in event_handlers.py to prevent telemetry failures from breaking user operations - Replace pickle-based payload_fallback with JSON storage rehydration for security - Update TelemetryEnvelope to use Pydantic v2 ConfigDict with extra='forbid' - Update tests to reflect contract changes and new error handling behavior
74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
"""Telemetry gateway contracts and data structures.
|
|
|
|
This module defines the envelope format for telemetry events and the routing
|
|
configuration that determines how each event type is processed.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from enum import StrEnum
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class TelemetryCase(StrEnum):
|
|
"""Enumeration of all known telemetry event cases."""
|
|
|
|
WORKFLOW_RUN = "workflow_run"
|
|
NODE_EXECUTION = "node_execution"
|
|
DRAFT_NODE_EXECUTION = "draft_node_execution"
|
|
MESSAGE_RUN = "message_run"
|
|
TOOL_EXECUTION = "tool_execution"
|
|
MODERATION_CHECK = "moderation_check"
|
|
SUGGESTED_QUESTION = "suggested_question"
|
|
DATASET_RETRIEVAL = "dataset_retrieval"
|
|
GENERATE_NAME = "generate_name"
|
|
PROMPT_GENERATION = "prompt_generation"
|
|
APP_CREATED = "app_created"
|
|
APP_UPDATED = "app_updated"
|
|
APP_DELETED = "app_deleted"
|
|
FEEDBACK_CREATED = "feedback_created"
|
|
|
|
|
|
class SignalType(StrEnum):
|
|
"""Signal routing type for telemetry cases."""
|
|
|
|
TRACE = "trace"
|
|
METRIC_LOG = "metric_log"
|
|
|
|
|
|
class CaseRoute(BaseModel):
|
|
"""Routing configuration for a telemetry case.
|
|
|
|
Attributes:
|
|
signal_type: The type of signal (trace or metric_log).
|
|
ce_eligible: Whether this case is eligible for community edition tracing.
|
|
"""
|
|
|
|
signal_type: SignalType
|
|
ce_eligible: bool
|
|
|
|
|
|
class TelemetryEnvelope(BaseModel):
|
|
"""Envelope for telemetry events.
|
|
|
|
Attributes:
|
|
case: The telemetry case type.
|
|
tenant_id: The tenant identifier.
|
|
event_id: Unique event identifier for deduplication.
|
|
payload: The main event payload (inline for small payloads,
|
|
empty when offloaded to storage via ``payload_ref``).
|
|
metadata: Optional metadata dictionary. When the gateway
|
|
offloads a large payload to object storage, this contains
|
|
``{"payload_ref": "<storage_key>"}``.
|
|
"""
|
|
|
|
model_config = ConfigDict(extra="forbid", use_enum_values=False)
|
|
|
|
case: TelemetryCase
|
|
tenant_id: str
|
|
event_id: str
|
|
payload: dict[str, Any]
|
|
metadata: dict[str, Any] | None = None
|