if (kind.equals(Span.Kind.CLIENT)) { span = tracer.nextSpan(); injector.inject(span.context(), invocation.getAttachments()); } else { TraceContextOrSamplingFlags extracted = extractor.extract(invocation.getAttachments());
injector.inject(span.context(), record.headers());
if (ObjectHelper.isEmpty(sampleFlag)) { span = brave.tracer().nextSpan(); INJECTOR.inject(span.context(), exchange.getIn()); } else { span = brave.tracer().nextSpan(sampleFlag);
INJECTOR.inject(span.context(), event.getExchange().getIn()); parser.onRequest(event.getExchange(), span.customizer());
/** * Starts and propagates {@link Span.Kind#PRODUCER} span for each message sent. */ @Override public Message<?> preSend(Message<?> message, MessageChannel channel) { if (emptyMessage(message)) { return message; } Message<?> retrievedMessage = getMessage(message); MessageHeaderAccessor headers = mutableHeaderAccessor(retrievedMessage); TraceContextOrSamplingFlags extracted = this.extractor.extract(headers); Span span = this.threadLocalSpan.next(extracted); MessageHeaderPropagation.removeAnyTraceHeaders(headers, this.tracing.propagation().keys()); this.injector.inject(span.context(), headers); if (!span.isNoop()) { span.kind(Span.Kind.PRODUCER).name("send").start(); span.remoteServiceName(REMOTE_SERVICE_NAME); addTags(message, span, channel); } if (log.isDebugEnabled()) { log.debug("Created a new span in pre send" + span); } Message<?> outputMessage = outputMessage(message, retrievedMessage, headers); if (isDirectChannel(channel)) { beforeHandle(outputMessage, channel, null); } return outputMessage; }
/** * This starts a consumer span as a child of the incoming message or the current trace * context, placing it in scope until the receive completes. */ @Override public Message<?> postReceive(Message<?> message, MessageChannel channel) { if (emptyMessage(message)) { return message; } MessageHeaderAccessor headers = mutableHeaderAccessor(message); TraceContextOrSamplingFlags extracted = this.extractor.extract(headers); Span span = this.threadLocalSpan.next(extracted); MessageHeaderPropagation.removeAnyTraceHeaders(headers, this.tracing.propagation().keys()); this.injector.inject(span.context(), headers); if (!span.isNoop()) { span.kind(Span.Kind.CONSUMER).name("receive").start(); span.remoteServiceName(REMOTE_SERVICE_NAME); addTags(message, span, channel); } if (log.isDebugEnabled()) { log.debug("Created a new span in post receive " + span); } headers.setImmutable(); return new GenericMessage<>(message.getPayload(), headers.getMessageHeaders()); }
/** * Injects the underlying context using B3 encoding by default. */ @Override public <C> void inject(SpanContext spanContext, Format<C> format, C carrier) { Injector<TextMap> injector = formatToInjector.get(format); if (injector == null) { throw new UnsupportedOperationException(format + " not in " + formatToInjector.keySet()); } TraceContext traceContext = ((BraveSpanContext) spanContext).unwrap(); injector.inject(traceContext, (TextMap) carrier); }
@Override public void preSend(Message message) { MessageHeaderAccessor headers = makeMessageHeaderAccessor(message); TraceContextOrSamplingFlags extracted = this.extractor.extract(headers); Span span = this.threadLocalSpan.next(extracted); MessageHeaderPropagation.removeAnyTraceHeaders(headers, this.tracing.propagation().keys()); this.injector.inject(span.context(), headers); if (!span.isNoop()) { span.kind(Span.Kind.PRODUCER).name("send " + message.getRequiredHeader(Message.DESTINATION)).start(); addMessageTags(span, message); } }
@Override public void preHandle(String subscriberId, Message message) { MessageHeaderAccessor headers = makeMessageHeaderAccessor(message); TraceContextOrSamplingFlags extracted = this.extractor.extract(headers); Span span = this.threadLocalSpan.next(extracted); MessageHeaderPropagation.removeAnyTraceHeaders(headers, this.tracing.propagation().keys()); this.injector.inject(span.context(), headers); if (!span.isNoop()) { span.kind(Span.Kind.CONSUMER).name("receive " + message.getRequiredHeader(Message.DESTINATION)).start(); span.tag("subscriberId", subscriberId); addMessageTags(span, message); } }
@Override public void inject(TraceContext traceContext, C carrier) { if (carrier instanceof Metadata) { byte[] serialized = TraceContextBinaryFormat.toBytes(traceContext); ((Metadata) carrier).put(GRPC_TRACE_BIN, serialized); Tags tags = traceContext.findExtra(Tags.class); if (tags != null) ((Metadata) carrier).put(GRPC_TAGS_BIN, tags.toMap()); } delegate.inject(traceContext, carrier); } }
void verifyRoundTrip(TraceContextOrSamplingFlags expected) { TraceContextOrSamplingFlags extracted = propagation.extractor(mapEntry).extract(map); assertThat(extracted) .isEqualTo(expected); Map<K, String> injected = new LinkedHashMap<>(); if (expected.context() != null) { propagation.injector(mapEntry).inject(expected.context(), injected); } else { inject(injected, expected.samplingFlags()); } assertThat(map).isEqualTo(injected); }
private void injectTraceHeaders(Span span, TTransport transport) { Propagation<String> propagation = tracing.propagation(); if (transport instanceof THttpClient) { TraceContext.Injector<THttpClient> injector = propagation.injector(THttpClient::setCustomHeader); injector.inject(span.context(), (THttpClient) transport); } else { TraceContext.Injector<TLoadBalancerClient> injector = propagation.injector(TLoadBalancerClient::setCustomHeader); injector.inject(span.context(), (TLoadBalancerClient) transport); } } }
@Override public void inject(TraceContext traceContext, C carrier) { delegate.inject(traceContext, carrier); Extra extra = traceContext.findExtra(Extra.class); if (extra == null) return; inject(extra, carrier); }
@Override public void accept(Propagation<?> propagation) { TraceContext.Injector<Map<Object, String>> injector = propagation.injector(Map::put); TraceContext.Extractor<Map<Object, String>> extractor = propagation.extractor(Map::get); TraceContext ctx = TraceContext.newBuilder().traceId(1L).spanId(2L).sampled(false).build(); Map<Object, String> map = new LinkedHashMap<>(); injector.inject(ctx, map); assertThat(extractor.extract(map).context()) .isEqualToIgnoringGivenFields(ctx, "traceIdString", "spanIdString"); } }
if (kind.equals(Kind.CLIENT)) { span = tracer.nextSpan(); injector.inject(span.context(), invocation.getAttachments()); } else { TraceContextOrSamplingFlags extracted = extractor.extract(invocation.getAttachments());
injector.inject(span.context(), record.headers());
/** * Starts and propagates {@link Span.Kind#PRODUCER} span for each message sent. */ @Override public Message<?> preSend(Message<?> message, MessageChannel channel) { if (emptyMessage(message)) { return message; } Message<?> retrievedMessage = getMessage(message); MessageHeaderAccessor headers = mutableHeaderAccessor(retrievedMessage); TraceContextOrSamplingFlags extracted = this.extractor.extract(headers); Span span = this.threadLocalSpan.next(extracted); MessageHeaderPropagation.removeAnyTraceHeaders(headers, this.tracing.propagation().keys()); this.injector.inject(span.context(), headers); if (!span.isNoop()) { span.kind(Span.Kind.PRODUCER).name("send").start(); span.remoteServiceName(REMOTE_SERVICE_NAME); addTags(message, span, channel); } if (log.isDebugEnabled()) { log.debug("Created a new span in pre send" + span); } Message<?> outputMessage = outputMessage(message, retrievedMessage, headers); if (isDirectChannel(channel)) { beforeHandle(outputMessage, channel, null); } return outputMessage; }
/** * This starts a consumer span as a child of the incoming message or the current trace * context, placing it in scope until the receive completes. */ @Override public Message<?> postReceive(Message<?> message, MessageChannel channel) { if (emptyMessage(message)) { return message; } MessageHeaderAccessor headers = mutableHeaderAccessor(message); TraceContextOrSamplingFlags extracted = this.extractor.extract(headers); Span span = this.threadLocalSpan.next(extracted); MessageHeaderPropagation.removeAnyTraceHeaders(headers, this.tracing.propagation().keys()); this.injector.inject(span.context(), headers); if (!span.isNoop()) { span.kind(Span.Kind.CONSUMER).name("receive").start(); span.remoteServiceName(REMOTE_SERVICE_NAME); addTags(message, span, channel); } if (log.isDebugEnabled()) { log.debug("Created a new span in post receive " + span); } headers.setImmutable(); return new GenericMessage<>(message.getPayload(), headers.getMessageHeaders()); }