| import logging |
| from contextlib import contextmanager |
|
|
| logger = logging.getLogger("hyperflow.telemetry") |
|
|
| class DummySpan: |
| def set_attribute(self, key: str, value: Any) -> None: |
| pass |
| def __enter__(self): |
| return self |
| def __exit__(self, exc_type, exc_val, exc_tb): |
| pass |
|
|
| class DummyTracer: |
| def start_as_current_span(self, name: str): |
| return DummySpan() |
|
|
| try: |
| from opentelemetry import trace |
| from opentelemetry.sdk.trace import TracerProvider |
| from opentelemetry.sdk.trace.export import BatchSpanProcessor |
| from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter |
|
|
| def setup_telemetry(service_name: str = "hyperflow-ml"): |
| try: |
| provider = TracerProvider() |
| exporter = OTLPSpanExporter(endpoint="http://localhost:4318/v1/traces") |
| provider.add_span_processor(BatchSpanProcessor(exporter)) |
| trace.set_tracer_provider(provider) |
| logger.info("OpenTelemetry exporter configured for endpoint http://localhost:4318/v1/traces") |
| except Exception as e: |
| logger.warning(f"OpenTelemetry initialization notice: {e}") |
|
|
| tracer = trace.get_tracer("hyperflow") |
| except Exception: |
| def setup_telemetry(service_name: str = "hyperflow-ml"): |
| logger.info("Telemetry provider initialized in fallback mode.") |
| tracer = DummyTracer() |
|
|