Gregory-L's picture
fork mindXtrain from GitHub (Professor-Codephreak/mindXtrain@661bd41) as the mindX-specific line
dfb775d verified
Raw History Blame Contribute Delete
1.63 kB
"""OpenTelemetry init hooks (lazy import — opt-in via `--extra obs`).
If `opentelemetry-sdk` is not installed, `init_otel()` is a graceful no-op
and `is_enabled()` returns False — calls into the package never raise.
"""
from __future__ import annotations
import logging
import os
logger = logging.getLogger(__name__)
def is_enabled() -> bool:
try:
import opentelemetry # noqa: F401
except ImportError:
return False
return True
def init_otel(service_name: str = "mindxtrain", endpoint: str | None = None) -> bool:
"""Initialize OpenTelemetry tracing if available; return whether init ran."""
if not is_enabled():
logger.info("opentelemetry-sdk not installed; skipping init_otel")
return False
try:
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
except ImportError as exc: # pragma: no cover
logger.warning("partial opentelemetry install (%s); skipping init", exc)
return False
endpoint = endpoint or os.environ.get("MINDXTRAIN_OTEL_ENDPOINT", "")
resource = Resource.create({"service.name": service_name})
provider = TracerProvider(resource=resource)
if endpoint:
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint=endpoint)))
trace.set_tracer_provider(provider)
return True
__all__ = ["init_otel", "is_enabled"]