Converted TextMap propagator getter to a class and added keys method (#1196)
Co-authored-by: alrex <aboten@lightstep.com>
This commit is contained in:
parent
7fb60a2ba6
commit
d8fb6d1072
|
|
@ -67,7 +67,7 @@ from opentelemetry import propagators, trace
|
|||
from opentelemetry.instrumentation.celery import utils
|
||||
from opentelemetry.instrumentation.celery.version import __version__
|
||||
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
||||
from opentelemetry.trace.propagation import get_current_span
|
||||
from opentelemetry.trace.propagation.textmap import DictGetter
|
||||
from opentelemetry.trace.status import Status, StatusCode
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -84,6 +84,20 @@ _TASK_NAME_KEY = "celery.task_name"
|
|||
_MESSAGE_ID_ATTRIBUTE_NAME = "messaging.message_id"
|
||||
|
||||
|
||||
class CarrierGetter(DictGetter):
|
||||
def get(self, carrier, key):
|
||||
value = getattr(carrier, key, [])
|
||||
if isinstance(value, str) or not isinstance(value, Iterable):
|
||||
value = (value,)
|
||||
return value
|
||||
|
||||
def keys(self, carrier):
|
||||
return []
|
||||
|
||||
|
||||
carrier_getter = CarrierGetter()
|
||||
|
||||
|
||||
class CeleryInstrumentor(BaseInstrumentor):
|
||||
def _instrument(self, **kwargs):
|
||||
tracer_provider = kwargs.get("tracer_provider")
|
||||
|
|
@ -118,7 +132,7 @@ class CeleryInstrumentor(BaseInstrumentor):
|
|||
return
|
||||
|
||||
request = task.request
|
||||
tracectx = propagators.extract(carrier_extractor, request) or None
|
||||
tracectx = propagators.extract(carrier_getter, request) or None
|
||||
|
||||
logger.debug("prerun signal start task_id=%s", task_id)
|
||||
|
||||
|
|
@ -246,10 +260,3 @@ class CeleryInstrumentor(BaseInstrumentor):
|
|||
# Use `str(reason)` instead of `reason.message` in case we get
|
||||
# something that isn't an `Exception`
|
||||
span.set_attribute(_TASK_RETRY_REASON_KEY, str(reason))
|
||||
|
||||
|
||||
def carrier_extractor(carrier, key):
|
||||
value = getattr(carrier, key, [])
|
||||
if isinstance(value, str) or not isinstance(value, Iterable):
|
||||
value = (value,)
|
||||
return value
|
||||
|
|
|
|||
Loading…
Reference in New Issue