mirror of
https://github.com/langgenius/dify.git
synced 2026-05-01 07:58:02 +08:00
refactor(telemetry): migrate to type-safe enum-based event routing with centralized enterprise filtering
Changes: - Change TelemetryEvent.name from str to TraceTaskName enum for type safety - Remove hardcoded trace_task_name_map from facade (no mapping needed) - Add centralized enterprise-only filter in TelemetryFacade.emit() - Rename is_telemetry_enabled() to is_enterprise_telemetry_enabled() - Update all 11 call sites to pass TraceTaskName enum values - Remove redundant enterprise guard from draft_trace.py - Add unit tests for TelemetryFacade.emit() routing (6 tests) - Add unit tests for TraceQueueManager telemetry guard (5 tests) - Fix test fixture scoping issue for full test suite compatibility - Fix tenant_id handling in agent tool callback handler Benefits: - 100% type-safe: basedpyright catches errors at compile time - No string literals: eliminates entire class of typo bugs - Single point of control: centralized filtering in facade - All guards removed except facade - Zero regressions: 4887 tests passing Verification: - make lint: PASS - make type-check: PASS (0 errors, 0 warnings) - pytest: 4887 passed, 8 skipped
This commit is contained in:
@ -5,7 +5,7 @@ from pydantic import BaseModel
|
||||
|
||||
from configs import dify_config
|
||||
from core.ops.ops_trace_manager import TraceQueueManager
|
||||
from core.telemetry import TelemetryContext, TelemetryEvent, TelemetryFacade
|
||||
from core.telemetry import TelemetryContext, TelemetryEvent, TelemetryFacade, TraceTaskName
|
||||
from core.tools.entities.tool_entities import ToolInvokeMessage
|
||||
|
||||
_TEXT_COLOR_MAPPING = {
|
||||
@ -36,13 +36,15 @@ class DifyAgentCallbackHandler(BaseModel):
|
||||
|
||||
color: str | None = ""
|
||||
current_loop: int = 1
|
||||
tenant_id: str | None = None
|
||||
|
||||
def __init__(self, color: str | None = None):
|
||||
def __init__(self, color: str | None = None, tenant_id: str | None = None):
|
||||
super().__init__()
|
||||
"""Initialize callback handler."""
|
||||
# use a specific color is not specified
|
||||
self.color = color or "green"
|
||||
self.current_loop = 1
|
||||
self.tenant_id = tenant_id
|
||||
|
||||
def on_tool_start(
|
||||
self,
|
||||
@ -73,8 +75,12 @@ class DifyAgentCallbackHandler(BaseModel):
|
||||
if trace_manager:
|
||||
TelemetryFacade.emit(
|
||||
TelemetryEvent(
|
||||
name="tool",
|
||||
context=TelemetryContext(app_id=trace_manager.app_id, user_id=trace_manager.user_id),
|
||||
name=TraceTaskName.TOOL_TRACE,
|
||||
context=TelemetryContext(
|
||||
tenant_id=self.tenant_id,
|
||||
app_id=trace_manager.app_id,
|
||||
user_id=trace_manager.user_id,
|
||||
),
|
||||
payload={
|
||||
"message_id": message_id,
|
||||
"tool_name": tool_name,
|
||||
|
||||
Reference in New Issue
Block a user