mirror of
https://github.com/langgenius/dify.git
synced 2026-03-07 00:26:36 +08:00
Move routing table, emit(), and is_enterprise_telemetry_enabled() from enterprise/telemetry/gateway.py into core/telemetry/gateway.py so both CE and EE share one code path. The ce_eligible flag in CASE_ROUTING controls which events flow in CE — flipping it is the only change needed to enable an event in community edition. - Delete enterprise/telemetry/gateway.py (class-based singleton) - Create core/telemetry/gateway.py (stateless functions, no shared state) - Simplify core/telemetry/__init__.py to thin facade over gateway - Remove TelemetryGateway class and get_gateway() from ext_enterprise_telemetry - Single-source is_enterprise_telemetry_enabled in core.telemetry.gateway - Fix pre-existing test bugs (missing dify.event.id in metric handler tests) - Update all imports and mock paths across 7 test files
51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
"""Flask extension for enterprise telemetry lifecycle management.
|
|
|
|
Initializes the EnterpriseExporter singleton during ``create_app()``
|
|
(single-threaded), registers blinker event handlers, and hooks atexit
|
|
for graceful shutdown.
|
|
|
|
Skipped entirely when ``ENTERPRISE_ENABLED`` and ``ENTERPRISE_TELEMETRY_ENABLED``
|
|
are false (``is_enabled()`` gate).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import atexit
|
|
import logging
|
|
from typing import TYPE_CHECKING
|
|
|
|
from configs import dify_config
|
|
|
|
if TYPE_CHECKING:
|
|
from dify_app import DifyApp
|
|
from enterprise.telemetry.exporter import EnterpriseExporter
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_exporter: EnterpriseExporter | None = None
|
|
|
|
|
|
def is_enabled() -> bool:
|
|
return bool(dify_config.ENTERPRISE_ENABLED and dify_config.ENTERPRISE_TELEMETRY_ENABLED)
|
|
|
|
|
|
def init_app(app: DifyApp) -> None:
|
|
global _exporter
|
|
|
|
if not is_enabled():
|
|
return
|
|
|
|
from enterprise.telemetry.exporter import EnterpriseExporter
|
|
|
|
_exporter = EnterpriseExporter(dify_config)
|
|
atexit.register(_exporter.shutdown)
|
|
|
|
# Import to trigger @signal.connect decorator registration
|
|
import enterprise.telemetry.event_handlers # noqa: F401 # type: ignore[reportUnusedImport]
|
|
|
|
logger.info("Enterprise telemetry initialized")
|
|
|
|
|
|
def get_enterprise_exporter() -> EnterpriseExporter | None:
|
|
return _exporter
|