Opentracing#

Lima-API only support OpenTelemetry using opentelemetry-instrumentation-httpx. However, sometime you have old code that use OpenTracing, in that case in order to migrate the clients to Lima-API you could use the following code:

import random

from opentelemetry import trace as opentelemetry_trace
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
from opentelemetry.propagate import set_global_textmap
from opentelemetry.propagators.b3 import B3MultiFormat
from opentelemetry.sdk.trace import TracerProvider, IdGenerator
from opentracing_instrumentation import get_current_span


class OpenTracingIdGenerator(IdGenerator):
   def generate_span_id(self) -> int:
       span = get_current_span()
       if not span:
           return random.getrandbits(64)
       return span.span_id

   def generate_trace_id(self) -> int:
       span = get_current_span()
       if not span:
           return random.getrandbits(128)
       return span.trace_id

tracer_provider = TracerProvider(id_generator=OpenTracingIdGenerator())
opentelemetry_trace.set_tracer_provider(tracer_provider)
HTTPXClientInstrumentor().instrument(tracer_provider=tracer_provider)
set_global_textmap(B3MultiFormat())

With that code all request that Lima-API do, will get the span_id and trace_id from OpenTracing and sending using OpenTelemetry.