Make BaseTracer fields private (#2492)
* Make BaseTracer fields private By making `tracer` private we're forcing all tracer implementation to use the `spanBuilder()` utility method and pass the parent context manually.
This commit is contained in:
parent
7111cb793e
commit
72ffb3b7c5
|
|
@ -49,8 +49,8 @@ public abstract class BaseTracer {
|
|||
private static final SupportabilityMetrics supportability =
|
||||
new SupportabilityMetrics(Config.get()).start();
|
||||
|
||||
protected final Tracer tracer;
|
||||
protected final ContextPropagators propagators;
|
||||
private final Tracer tracer;
|
||||
private final ContextPropagators propagators;
|
||||
|
||||
public BaseTracer() {
|
||||
this(GlobalOpenTelemetry.get());
|
||||
|
|
@ -153,12 +153,13 @@ public abstract class BaseTracer {
|
|||
* name {@code spanName} and kind {@code kind}.
|
||||
*/
|
||||
public Context startSpan(Context parentContext, String spanName, SpanKind kind) {
|
||||
Span span = spanBuilder(spanName, kind).setParent(parentContext).startSpan();
|
||||
Span span = spanBuilder(parentContext, spanName, kind).startSpan();
|
||||
return parentContext.with(span);
|
||||
}
|
||||
|
||||
protected SpanBuilder spanBuilder(String spanName, SpanKind kind) {
|
||||
return tracer.spanBuilder(spanName).setSpanKind(kind);
|
||||
/** Returns a {@link SpanBuilder} to create and start a new {@link Span}. */
|
||||
protected final SpanBuilder spanBuilder(Context parentContext, String spanName, SpanKind kind) {
|
||||
return tracer.spanBuilder(spanName).setSpanKind(kind).setParent(parentContext);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -217,7 +218,7 @@ public abstract class BaseTracer {
|
|||
if (clazz.getPackage() != null) {
|
||||
String pkgName = clazz.getPackage().getName();
|
||||
if (!pkgName.isEmpty()) {
|
||||
className = clazz.getName().replace(pkgName, "").substring(1);
|
||||
className = className.substring(pkgName.length() + 1);
|
||||
}
|
||||
}
|
||||
return className;
|
||||
|
|
|
|||
|
|
@ -40,10 +40,7 @@ public abstract class DatabaseClientTracer<CONNECTION, STATEMENT, SANITIZEDSTATE
|
|||
SANITIZEDSTATEMENT sanitizedStatement = sanitizeStatement(statement);
|
||||
|
||||
SpanBuilder span =
|
||||
tracer
|
||||
.spanBuilder(spanName(connection, statement, sanitizedStatement))
|
||||
.setParent(parentContext)
|
||||
.setSpanKind(CLIENT)
|
||||
spanBuilder(parentContext, spanName(connection, statement, sanitizedStatement), CLIENT)
|
||||
.setAttribute(SemanticAttributes.DB_SYSTEM, dbSystem(connection));
|
||||
|
||||
if (connection != null) {
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ public abstract class HttpClientTracer<REQUEST, CARRIER, RESPONSE> extends BaseT
|
|||
|
||||
private Span internalStartSpan(
|
||||
SpanKind kind, Context parentContext, REQUEST request, String name, long startTimeNanos) {
|
||||
SpanBuilder spanBuilder = tracer.spanBuilder(name).setSpanKind(kind).setParent(parentContext);
|
||||
SpanBuilder spanBuilder = spanBuilder(parentContext, name, kind);
|
||||
if (startTimeNanos > 0) {
|
||||
spanBuilder.setStartTimestamp(startTimeNanos, TimeUnit.NANOSECONDS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ public abstract class HttpServerTracer<REQUEST, RESPONSE, CONNECTION, STORAGE> e
|
|||
// whether to call end() or not on the Span in the returned Context
|
||||
|
||||
Context parentContext = extract(request, getGetter());
|
||||
SpanBuilder builder = tracer.spanBuilder(spanName).setSpanKind(SERVER).setParent(parentContext);
|
||||
SpanBuilder builder = spanBuilder(parentContext, spanName, SERVER);
|
||||
|
||||
if (startTimestamp >= 0) {
|
||||
builder.setStartTimestamp(startTimestamp, TimeUnit.NANOSECONDS);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.apachecamel;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanBuilder;
|
||||
import io.opentelemetry.api.trace.SpanKind;
|
||||
import io.opentelemetry.context.Context;
|
||||
import org.apache.camel.Exchange;
|
||||
|
|
@ -38,23 +37,20 @@ final class CamelRoutePolicy extends RoutePolicySupport {
|
|||
private static final Logger LOG = LoggerFactory.getLogger(CamelRoutePolicy.class);
|
||||
|
||||
private Span spanOnExchangeBegin(
|
||||
Route route, Exchange exchange, SpanDecorator sd, SpanKind spanKind) {
|
||||
Span activeSpan = Span.current();
|
||||
String name = sd.getOperationName(exchange, route.getEndpoint(), CamelDirection.INBOUND);
|
||||
SpanBuilder builder = CamelTracer.TRACER.spanBuilder(name);
|
||||
builder.setSpanKind(spanKind);
|
||||
Route route, Exchange exchange, SpanDecorator sd, Context parentContext, SpanKind spanKind) {
|
||||
Span activeSpan = Span.fromContext(parentContext);
|
||||
if (!activeSpan.getSpanContext().isValid()) {
|
||||
Context parentContext =
|
||||
parentContext =
|
||||
CamelPropagationUtil.extractParent(exchange.getIn().getHeaders(), route.getEndpoint());
|
||||
if (parentContext != null) {
|
||||
builder.setParent(parentContext);
|
||||
}
|
||||
}
|
||||
return builder.startSpan();
|
||||
|
||||
String name = sd.getOperationName(exchange, route.getEndpoint(), CamelDirection.INBOUND);
|
||||
Context context = CamelTracer.TRACER.startSpan(parentContext, name, spanKind);
|
||||
return Span.fromContext(context);
|
||||
}
|
||||
|
||||
private SpanKind spanKind(SpanDecorator sd) {
|
||||
Span activeSpan = Span.current();
|
||||
private SpanKind spanKind(Context context, SpanDecorator sd) {
|
||||
Span activeSpan = Span.fromContext(context);
|
||||
// if there's an active span, this is not a root span which we always mark as INTERNAL
|
||||
return (activeSpan.getSpanContext().isValid() ? SpanKind.INTERNAL : sd.getReceiverSpanKind());
|
||||
}
|
||||
|
|
@ -67,8 +63,9 @@ final class CamelRoutePolicy extends RoutePolicySupport {
|
|||
public void onExchangeBegin(Route route, Exchange exchange) {
|
||||
try {
|
||||
SpanDecorator sd = CamelTracer.TRACER.getSpanDecorator(route.getEndpoint());
|
||||
SpanKind spanKind = spanKind(sd);
|
||||
Span span = spanOnExchangeBegin(route, exchange, sd, spanKind);
|
||||
Context parentContext = Context.current();
|
||||
SpanKind spanKind = spanKind(parentContext, sd);
|
||||
Span span = spanOnExchangeBegin(route, exchange, sd, parentContext, spanKind);
|
||||
sd.pre(span, exchange, route.getEndpoint(), CamelDirection.INBOUND);
|
||||
ActiveSpanManager.activate(exchange, span, spanKind);
|
||||
LOG.debug("[Route start] Receiver span started {}", span);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.apachecamel;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanBuilder;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
|
||||
|
|
@ -43,10 +42,6 @@ class CamelTracer extends BaseTracer {
|
|||
return "io.opentelemetry.javaagent.apache-camel-2.20";
|
||||
}
|
||||
|
||||
public SpanBuilder spanBuilder(String name) {
|
||||
return tracer.spanBuilder(name);
|
||||
}
|
||||
|
||||
public Scope startClientScope(Span span) {
|
||||
Context current = super.withClientSpan(Context.current(), span);
|
||||
return current.makeCurrent();
|
||||
|
|
|
|||
|
|
@ -25,11 +25,9 @@ class DubboTracer extends RpcServerTracer<RpcInvocation> {
|
|||
|
||||
public Context startServerSpan(
|
||||
String interfaceName, String methodName, RpcInvocation rpcInvocation) {
|
||||
Context parentContext = extract(rpcInvocation, getGetter());
|
||||
SpanBuilder spanBuilder =
|
||||
tracer
|
||||
.spanBuilder(DubboHelper.getSpanName(interfaceName, methodName))
|
||||
.setSpanKind(SERVER)
|
||||
.setParent(extract(rpcInvocation, getGetter()))
|
||||
spanBuilder(parentContext, DubboHelper.getSpanName(interfaceName, methodName), SERVER)
|
||||
.setAttribute(SemanticAttributes.RPC_SYSTEM, "dubbo");
|
||||
DubboHelper.prepareSpan(spanBuilder, interfaceName, methodName);
|
||||
NetPeerUtils.INSTANCE.setNetPeer(spanBuilder, RpcContext.getContext().getRemoteAddress());
|
||||
|
|
@ -37,14 +35,13 @@ class DubboTracer extends RpcServerTracer<RpcInvocation> {
|
|||
}
|
||||
|
||||
public Context startClientSpan(String interfaceName, String methodName) {
|
||||
Context parentContext = Context.current();
|
||||
SpanBuilder spanBuilder =
|
||||
tracer
|
||||
.spanBuilder(DubboHelper.getSpanName(interfaceName, methodName))
|
||||
.setSpanKind(CLIENT)
|
||||
spanBuilder(parentContext, DubboHelper.getSpanName(interfaceName, methodName), CLIENT)
|
||||
.setAttribute(SemanticAttributes.RPC_SYSTEM, "dubbo");
|
||||
DubboHelper.prepareSpan(spanBuilder, interfaceName, methodName);
|
||||
NetPeerUtils.INSTANCE.setNetPeer(spanBuilder, RpcContext.getContext().getRemoteAddress());
|
||||
return withClientSpan(Context.current(), spanBuilder.startSpan());
|
||||
return withClientSpan(parentContext, spanBuilder.startSpan());
|
||||
}
|
||||
|
||||
public void end(Context context, Result result) {
|
||||
|
|
|
|||
|
|
@ -33,12 +33,7 @@ public class ApacheHttpAsyncClientTracer
|
|||
}
|
||||
|
||||
public Context startSpan(Context parentContext) {
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(DEFAULT_SPAN_NAME)
|
||||
.setSpanKind(CLIENT)
|
||||
.setParent(parentContext)
|
||||
.startSpan();
|
||||
Span span = spanBuilder(parentContext, DEFAULT_SPAN_NAME, CLIENT).startSpan();
|
||||
return withClientSpan(parentContext, span);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentati
|
|||
functionContext = functionTracer().startSpan(context, SpanKind.SERVER, arg);
|
||||
functionScope = functionContext.makeCurrent();
|
||||
if (arg instanceof SQSEvent) {
|
||||
messageContext = messageTracer().startSpan((SQSEvent) arg);
|
||||
messageContext = messageTracer().startSpan(functionContext, (SQSEvent) arg);
|
||||
messageScope = messageContext.makeCurrent();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,13 +5,14 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.awslambda.v1_0;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.CONSUMER;
|
||||
|
||||
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
|
||||
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanBuilder;
|
||||
import io.opentelemetry.api.trace.SpanContext;
|
||||
import io.opentelemetry.api.trace.SpanKind;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
|
|
@ -24,7 +25,7 @@ public class AwsLambdaMessageTracer extends BaseTracer {
|
|||
super(openTelemetry);
|
||||
}
|
||||
|
||||
public Context startSpan(SQSEvent event) {
|
||||
public Context startSpan(Context parentContext, SQSEvent event) {
|
||||
// Use event source in name if all messages have the same source, otherwise use placeholder.
|
||||
String source = "multiple_sources";
|
||||
if (!event.getRecords().isEmpty()) {
|
||||
|
|
@ -41,7 +42,7 @@ public class AwsLambdaMessageTracer extends BaseTracer {
|
|||
}
|
||||
}
|
||||
|
||||
SpanBuilder span = tracer.spanBuilder(source + " process").setSpanKind(SpanKind.CONSUMER);
|
||||
SpanBuilder span = spanBuilder(parentContext, source + " process", CONSUMER);
|
||||
|
||||
span.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "AmazonSQS");
|
||||
span.setAttribute(SemanticAttributes.MESSAGING_OPERATION, "process");
|
||||
|
|
@ -50,12 +51,11 @@ public class AwsLambdaMessageTracer extends BaseTracer {
|
|||
addLinkToMessageParent(message, span);
|
||||
}
|
||||
|
||||
return Context.current().with(span.startSpan());
|
||||
return parentContext.with(span.startSpan());
|
||||
}
|
||||
|
||||
public Context startSpan(SQSMessage message) {
|
||||
SpanBuilder span =
|
||||
tracer.spanBuilder(message.getEventSource() + " process").setSpanKind(SpanKind.CONSUMER);
|
||||
public Context startSpan(Context parentContext, SQSMessage message) {
|
||||
SpanBuilder span = spanBuilder(parentContext, message.getEventSource() + " process", CONSUMER);
|
||||
|
||||
span.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "AmazonSQS");
|
||||
span.setAttribute(SemanticAttributes.MESSAGING_OPERATION, "process");
|
||||
|
|
@ -64,7 +64,7 @@ public class AwsLambdaMessageTracer extends BaseTracer {
|
|||
|
||||
addLinkToMessageParent(message, span);
|
||||
|
||||
return Context.current().with(span.startSpan());
|
||||
return parentContext.with(span.startSpan());
|
||||
}
|
||||
|
||||
private void addLinkToMessageParent(SQSMessage message, SpanBuilder span) {
|
||||
|
|
|
|||
|
|
@ -118,11 +118,10 @@ public class AwsLambdaTracer extends BaseTracer {
|
|||
Context awsContext, SpanKind kind, Object input, Map<String, String> headers) {
|
||||
io.opentelemetry.context.Context parentContext = ParentContextExtractor.extract(headers, this);
|
||||
|
||||
SpanBuilder spanBuilder = tracer.spanBuilder(spanName(awsContext, input));
|
||||
SpanBuilder spanBuilder = spanBuilder(parentContext, spanName(awsContext, input), kind);
|
||||
setAttributes(spanBuilder, awsContext, input);
|
||||
Span span = spanBuilder.setParent(parentContext).setSpanKind(kind).startSpan();
|
||||
|
||||
return withServerSpan(parentContext, span);
|
||||
return withServerSpan(parentContext, spanBuilder.startSpan());
|
||||
}
|
||||
|
||||
public void onOutput(io.opentelemetry.context.Context context, Object output) {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@ public abstract class TracingSqsEventHandler extends TracingRequestHandler<SQSEv
|
|||
|
||||
@Override
|
||||
public Void doHandleRequest(SQSEvent event, Context context) {
|
||||
io.opentelemetry.context.Context otelContext = tracer.startSpan(event);
|
||||
io.opentelemetry.context.Context parentContext = io.opentelemetry.context.Context.current();
|
||||
io.opentelemetry.context.Context otelContext = tracer.startSpan(parentContext, event);
|
||||
Throwable error = null;
|
||||
try (Scope ignored = otelContext.makeCurrent()) {
|
||||
handleEvent(event, context);
|
||||
|
|
|
|||
|
|
@ -43,8 +43,9 @@ public abstract class TracingSqsMessageHandler extends TracingSqsEventHandler {
|
|||
|
||||
@Override
|
||||
protected final void handleEvent(SQSEvent event, Context context) {
|
||||
io.opentelemetry.context.Context parentContext = io.opentelemetry.context.Context.current();
|
||||
for (SQSMessage message : event.getRecords()) {
|
||||
io.opentelemetry.context.Context otelContext = getTracer().startSpan(message);
|
||||
io.opentelemetry.context.Context otelContext = getTracer().startSpan(parentContext, message);
|
||||
Throwable error = null;
|
||||
try (Scope ignored = otelContext.makeCurrent()) {
|
||||
handleMessage(message, context);
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@ final class AwsSdkHttpClientTracer
|
|||
|
||||
public Context startSpan(Context parentContext, ExecutionAttributes attributes) {
|
||||
String spanName = spanName(attributes);
|
||||
Span span =
|
||||
tracer.spanBuilder(spanName).setSpanKind(CLIENT).setParent(parentContext).startSpan();
|
||||
Span span = spanBuilder(parentContext, spanName, CLIENT).startSpan();
|
||||
return withClientSpan(parentContext, span);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,12 +24,11 @@ public class GeodeTracer extends DatabaseClientTracer<Region<?, ?>, String, SqlS
|
|||
}
|
||||
|
||||
public Context startSpan(String operation, Region<?, ?> connection, String query) {
|
||||
Context parentContext = Context.current();
|
||||
SqlStatementInfo sanitizedStatement = sanitizeStatement(query);
|
||||
|
||||
SpanBuilder span =
|
||||
tracer
|
||||
.spanBuilder(operation)
|
||||
.setSpanKind(CLIENT)
|
||||
spanBuilder(parentContext, operation, CLIENT)
|
||||
.setAttribute(SemanticAttributes.DB_SYSTEM, dbSystem(connection))
|
||||
.setAttribute(SemanticAttributes.DB_OPERATION, operation);
|
||||
|
||||
|
|
@ -37,7 +36,7 @@ public class GeodeTracer extends DatabaseClientTracer<Region<?, ?>, String, SqlS
|
|||
setNetSemanticConvention(span, connection);
|
||||
onStatement(span, connection, query, sanitizedStatement);
|
||||
|
||||
return Context.current().with(span.startSpan());
|
||||
return parentContext.with(span.startSpan());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -26,11 +26,13 @@ final class GrpcClientTracer extends RpcClientTracer {
|
|||
}
|
||||
|
||||
public Context startSpan(String name) {
|
||||
Context parentContext = Context.current();
|
||||
Span span =
|
||||
spanBuilder(name, CLIENT)
|
||||
spanBuilder(parentContext, name, CLIENT)
|
||||
.setAttribute(SemanticAttributes.RPC_SYSTEM, getRpcSystem())
|
||||
.startSpan();
|
||||
return Context.current().with(span);
|
||||
// TODO: withClientSpan()
|
||||
return parentContext.with(span);
|
||||
}
|
||||
|
||||
public void end(Context context, Status status) {
|
||||
|
|
|
|||
|
|
@ -24,10 +24,11 @@ final class GrpcServerTracer extends RpcServerTracer<Metadata> {
|
|||
}
|
||||
|
||||
public Context startSpan(String name, Metadata headers) {
|
||||
SpanBuilder spanBuilder =
|
||||
tracer.spanBuilder(name).setSpanKind(SERVER).setParent(extract(headers, getGetter()));
|
||||
Context parentContext = extract(headers, getGetter());
|
||||
SpanBuilder spanBuilder = spanBuilder(parentContext, name, SERVER);
|
||||
spanBuilder.setAttribute(SemanticAttributes.RPC_SYSTEM, "grpc");
|
||||
return Context.current().with(spanBuilder.startSpan());
|
||||
// TODO: withServerSpan()
|
||||
return parentContext.with(spanBuilder.startSpan());
|
||||
}
|
||||
|
||||
public void setStatus(Context context, Status status) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.servlet.ServletContextPath;
|
||||
|
|
@ -46,7 +48,7 @@ public class JaxRsAnnotationsTracer extends BaseTracer {
|
|||
// We create span and immediately update its name
|
||||
// We do that in order to reuse logic inside updateSpanNames method, which is used externally as
|
||||
// well.
|
||||
Span span = tracer.spanBuilder("jax-rs.request").setParent(parentContext).startSpan();
|
||||
Span span = spanBuilder(parentContext, "jax-rs.request", INTERNAL).startSpan();
|
||||
updateSpanNames(
|
||||
parentContext, span, ServerSpan.fromContextOrNull(parentContext), target, method);
|
||||
return parentContext.with(span);
|
||||
|
|
@ -59,7 +61,7 @@ public class JaxRsAnnotationsTracer extends BaseTracer {
|
|||
updateSpanName(span, pathBasedSpanName);
|
||||
} else {
|
||||
updateSpanName(serverSpan, pathBasedSpanName);
|
||||
updateSpanName(span, tracer().spanNameForMethod(target, method));
|
||||
updateSpanName(span, spanNameForMethod(target, method));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxws.common;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
|
||||
|
|
@ -34,12 +36,11 @@ public class JaxWsTracer extends BaseTracer {
|
|||
serverSpan.updateName(spanName);
|
||||
}
|
||||
|
||||
return parentContext.with(
|
||||
tracer
|
||||
.spanBuilder(spanName)
|
||||
.setParent(parentContext)
|
||||
Span span =
|
||||
spanBuilder(parentContext, spanName, INTERNAL)
|
||||
.setAttribute(SemanticAttributes.CODE_NAMESPACE, method.getDeclaringClass().getName())
|
||||
.setAttribute(SemanticAttributes.CODE_FUNCTION, method.getName())
|
||||
.startSpan());
|
||||
.startSpan();
|
||||
return parentContext.with(span);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,13 +41,6 @@ public class JmsTracer extends BaseTracer {
|
|||
|
||||
public Context startConsumerSpan(
|
||||
MessageDestination destination, String operation, Message message, long startTime) {
|
||||
SpanBuilder spanBuilder =
|
||||
tracer
|
||||
.spanBuilder(spanName(destination, operation))
|
||||
.setSpanKind(CONSUMER)
|
||||
.setStartTimestamp(startTime, TimeUnit.MILLISECONDS)
|
||||
.setAttribute(SemanticAttributes.MESSAGING_OPERATION, operation);
|
||||
|
||||
Context parentContext = Context.root();
|
||||
if (message != null && "process".equals(operation)) {
|
||||
// TODO use BaseTracer.extract() which has context leak detection
|
||||
|
|
@ -57,16 +50,21 @@ public class JmsTracer extends BaseTracer {
|
|||
.getTextMapPropagator()
|
||||
.extract(Context.root(), message, GETTER);
|
||||
}
|
||||
spanBuilder.setParent(parentContext);
|
||||
|
||||
SpanBuilder spanBuilder =
|
||||
spanBuilder(parentContext, spanName(destination, operation), CONSUMER)
|
||||
.setStartTimestamp(startTime, TimeUnit.MILLISECONDS)
|
||||
.setAttribute(SemanticAttributes.MESSAGING_OPERATION, operation);
|
||||
|
||||
afterStart(spanBuilder, destination, message);
|
||||
return parentContext.with(spanBuilder.startSpan());
|
||||
}
|
||||
|
||||
public Context startProducerSpan(MessageDestination destination, Message message) {
|
||||
SpanBuilder span = tracer.spanBuilder(spanName(destination, "send")).setSpanKind(PRODUCER);
|
||||
Context parentContext = Context.current();
|
||||
SpanBuilder span = spanBuilder(parentContext, spanName(destination, "send"), PRODUCER);
|
||||
afterStart(span, destination, message);
|
||||
return Context.current().with(span.startSpan());
|
||||
return parentContext.with(span.startSpan());
|
||||
}
|
||||
|
||||
public Scope startProducerScope(Context context, Message message) {
|
||||
|
|
|
|||
|
|
@ -28,10 +28,7 @@ public class KafkaConsumerTracer extends BaseTracer {
|
|||
|
||||
Context parentContext = extractParent(record);
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(spanNameOnConsume(record))
|
||||
.setSpanKind(CONSUMER)
|
||||
.setParent(parentContext)
|
||||
spanBuilder(parentContext, spanNameOnConsume(record), CONSUMER)
|
||||
.setStartTimestamp(now, TimeUnit.MILLISECONDS)
|
||||
.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "kafka")
|
||||
.setAttribute(SemanticAttributes.MESSAGING_DESTINATION, record.topic())
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ public class KafkaProducerTracer extends BaseTracer {
|
|||
}
|
||||
|
||||
public Context startProducerSpan(Context parentContext, ProducerRecord<?, ?> record) {
|
||||
SpanBuilder span = spanBuilder(spanNameOnProduce(record), PRODUCER).setParent(parentContext);
|
||||
SpanBuilder span = spanBuilder(parentContext, spanNameOnProduce(record), PRODUCER);
|
||||
onProduce(span, record);
|
||||
return parentContext.with(span.startSpan());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.kafkastreams;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.CONSUMER;
|
||||
import static io.opentelemetry.javaagent.instrumentation.kafkastreams.TextMapExtractAdapter.GETTER;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanKind;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
|
||||
|
|
@ -29,10 +29,7 @@ public class KafkaStreamsTracer extends BaseTracer {
|
|||
public Context startSpan(StampedRecord record) {
|
||||
Context parentContext = extract(record.value.headers(), GETTER);
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(spanNameForConsume(record))
|
||||
.setSpanKind(SpanKind.CONSUMER)
|
||||
.setParent(parentContext)
|
||||
spanBuilder(parentContext, spanNameForConsume(record), CONSUMER)
|
||||
.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "kafka")
|
||||
.setAttribute(SemanticAttributes.MESSAGING_DESTINATION, record.topic())
|
||||
.setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "topic")
|
||||
|
|
|
|||
|
|
@ -32,12 +32,7 @@ public class NettyHttpClientTracer
|
|||
}
|
||||
|
||||
public Context startSpan(Context parentContext, ChannelHandlerContext ctx, HttpRequest request) {
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(spanNameForRequest(request))
|
||||
.setSpanKind(CLIENT)
|
||||
.setParent(parentContext)
|
||||
.startSpan();
|
||||
Span span = spanBuilder(parentContext, spanNameForRequest(request), CLIENT).startSpan();
|
||||
onRequest(span, request);
|
||||
NetPeerUtils.INSTANCE.setNetPeer(span, (InetSocketAddress) ctx.getChannel().getRemoteAddress());
|
||||
|
||||
|
|
|
|||
|
|
@ -32,12 +32,7 @@ public class NettyHttpClientTracer
|
|||
}
|
||||
|
||||
public Context startSpan(Context parentContext, ChannelHandlerContext ctx, HttpRequest request) {
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(spanNameForRequest(request))
|
||||
.setSpanKind(CLIENT)
|
||||
.setParent(parentContext)
|
||||
.startSpan();
|
||||
Span span = spanBuilder(parentContext, spanNameForRequest(request), CLIENT).startSpan();
|
||||
onRequest(span, request);
|
||||
NetPeerUtils.INSTANCE.setNetPeer(span, (InetSocketAddress) ctx.channel().remoteAddress());
|
||||
|
||||
|
|
|
|||
|
|
@ -32,12 +32,7 @@ public class NettyHttpClientTracer
|
|||
}
|
||||
|
||||
public Context startSpan(Context parentContext, ChannelHandlerContext ctx, HttpRequest request) {
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(spanNameForRequest(request))
|
||||
.setSpanKind(CLIENT)
|
||||
.setParent(parentContext)
|
||||
.startSpan();
|
||||
Span span = spanBuilder(parentContext, spanNameForRequest(request), CLIENT).startSpan();
|
||||
onRequest(span, request);
|
||||
NetPeerUtils.INSTANCE.setNetPeer(span, (InetSocketAddress) ctx.channel().remoteAddress());
|
||||
|
||||
|
|
|
|||
|
|
@ -24,18 +24,18 @@ public class WithSpanTracer extends BaseTracer {
|
|||
private static final Logger log = LoggerFactory.getLogger(WithSpanTracer.class);
|
||||
|
||||
public Context startSpan(
|
||||
Context context, WithSpan applicationAnnotation, Method method, SpanKind kind) {
|
||||
Context parentContext, WithSpan applicationAnnotation, Method method, SpanKind kind) {
|
||||
Span span =
|
||||
spanBuilder(spanNameForMethodWithAnnotation(applicationAnnotation, method), kind)
|
||||
.setParent(context)
|
||||
spanBuilder(
|
||||
parentContext, spanNameForMethodWithAnnotation(applicationAnnotation, method), kind)
|
||||
.startSpan();
|
||||
if (kind == SpanKind.SERVER) {
|
||||
return withServerSpan(context, span);
|
||||
return withServerSpan(parentContext, span);
|
||||
}
|
||||
if (kind == SpanKind.CLIENT) {
|
||||
return withClientSpan(context, span);
|
||||
return withClientSpan(parentContext, span);
|
||||
}
|
||||
return context.with(span);
|
||||
return parentContext.with(span);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -40,23 +40,23 @@ public class RabbitTracer extends BaseTracer {
|
|||
}
|
||||
|
||||
public Context startSpan(String method, Connection connection) {
|
||||
Context parentContext = Context.current();
|
||||
SpanKind kind = method.equals("Channel.basicPublish") ? PRODUCER : CLIENT;
|
||||
SpanBuilder span =
|
||||
spanBuilder(method, kind)
|
||||
spanBuilder(parentContext, method, kind)
|
||||
.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "rabbitmq")
|
||||
.setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "queue");
|
||||
|
||||
NetPeerUtils.INSTANCE.setNetPeer(span, connection.getAddress(), connection.getPort());
|
||||
|
||||
return Context.current().with(span.startSpan());
|
||||
return parentContext.with(span.startSpan());
|
||||
}
|
||||
|
||||
public Context startGetSpan(
|
||||
String queue, long startTime, GetResponse response, Connection connection) {
|
||||
Context parentContext = Context.current();
|
||||
SpanBuilder spanBuilder =
|
||||
tracer
|
||||
.spanBuilder(spanNameOnGet(queue))
|
||||
.setSpanKind(CLIENT)
|
||||
spanBuilder(parentContext, spanNameOnGet(queue), CLIENT)
|
||||
.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "rabbitmq")
|
||||
.setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "queue")
|
||||
.setAttribute(SemanticAttributes.MESSAGING_OPERATION, "receive")
|
||||
|
|
@ -76,7 +76,8 @@ public class RabbitTracer extends BaseTracer {
|
|||
NetPeerUtils.INSTANCE.setNetPeer(spanBuilder, connection.getAddress(), connection.getPort());
|
||||
onGet(spanBuilder, queue);
|
||||
|
||||
return Context.current().with(spanBuilder.startSpan());
|
||||
// TODO: withClientSpan()?
|
||||
return parentContext.with(spanBuilder.startSpan());
|
||||
}
|
||||
|
||||
public Context startDeliverySpan(
|
||||
|
|
@ -86,10 +87,7 @@ public class RabbitTracer extends BaseTracer {
|
|||
|
||||
long startTimeMillis = System.currentTimeMillis();
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(spanNameOnDeliver(queue))
|
||||
.setSpanKind(CONSUMER)
|
||||
.setParent(parentContext)
|
||||
spanBuilder(parentContext, spanNameOnDeliver(queue), CONSUMER)
|
||||
.setStartTimestamp(startTimeMillis, TimeUnit.MILLISECONDS)
|
||||
.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "rabbitmq")
|
||||
.setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "queue")
|
||||
|
|
|
|||
|
|
@ -21,17 +21,18 @@ public class RmiClientTracer extends RpcClientTracer {
|
|||
}
|
||||
|
||||
public Context startSpan(Method method) {
|
||||
Context parentContext = Context.current();
|
||||
String serviceName = method.getDeclaringClass().getName();
|
||||
String methodName = method.getName();
|
||||
|
||||
Span span =
|
||||
spanBuilder(serviceName + "/" + methodName, CLIENT)
|
||||
spanBuilder(parentContext, serviceName + "/" + methodName, CLIENT)
|
||||
.setAttribute(SemanticAttributes.RPC_SYSTEM, getRpcSystem())
|
||||
.setAttribute(SemanticAttributes.RPC_SERVICE, serviceName)
|
||||
.setAttribute(SemanticAttributes.RPC_METHOD, methodName)
|
||||
.startSpan();
|
||||
|
||||
return Context.current().with(span);
|
||||
return parentContext.with(span);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -26,10 +26,7 @@ public class RmiServerTracer extends RpcServerTracer {
|
|||
String methodName = method.getName();
|
||||
|
||||
SpanBuilder spanBuilder =
|
||||
tracer
|
||||
.spanBuilder(serviceName + "/" + methodName)
|
||||
.setSpanKind(SERVER)
|
||||
.setParent(parentContext)
|
||||
spanBuilder(parentContext, serviceName + "/" + methodName, SERVER)
|
||||
.setAttribute(SemanticAttributes.RPC_SYSTEM, "java_rmi")
|
||||
.setAttribute(SemanticAttributes.RPC_SERVICE, serviceName)
|
||||
.setAttribute(SemanticAttributes.RPC_METHOD, methodName);
|
||||
|
|
|
|||
|
|
@ -23,21 +23,24 @@ public class ChunkExecutionTracer extends BaseTracer {
|
|||
}
|
||||
|
||||
public Context startSpan(ChunkContext chunkContext) {
|
||||
String jobName = chunkContext.getStepContext().getJobName();
|
||||
String stepName = chunkContext.getStepContext().getStepName();
|
||||
SpanBuilder spanBuilder =
|
||||
tracer.spanBuilder("BatchJob " + jobName + "." + stepName + ".Chunk").setSpanKind(INTERNAL);
|
||||
Context parentContext = Context.current();
|
||||
SpanBuilder spanBuilder = spanBuilder(parentContext, spanName(chunkContext), INTERNAL);
|
||||
if (shouldCreateRootSpanForChunk()) {
|
||||
linkParentSpan(spanBuilder);
|
||||
linkParentSpan(spanBuilder, parentContext);
|
||||
}
|
||||
Span span = spanBuilder.startSpan();
|
||||
return Context.current().with(span);
|
||||
return parentContext.with(spanBuilder.startSpan());
|
||||
}
|
||||
|
||||
private void linkParentSpan(SpanBuilder spanBuilder) {
|
||||
private String spanName(ChunkContext chunkContext) {
|
||||
String jobName = chunkContext.getStepContext().getJobName();
|
||||
String stepName = chunkContext.getStepContext().getStepName();
|
||||
return "BatchJob " + jobName + "." + stepName + ".Chunk";
|
||||
}
|
||||
|
||||
private void linkParentSpan(SpanBuilder spanBuilder, Context parentContext) {
|
||||
spanBuilder.setNoParent();
|
||||
|
||||
SpanContext parentSpanContext = Span.current().getSpanContext();
|
||||
SpanContext parentSpanContext = Span.fromContext(parentContext).getSpanContext();
|
||||
if (parentSpanContext.isValid()) {
|
||||
spanBuilder.addLink(parentSpanContext);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.spring.batch.job;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
|
||||
import org.springframework.batch.core.JobExecution;
|
||||
|
|
@ -20,7 +18,7 @@ public class JobExecutionTracer extends BaseTracer {
|
|||
|
||||
public Context startSpan(JobExecution jobExecution) {
|
||||
String jobName = jobExecution.getJobInstance().getJobName();
|
||||
return startSpan("BatchJob " + jobName, INTERNAL);
|
||||
return startSpan("BatchJob " + jobName);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.spring.batch.step;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.tracer.BaseTracer;
|
||||
import org.springframework.batch.core.StepExecution;
|
||||
|
|
@ -21,7 +19,7 @@ public class StepExecutionTracer extends BaseTracer {
|
|||
public Context startSpan(StepExecution stepExecution) {
|
||||
String jobName = stepExecution.getJobExecution().getJobInstance().getJobName();
|
||||
String stepName = stepExecution.getStepName();
|
||||
return startSpan("BatchJob " + jobName + "." + stepName, INTERNAL);
|
||||
return startSpan("BatchJob " + jobName + "." + stepName);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -24,9 +24,7 @@ class WithSpanAspectTracer extends BaseTracer {
|
|||
|
||||
Context startSpan(Context parentContext, WithSpan annotation, Method method) {
|
||||
Span span =
|
||||
spanBuilder(spanName(annotation, method), annotation.kind())
|
||||
.setParent(parentContext)
|
||||
.startSpan();
|
||||
spanBuilder(parentContext, spanName(annotation, method), annotation.kind()).startSpan();
|
||||
switch (annotation.kind()) {
|
||||
case SERVER:
|
||||
return withServerSpan(parentContext, span);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ package io.opentelemetry.instrumentation.spring.webflux.client;
|
|||
import static io.opentelemetry.instrumentation.spring.webflux.client.HttpHeadersInjectAdapter.SETTER;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.Tracer;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.propagation.TextMapSetter;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
|
|
@ -85,10 +84,6 @@ public class SpringWebfluxHttpClientTracer
|
|||
return "io.opentelemetry.javaagent.spring-webflux-5.0";
|
||||
}
|
||||
|
||||
public Tracer getTracer() {
|
||||
return tracer;
|
||||
}
|
||||
|
||||
// rawStatusCode() method was introduced in webflux 5.1
|
||||
// prior to this method, the best we can get is HttpStatus enum, which only covers standard status
|
||||
// codes (see usage above)
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.springwebmvc;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanBuilder;
|
||||
import io.opentelemetry.api.trace.SpanKind;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.config.Config;
|
||||
import io.opentelemetry.instrumentation.api.servlet.ServletContextPath;
|
||||
|
|
@ -36,13 +37,14 @@ public class SpringWebMvcTracer extends BaseTracer {
|
|||
}
|
||||
|
||||
public Context startHandlerSpan(Context parentContext, Object handler) {
|
||||
return startSpan(parentContext, spanNameOnHandle(handler), SpanKind.INTERNAL);
|
||||
return startSpan(parentContext, spanNameOnHandle(handler), INTERNAL);
|
||||
}
|
||||
|
||||
public Context startSpan(ModelAndView mv) {
|
||||
SpanBuilder span = tracer.spanBuilder(spanNameOnRender(mv));
|
||||
Context parentContext = Context.current();
|
||||
SpanBuilder span = spanBuilder(parentContext, spanNameOnRender(mv), INTERNAL);
|
||||
onRender(span, mv);
|
||||
return Context.current().with(span.startSpan());
|
||||
return parentContext.with(span.startSpan());
|
||||
}
|
||||
|
||||
public void onRequest(Context context, Span span, HttpServletRequest request) {
|
||||
|
|
|
|||
|
|
@ -21,12 +21,13 @@ public class SpringWsTracer extends BaseTracer {
|
|||
}
|
||||
|
||||
public Context startSpan(Method method) {
|
||||
Context parentContext = Context.current();
|
||||
Span span =
|
||||
spanBuilder(spanNameForMethod(method), SpanKind.INTERNAL)
|
||||
spanBuilder(parentContext, spanNameForMethod(method), SpanKind.INTERNAL)
|
||||
.setAttribute(SemanticAttributes.CODE_NAMESPACE, method.getDeclaringClass().getName())
|
||||
.setAttribute(SemanticAttributes.CODE_FUNCTION, method.getName())
|
||||
.startSpan();
|
||||
return Context.current().with(span);
|
||||
return parentContext.with(span);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.struts2;
|
||||
|
||||
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
|
||||
|
||||
import com.opensymphony.xwork2.ActionInvocation;
|
||||
import com.opensymphony.xwork2.ActionProxy;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
|
|
@ -31,7 +33,7 @@ public class Struts2Tracer extends BaseTracer {
|
|||
String method = actionInvocation.getProxy().getMethod();
|
||||
String spanName = spanNameForMethod(actionClass, method);
|
||||
|
||||
SpanBuilder strutsSpan = tracer.spanBuilder(spanName).setParent(parentContext);
|
||||
SpanBuilder strutsSpan = spanBuilder(parentContext, spanName, INTERNAL);
|
||||
|
||||
strutsSpan.setAttribute(SemanticAttributes.CODE_NAMESPACE, actionClass.getName());
|
||||
if (method != null) {
|
||||
|
|
|
|||
|
|
@ -38,12 +38,8 @@ public class TwilioTracer extends BaseTracer {
|
|||
}
|
||||
|
||||
public Context startSpan(Context parentContext, Object serviceExecutor, String methodName) {
|
||||
Span span =
|
||||
tracer
|
||||
.spanBuilder(spanNameOnServiceExecution(serviceExecutor, methodName))
|
||||
.setSpanKind(CLIENT)
|
||||
.setParent(parentContext)
|
||||
.startSpan();
|
||||
String spanName = spanNameOnServiceExecution(serviceExecutor, methodName);
|
||||
Span span = spanBuilder(parentContext, spanName, CLIENT).startSpan();
|
||||
return withClientSpan(parentContext, span);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue