def inject( self, carrier: textmap.CarrierT, context: typing.Optional[Context] = None, setter: textmap.Setter = default_setter, # type: ignore ) -> None: """Injects SpanContext into the HTTP response carrier.""" span = trace.get_current_span(context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return header_name = "Server-Timing" flags = span_context.trace_flags trace_id = format_trace_id(span_context.trace_id) span_id = format_span_id(span_context.span_id) setter.set( carrier, header_name, f'traceparent;desc="00-{trace_id}-{span_id}-{flags:02x}"', ) setter.set( carrier, _HTTP_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS, header_name, )
def inject( self, carrier: CarrierT, context: typing.Optional[Context] = None, setter: Setter = default_setter, ) -> None: span = trace.get_current_span(context=context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return span_parent_id = span.parent.span_id if span.parent else 0 trace_flags = span_context.trace_flags if trace_flags.sampled: trace_flags |= self.DEBUG_FLAG # set span identity setter.set( carrier, self.TRACE_ID_KEY, _format_uber_trace_id( span_context.trace_id, span_context.span_id, span_parent_id, trace_flags, ), ) # set span baggage, if any baggage_entries = baggage.get_all(context=context) if not baggage_entries: return for key, value in baggage_entries.items(): baggage_key = self.BAGGAGE_PREFIX + key setter.set(carrier, baggage_key, urllib.parse.quote(str(value)))
def inject( self, carrier: textmap.CarrierT, context: typing.Optional[Context] = None, setter: textmap.Setter = default_setter, ) -> None: """Injects SpanContext into the HTTP response carrier.""" span = trace.get_current_span(context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return header_name = "traceresponse" setter.set( carrier, header_name, "00-{trace_id}-{span_id}-{:02x}".format( span_context.trace_flags, trace_id=format_trace_id(span_context.trace_id), span_id=format_span_id(span_context.span_id), ), ) setter.set( carrier, _HTTP_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS, header_name, )
def inject( self, carrier: CarrierT, context: typing.Optional[Context] = None, setter: Setter = default_setter, ) -> None: span = trace.get_current_span(context=context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return sampled = (trace.TraceFlags.SAMPLED & span_context.trace_flags) != 0 fields = [ format_trace_id(span_context.trace_id), format_span_id(span_context.span_id), "1" if sampled else "0", ] span_parent = getattr(span, "parent", None) if span_parent: fields.append(format_span_id(span_parent.span_id)) setter.set(carrier, self.SINGLE_HEADER_KEY, "-".join(fields))
def inject( self, carrier: CarrierT, context: typing.Optional[Context] = None, setter: Setter = default_setter, ) -> None: span = trace.get_current_span(context) setter.set(carrier, self.TRACE_ID_KEY, str(span.get_span_context().trace_id)) setter.set(carrier, self.SPAN_ID_KEY, str(span.get_span_context().span_id))
def inject( self, carrier: CarrierT, context: typing.Optional[Context] = None, setter: Setter = default_setter, ) -> None: span = get_current_span(context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return sampled = (trace.TraceFlags.SAMPLED & span.context.trace_flags) != 0 setter.set( carrier, self.TRACE_ID_KEY, format_trace_id(span.context.trace_id), ) setter.set(carrier, self.PARENT_ID_KEY, format_span_id(span.context.span_id)) setter.set( carrier, self.SAMPLING_PRIORITY_KEY, str(constants.AUTO_KEEP if sampled else constants.AUTO_REJECT), ) if constants.DD_ORIGIN in span.context.trace_state: setter.set( carrier, self.ORIGIN_KEY, span.context.trace_state[constants.DD_ORIGIN], )
def inject( self, carrier: CarrierT, context: typing.Optional[Context] = None, setter: Setter = default_setter, ) -> None: span = trace.get_current_span(context=context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return sampled = (trace.TraceFlags.SAMPLED & span_context.trace_flags) != 0 setter.set( carrier, self.TRACE_ID_KEY, format_trace_id(span_context.trace_id), ) setter.set(carrier, self.SPAN_ID_KEY, format_span_id(span_context.span_id)) span_parent = getattr(span, "parent", None) if span_parent is not None: setter.set( carrier, self.PARENT_SPAN_ID_KEY, format_span_id(span_parent.span_id), ) setter.set(carrier, self.SAMPLED_KEY, "1" if sampled else "0")
def inject( self, carrier: textmap.CarrierT, context: Optional[Context] = None, setter: textmap.Setter = textmap.default_setter, ) -> None: """Injects Baggage into the carrier. See `opentelemetry.propagators.textmap.TextMapPropagator.inject` """ baggage_entries = get_all(context=context) if not baggage_entries: return baggage_string = _format_baggage(baggage_entries) setter.set(carrier, self._BAGGAGE_HEADER_NAME, baggage_string)
def inject( self, carrier: textmap.CarrierT, context: typing.Optional[Context] = None, setter: textmap.Setter = textmap.default_setter, ) -> None: span = trace.get_current_span(context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return header = "{}/{};o={}".format( format_trace_id(span_context.trace_id), span_context.span_id, int(span_context.trace_flags.sampled), ) setter.set(carrier, _TRACE_CONTEXT_HEADER_NAME, header)
def inject( self, carrier: CarrierT, context: typing.Optional[Context] = None, setter: Setter = default_setter, ) -> None: span = trace.get_current_span(context=context) span_context = span.get_span_context() if not span_context.is_valid: return otel_trace_id = f"{span_context.trace_id:032x}" xray_trace_id = TRACE_ID_DELIMITER.join( [ TRACE_ID_VERSION, otel_trace_id[:TRACE_ID_FIRST_PART_LENGTH], otel_trace_id[TRACE_ID_FIRST_PART_LENGTH:], ] ) parent_id = f"{span_context.span_id:016x}" sampling_flag = ( IS_SAMPLED if span_context.trace_flags & trace.TraceFlags.SAMPLED else NOT_SAMPLED ) # TODO: Add OT trace state to the X-Ray trace header trace_header = KV_PAIR_DELIMITER.join( [ KEY_AND_VALUE_DELIMITER.join([key, value]) for key, value in [ (TRACE_ID_KEY, xray_trace_id), (PARENT_ID_KEY, parent_id), (SAMPLED_FLAG_KEY, sampling_flag), ] ] ) setter.set( carrier, TRACE_HEADER_KEY, trace_header, )
def inject( self, carrier: CarrierT, context: Optional[Context] = None, setter: Setter = default_setter, ) -> None: span_context = get_current_span(context).get_span_context() if span_context.trace_id == INVALID_TRACE_ID: return setter.set( carrier, OT_TRACE_ID_HEADER, hex(span_context.trace_id)[2:][-16:] ) setter.set( carrier, OT_SPAN_ID_HEADER, hex(span_context.span_id)[2:][-16:], ) if span_context.trace_flags == TraceFlags.SAMPLED: traceflags = "true" else: traceflags = "false" setter.set(carrier, OT_SAMPLED_HEADER, traceflags) baggage = get_all(context) if not baggage: return for header_name, header_value in baggage.items(): if ( _valid_header_name.fullmatch(header_name) is None or _valid_header_value.fullmatch(header_value) is None ): continue setter.set( carrier, "".join([OT_BAGGAGE_PREFIX, header_name]), header_value, )
def inject( self, carrier: textmap.CarrierT, context: typing.Optional[Context] = None, setter: textmap.Setter = textmap.default_setter, ) -> None: """Injects SpanContext into the carrier. See `opentelemetry.propagators.textmap.TextMapPropagator.inject` """ span = trace.get_current_span(context) span_context = span.get_span_context() if span_context == trace.INVALID_SPAN_CONTEXT: return traceparent_string = "00-{trace_id}-{span_id}-{:02x}".format( span_context.trace_flags, trace_id=format_trace_id(span_context.trace_id), span_id=format_span_id(span_context.span_id), ) setter.set(carrier, self._TRACEPARENT_HEADER_NAME, traceparent_string) if span_context.trace_state: tracestate_string = span_context.trace_state.to_header() setter.set(carrier, self._TRACESTATE_HEADER_NAME, tracestate_string)