|
| 1 | +from os import getenv |
| 2 | + |
| 3 | +from opentelemetry import trace |
| 4 | +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import \ |
| 5 | + OTLPSpanExporter |
| 6 | +from opentelemetry.instrumentation.flask import FlaskInstrumentor |
| 7 | +from opentelemetry.instrumentation.logging import LoggingInstrumentor |
| 8 | +from opentelemetry.sdk.resources import Resource |
| 9 | +from opentelemetry.sdk.trace import TracerProvider |
| 10 | +from opentelemetry.sdk.trace.export import BatchSpanProcessor |
| 11 | + |
| 12 | +from app.helpers.utils import strtobool |
| 13 | + |
| 14 | + |
| 15 | +def initialize() -> None: |
| 16 | + if not strtobool(getenv("OTEL_SDK_DISABLED", "false")): |
| 17 | + if strtobool(getenv("OTEL_ENABLE_LOGGING", "false")): |
| 18 | + LoggingInstrumentor().instrument() |
| 19 | + |
| 20 | + |
| 21 | +def initialize_flask(app): |
| 22 | + if not strtobool(getenv("OTEL_SDK_DISABLED", "false")): |
| 23 | + if strtobool(getenv("OTEL_ENABLE_FLASK", "false")): |
| 24 | + FlaskInstrumentor().instrument_app(app) |
| 25 | + |
| 26 | + |
| 27 | +def setup_trace_provider(): |
| 28 | + if not strtobool(getenv("OTEL_SDK_DISABLED", "false")): |
| 29 | + # Since we created a new tracer, the default span processor is gone. We need to |
| 30 | + # create a new one using the default OTEL env variables and ad it to the tracer. |
| 31 | + span_processor = BatchSpanProcessor( |
| 32 | + OTLPSpanExporter( |
| 33 | + endpoint=getenv('OTEL_EXPORTER_OTLP_ENDPOINT', "http://localhost:4317"), |
| 34 | + headers=getenv('OTEL_EXPORTER_OTLP_HEADERS'), |
| 35 | + insecure=strtobool(getenv('OTEL_EXPORTER_OTLP_INSECURE', "false")) |
| 36 | + ) |
| 37 | + ) |
| 38 | + |
| 39 | + provider = TracerProvider(resource=Resource.create()) |
| 40 | + provider.add_span_processor(span_processor) |
| 41 | + trace.set_tracer_provider(provider) |
0 commit comments