diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 22213f3180..01f28bc4f5 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -19,7 +19,6 @@ endif::[] //// === Unreleased -* Introduce *apm-agent-tracer* module that contains a minimal, zero-dependency `Tracer` API. - {pull}3043[#3043] [[release-notes-1.37.0]] ==== 1.37.0 - YYYY/MM/DD diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java index 0ef5210e45..a6f2d9e98c 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java @@ -36,7 +36,8 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.ElasticApmTracerBuilder; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.logging.ApmServerLogAppender; import co.elastic.apm.agent.matcher.MethodMatcher; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; @@ -179,7 +180,7 @@ private static void initInstrumentation(ElasticApmTracer tracer, Instrumentation } @Nonnull - private static Iterable loadInstrumentations(ElasticApmTracer tracer) { + private static Iterable loadInstrumentations(Tracer tracer) { List pluginClassLoaders = new ArrayList<>(); pluginClassLoaders.add(PrivilegedActionUtils.getClassLoader(ElasticApmAgent.class)); pluginClassLoaders.addAll(createExternalPluginClassLoaders(tracer.getConfig(CoreConfiguration.class).getPluginsDir())); @@ -308,7 +309,7 @@ public void onChange(ConfigurationOption configurationOption, Object oldValue, O } public static synchronized Future reInitInstrumentation() { - final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + final Tracer tracer = TracerAwareInstrumentation.tracer.require(Tracer.class); if (instrumentation == null) { throw new IllegalStateException("Can't re-init agent before it has been initialized"); } @@ -340,7 +341,7 @@ public static boolean openModule(Class classFromTargetModule, ClassLoader ope static synchronized void doReInitInstrumentation(Iterable instrumentations) { Logger logger = getLogger(); logger.info("Re initializing instrumentation"); - AgentBuilder agentBuilder = initAgentBuilder(GlobalTracer.requireTracerImpl(), instrumentation, instrumentations, logger, AgentBuilder.DescriptionStrategy.Default.POOL_ONLY, false); + AgentBuilder agentBuilder = initAgentBuilder(GlobalTracer.get().require(ElasticApmTracer.class), instrumentation, instrumentations, logger, AgentBuilder.DescriptionStrategy.Default.POOL_ONLY, false); resettableClassFileTransformer = agentBuilder.patchOn(instrumentation, resettableClassFileTransformer); } @@ -457,7 +458,7 @@ public DynamicType.Builder transform(DynamicType.Builder builder, TypeDesc private static Logger getLogger() { if (logger == null) { // lazily init logger to allow the tracer builder to init the logging config first - GlobalTracer.requireTracerImpl(); + GlobalTracer.get().require(ElasticApmTracer.class); logger = LoggerFactory.getLogger(ElasticApmAgent.class); } // re-using an existing logger avoids running into a JVM bug that leads to a segfault @@ -646,7 +647,7 @@ public static synchronized void reset() { if (instrumentation == null) { return; } - GlobalTracer.get().stop(); + GlobalTracer.get().require(Tracer.class).stop(); GlobalTracer.setNoop(); Exception exception = null; if (resettableClassFileTransformer != null) { @@ -788,7 +789,7 @@ public static void ensureInstrumented(final Class classToInstrument, if (!appliedInstrumentations.contains(instrumentationClasses)) { synchronized (ElasticApmAgent.class) { - final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + final ElasticApmTracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); if (instrumentation == null) { throw new IllegalStateException("Agent is not initialized"); } @@ -896,7 +897,11 @@ private static ElasticApmInstrumentation tryInstantiate(Class constructor = null; try { if (withTracer) { - constructor = instrumentation.getConstructor(ElasticApmTracer.class); + try { + constructor = instrumentation.getConstructor(ElasticApmTracer.class); + } catch (NoSuchMethodException ignored) { + constructor = instrumentation.getConstructor(co.elastic.apm.agent.tracer.Tracer.class); + } } else { constructor = instrumentation.getConstructor(); } @@ -908,7 +913,7 @@ private static ElasticApmInstrumentation tryInstantiate(Class serviceInfoByClassLoader = WeakConcurrent.buildMap(); + private static volatile boolean classloaderCheckOk = false; + private final ConfigurationRegistry configurationRegistry; private final StacktraceConfiguration stacktraceConfiguration; private final ApmServerClient apmServerClient; @@ -117,6 +123,49 @@ protected ActiveStack initialValue() { private final String ephemeralId; private final MetaDataFuture metaDataFuture; + static { + checkClassloader(); + } + + private static void checkClassloader() { + ClassLoader cl = PrivilegedActionUtils.getClassLoader(GlobalTracer.class); + + // agent currently loaded in the bootstrap CL, which is the current correct location + if (cl == null) { + return; + } + + if (classloaderCheckOk) { + return; + } + + String agentLocation = PrivilegedActionUtils.getProtectionDomain(GlobalTracer.class).getCodeSource().getLocation().getFile(); + if (!agentLocation.endsWith(".jar")) { + // agent is not packaged, thus we assume running tests + classloaderCheckOk = true; + return; + } + + String premainClass = VersionUtils.getManifestEntry(new File(agentLocation), "Premain-Class"); + if (null == premainClass) { + // packaged within a .jar, but not within an agent jar, thus we assume it's still for testing + classloaderCheckOk = true; + return; + } + + if (premainClass.startsWith("co.elastic.apm.agent")) { + // premain class will only be present when packaged as an agent jar + classloaderCheckOk = true; + return; + } + + // A packaged agent class has been loaded outside of bootstrap classloader, we are not in the context of + // unit/integration tests, that's likely a setup issue where the agent jar has been added to application + // classpath. + throw new IllegalStateException(String.format("Agent setup error: agent jar file \"%s\" likely referenced in JVM or application classpath", agentLocation)); + + } + ElasticApmTracer(ConfigurationRegistry configurationRegistry, MetricRegistry metricRegistry, Reporter reporter, ObjectPoolFactory poolFactory, ApmServerClient apmServerClient, final String ephemeralId, MetaDataFuture metaDataFuture) { this.metricRegistry = metricRegistry; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/GlobalTracer.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/GlobalTracer.java deleted file mode 100644 index fb517633ba..0000000000 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/GlobalTracer.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package co.elastic.apm.agent.impl; - -import co.elastic.apm.agent.configuration.ServiceInfo; -import co.elastic.apm.agent.impl.error.ErrorCapture; -import co.elastic.apm.agent.impl.sampling.Sampler; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.util.PrivilegedActionUtils; -import co.elastic.apm.agent.util.VersionUtils; -import co.elastic.apm.agent.tracer.dispatch.BinaryHeaderGetter; -import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; -import co.elastic.apm.agent.tracer.pooling.ObjectPoolFactory; - -import javax.annotation.Nullable; -import java.io.File; -import java.util.Objects; - -public class GlobalTracer implements Tracer { - - private static final GlobalTracer INSTANCE = new GlobalTracer(); - private volatile Tracer tracer = NoopTracer.INSTANCE; - private static volatile boolean classloaderCheckOk = false; - - private GlobalTracer() { - } - - static { - checkClassloader(); - } - - public static Tracer get() { - return INSTANCE; - } - - @Nullable - public static ElasticApmTracer getTracerImpl() { - Tracer tracer = INSTANCE.tracer; - if (tracer instanceof ElasticApmTracer) { - return ((ElasticApmTracer) tracer); - } - return null; - } - - public static ElasticApmTracer requireTracerImpl() { - return Objects.requireNonNull(getTracerImpl(), "Registered tracer is not an instance of ElasticApmTracer"); - } - - private static void checkClassloader() { - ClassLoader cl = PrivilegedActionUtils.getClassLoader(GlobalTracer.class); - - // agent currently loaded in the bootstrap CL, which is the current correct location - if (cl == null) { - return; - } - - if (classloaderCheckOk) { - return; - } - - String agentLocation = PrivilegedActionUtils.getProtectionDomain(GlobalTracer.class).getCodeSource().getLocation().getFile(); - if (!agentLocation.endsWith(".jar")) { - // agent is not packaged, thus we assume running tests - classloaderCheckOk = true; - return; - } - - String premainClass = VersionUtils.getManifestEntry(new File(agentLocation), "Premain-Class"); - if (null == premainClass) { - // packaged within a .jar, but not within an agent jar, thus we assume it's still for testing - classloaderCheckOk = true; - return; - } - - if (premainClass.startsWith("co.elastic.apm.agent")) { - // premain class will only be present when packaged as an agent jar - classloaderCheckOk = true; - return; - } - - // A packaged agent class has been loaded outside of bootstrap classloader, we are not in the context of - // unit/integration tests, that's likely a setup issue where the agent jar has been added to application - // classpath. - throw new IllegalStateException(String.format("Agent setup error: agent jar file \"%s\" likely referenced in JVM or application classpath", agentLocation)); - - } - - public static synchronized void setNoop() { - TracerState currentTracerState = INSTANCE.tracer.getState(); - if (currentTracerState != TracerState.UNINITIALIZED && currentTracerState != TracerState.STOPPED) { - throw new IllegalStateException("Can't override tracer as current tracer is already running"); - } - INSTANCE.tracer = NoopTracer.INSTANCE; - } - - public static synchronized void init(Tracer tracer) { - if (!isNoop()) { - throw new IllegalStateException("Tracer is already initialized"); - } - INSTANCE.tracer = tracer; - } - - public static boolean isNoop() { - return INSTANCE.tracer == NoopTracer.INSTANCE; - } - - @Nullable - public Transaction startRootTransaction(@Nullable ClassLoader initiatingClassLoader) { - return tracer.startRootTransaction(initiatingClassLoader); - } - - @Nullable - @Override - public Transaction startRootTransaction(@Nullable ClassLoader initiatingClassLoader, long epochMicro) { - return tracer.startRootTransaction(initiatingClassLoader, epochMicro); - } - - @Nullable - public Transaction startRootTransaction(Sampler sampler, long epochMicros, @Nullable ClassLoader initiatingClassLoader) { - return tracer.startRootTransaction(sampler, epochMicros, initiatingClassLoader); - } - - @Nullable - public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { - return tracer.startChildTransaction(headerCarrier, textHeadersGetter, initiatingClassLoader); - } - - @Nullable - @Override - public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, @Nullable ClassLoader initiatingClassLoader, long epochMicros) { - return tracer.startChildTransaction(headerCarrier, textHeadersGetter, initiatingClassLoader, epochMicros); - } - - @Nullable - public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, Sampler sampler, long epochMicros, @Nullable ClassLoader initiatingClassLoader) { - return tracer.startChildTransaction(headerCarrier, textHeadersGetter, sampler, epochMicros, initiatingClassLoader); - } - - @Nullable - public Transaction startChildTransaction(@Nullable C headerCarrier, BinaryHeaderGetter binaryHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { - return tracer.startChildTransaction(headerCarrier, binaryHeadersGetter, initiatingClassLoader); - } - - @Nullable - public Transaction startChildTransaction(@Nullable C headerCarrier, BinaryHeaderGetter binaryHeadersGetter, Sampler sampler, long epochMicros, @Nullable ClassLoader initiatingClassLoader) { - return tracer.startChildTransaction(headerCarrier, binaryHeadersGetter, sampler, epochMicros, initiatingClassLoader); - } - - @Nullable - public Transaction currentTransaction() { - return tracer.currentTransaction(); - } - - @Nullable - @Override - public AbstractSpan getActive() { - return tracer.getActive(); - } - - @Nullable - @Override - public Span getActiveSpan() { - return tracer.getActiveSpan(); - } - - public void captureAndReportException(@Nullable Throwable e, ClassLoader initiatingClassLoader) { - tracer.captureAndReportException(e, initiatingClassLoader); - } - - @Nullable - public String captureAndReportException(long epochMicros, @Nullable Throwable e, @Nullable AbstractSpan parent) { - return tracer.captureAndReportException(epochMicros, e, parent); - } - - @Nullable - public ErrorCapture captureException(@Nullable Throwable e, @Nullable AbstractSpan parent, @Nullable ClassLoader initiatingClassLoader) { - return tracer.captureException(e, parent, initiatingClassLoader); - } - - @Nullable - @Override - public Span getActiveExitSpan() { - return tracer.getActiveExitSpan(); - } - - @Override - public TracerState getState() { - return tracer.getState(); - } - - @Nullable - @Override - public ServiceInfo getServiceInfoForClassLoader(@Nullable ClassLoader classLoader) { - return tracer.getServiceInfoForClassLoader(classLoader); - } - - @Override - public void setServiceInfoForClassLoader(@Nullable ClassLoader classLoader, ServiceInfo serviceInfo) { - tracer.setServiceInfoForClassLoader(classLoader, serviceInfo); - } - - @Override - public void stop() { - tracer.stop(); - } - - @Override - public boolean isRunning() { - return tracer.isRunning(); - } - - @Nullable - @Override - public Span createExitChildSpan() { - return tracer.createExitChildSpan(); - } - - @Nullable - @Override - public T probe(Class type) { - return tracer.probe(type); - } - - @Override - public T require(Class type) { - return tracer.require(type); - } - - @Override - public T getConfig(Class configuration) { - return tracer.getConfig(configuration); - } - - @Override - public ObjectPoolFactory getObjectPoolFactory() { - return tracer.getObjectPoolFactory(); - } -} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/NoopTracer.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/NoopTracer.java deleted file mode 100644 index aff87d21c4..0000000000 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/NoopTracer.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package co.elastic.apm.agent.impl; - -import co.elastic.apm.agent.configuration.ServiceInfo; -import co.elastic.apm.agent.impl.error.ErrorCapture; -import co.elastic.apm.agent.impl.sampling.Sampler; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.objectpool.ObjectPoolFactory; -import co.elastic.apm.agent.tracer.dispatch.BinaryHeaderGetter; -import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; - -import javax.annotation.Nullable; - -class NoopTracer implements Tracer { - - static final Tracer INSTANCE = new NoopTracer(); - - private NoopTracer() { - } - - @Nullable - @Override - public Transaction startRootTransaction(@Nullable ClassLoader initiatingClassLoader) { - return null; - } - - @Nullable - @Override - public Transaction startRootTransaction(@Nullable ClassLoader initiatingClassLoader, long epochMicro) { - return null; - } - - @Nullable - @Override - public Transaction startRootTransaction(Sampler sampler, long epochMicros, @Nullable ClassLoader initiatingClassLoader) { - return null; - } - - @Nullable - @Override - public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { - return null; - } - - @Nullable - @Override - public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, @Nullable ClassLoader initiatingClassLoader, long epochMicros) { - return null; - } - - @Nullable - @Override - public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, Sampler sampler, long epochMicros, @Nullable ClassLoader initiatingClassLoader) { - return null; - } - - @Nullable - @Override - public Transaction startChildTransaction(@Nullable C headerCarrier, BinaryHeaderGetter binaryHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { - return null; - } - - @Nullable - @Override - public Transaction startChildTransaction(@Nullable C headerCarrier, BinaryHeaderGetter binaryHeadersGetter, Sampler sampler, long epochMicros, @Nullable ClassLoader initiatingClassLoader) { - return null; - } - - @Nullable - @Override - public Transaction currentTransaction() { - return null; - } - - @Nullable - @Override - public AbstractSpan getActive() { - return null; - } - - @Nullable - @Override - public Span getActiveSpan() { - return null; - } - - @Override - public void captureAndReportException(@Nullable Throwable e, ClassLoader initiatingClassLoader) { - - } - - @Nullable - @Override - public String captureAndReportException(long epochMicros, @Nullable Throwable e, @Nullable AbstractSpan parent) { - return null; - } - - @Nullable - @Override - public ErrorCapture captureException(@Nullable Throwable e, @Nullable AbstractSpan parent, @Nullable ClassLoader initiatingClassLoader) { - return null; - } - - @Nullable - @Override - public Span getActiveExitSpan() { - return null; - } - - @Override - public TracerState getState() { - return TracerState.UNINITIALIZED; - } - - @Nullable - @Override - public ServiceInfo getServiceInfoForClassLoader(@Nullable ClassLoader classLoader) { - return null; - } - - @Override - public void setServiceInfoForClassLoader(@Nullable ClassLoader classLoader, ServiceInfo serviceInfo) { - } - - @Override - public void stop() { - } - - @Override - public boolean isRunning() { - return false; - } - - @Nullable - @Override - public Span createExitChildSpan() { - return null; - } - - @Nullable - @Override - public T probe(Class type) { - return null; - } - - @Override - public T require(Class type) { - throw new IllegalStateException(); - } - - @Override - public T getConfig(Class configuration) { - throw new IllegalStateException(); - } - - @Override - public co.elastic.apm.agent.tracer.pooling.ObjectPoolFactory getObjectPoolFactory() { - return new ObjectPoolFactory(); - } -} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Url.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Url.java index 0cb25dbb90..bd94242d25 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Url.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Url.java @@ -226,16 +226,16 @@ public void fillFrom(URL url) { } @Override - public void fillFrom(@Nullable String scheme, - @Nullable String serverName, - int serverPort, - @Nullable String requestURI, - @Nullable String queryString) { - withProtocol(scheme) + public void fillFrom(@Nullable String protocol, + @Nullable String hostname, + int port, + @Nullable String pathname, + @Nullable String search) { + withProtocol(protocol) .withHostname(hostname) - .withPort(normalizePort(port, scheme)) + .withPort(normalizePort(port, protocol)) .withPathname(pathname) - .withSearch(queryString) + .withSearch(search) .updateFull(); } diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/Agent.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/Agent.java index 81fca62800..dc5692c8a8 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/Agent.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/Agent.java @@ -21,8 +21,7 @@ import co.elastic.apm.agent.configuration.ActivationMethod; import co.elastic.apm.agent.configuration.CoreConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.util.PrivilegedActionUtils; import java.lang.management.ManagementFactory; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/tracemethods/TraceMethodInstrumentation.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/tracemethods/TraceMethodInstrumentation.java index 1cdf6a1321..500e7856c9 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/tracemethods/TraceMethodInstrumentation.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/tracemethods/TraceMethodInstrumentation.java @@ -22,11 +22,12 @@ import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.matcher.MethodMatcher; import co.elastic.apm.agent.common.util.WildcardMatcher; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -57,7 +58,7 @@ public class TraceMethodInstrumentation extends TracerAwareInstrumentation { private final MethodMatcher methodMatcher; private final CoreConfiguration config; - public TraceMethodInstrumentation(ElasticApmTracer tracer, MethodMatcher methodMatcher) { + public TraceMethodInstrumentation(Tracer tracer, MethodMatcher methodMatcher) { this.methodMatcher = methodMatcher; config = tracer.getConfig(CoreConfiguration.class); } @@ -125,7 +126,7 @@ public String getAdviceClassName() { public static class TraceMethodAdvice { - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + private static final ElasticApmTracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); private static final long traceMethodThresholdMicros; static { diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/MockTracer.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/MockTracer.java index f8f68d9b75..f4644df753 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/MockTracer.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/MockTracer.java @@ -158,6 +158,7 @@ public static ElasticApmTracer create() { */ public static ElasticApmTracer create(ConfigurationRegistry configurationRegistry) { final ElasticApmTracer tracer = mock(ElasticApmTracer.class); + doReturn(tracer).when(tracer).require(ElasticApmTracer.class); doReturn(configurationRegistry).when(tracer).getConfigurationRegistry(); doAnswer(invocation -> configurationRegistry.getConfig(invocation.getArgument(0))).when(tracer).getConfig(any()); return tracer; diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient3-plugin/src/main/java/co/elastic/apm/agent/httpclient/v3/HttpClient3Instrumentation.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient3-plugin/src/main/java/co/elastic/apm/agent/httpclient/v3/HttpClient3Instrumentation.java index 3ca44c69e5..ea8bce84c4 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient3-plugin/src/main/java/co/elastic/apm/agent/httpclient/v3/HttpClient3Instrumentation.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient3-plugin/src/main/java/co/elastic/apm/agent/httpclient/v3/HttpClient3Instrumentation.java @@ -20,12 +20,12 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Outcome; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.util.LoggerUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -115,7 +115,7 @@ public static Object onEnter(@Advice.Argument(0) HttpMethod httpMethod, } } - Span span = HttpClientHelper.startHttpClientSpan(parent, httpMethod.getName(), uri, protocol, host, port); + Span span = HttpClientHelper.startHttpClientSpan(parent, httpMethod.getName(), uri, protocol, host, port); if (span != null) { span.activate(); @@ -138,11 +138,11 @@ public static void onExit(@Advice.Thrown @Nullable Throwable thrown, @Advice.Argument(0) HttpMethod httpMethod, @Advice.Enter @Nullable Object enterSpan) { - if (!(enterSpan instanceof Span)) { + if (!(enterSpan instanceof Span)) { return; } - Span span = (Span) enterSpan; + Span span = (Span) enterSpan; StatusLine statusLine = httpMethod.getStatusLine(); if (null != statusLine) { diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientInstrumentation.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientInstrumentation.java index 2cc4083087..3093494677 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientInstrumentation.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientInstrumentation.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.httpclient.HttpClientHelper; import co.elastic.apm.agent.httpclient.v4.helper.ApacheHttpAsyncClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.NamedElement; @@ -93,7 +93,7 @@ public static Object[] onBeforeExecute(@Advice.Argument(value = 0) HttpAsyncRequ if (parent == null) { return null; } - Span span = parent.createExitSpan(); + Span span = parent.createExitSpan(); HttpAsyncRequestProducer wrappedProducer = requestProducer; FutureCallback wrappedFutureCallback = futureCallback; boolean responseFutureWrapped = false; @@ -114,7 +114,7 @@ public static Object[] onBeforeExecute(@Advice.Argument(value = 0) HttpAsyncRequ @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onAfterExecute(@Advice.Enter @Nullable Object[] enter, @Advice.Thrown @Nullable Throwable t) { - Span span = enter != null ? (Span) enter[3] : null; + Span span = enter != null ? (Span) enter[3] : null; if (span != null) { // Deactivate in this thread. Span will be ended and reported by the listener span.deactivate(); diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpClientInstrumentation.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpClientInstrumentation.java index a40c47701f..66f7f14213 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpClientInstrumentation.java @@ -20,9 +20,9 @@ import co.elastic.apm.agent.httpclient.HttpClientHelper; import co.elastic.apm.agent.httpclient.v4.helper.RequestHeaderAccessor; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -58,7 +58,7 @@ public static Object onBeforeExecute(@Advice.Argument(0) HttpRoute route, if (parent == null) { return null; } - Span span = HttpClientHelper.startHttpClientSpan(parent, request.getMethod(), request.getURI(), route.getTargetHost().getHostName()); + Span span = HttpClientHelper.startHttpClientSpan(parent, request.getMethod(), request.getURI(), route.getTargetHost().getHostName()); if (span != null) { span.activate(); @@ -80,7 +80,7 @@ public static Object onBeforeExecute(@Advice.Argument(0) HttpRoute route, public static void onAfterExecute(@Advice.Return @Nullable CloseableHttpResponse response, @Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span == null) { return; } diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/LegacyApacheHttpClientInstrumentation.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/LegacyApacheHttpClientInstrumentation.java index c2cde4a1e7..161eea79b9 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/LegacyApacheHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/LegacyApacheHttpClientInstrumentation.java @@ -20,9 +20,9 @@ import co.elastic.apm.agent.httpclient.HttpClientHelper; import co.elastic.apm.agent.httpclient.v4.helper.RequestHeaderAccessor; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -100,7 +100,7 @@ public static Object onBeforeExecute(@Advice.Argument(0) @Nullable HttpHost host } catch (URISyntaxException ignore) { } } - Span span = HttpClientHelper.startHttpClientSpan(parent, method, uri, hostName); + Span span = HttpClientHelper.startHttpClientSpan(parent, method, uri, hostName); if (span != null) { span.activate(); @@ -122,7 +122,7 @@ public static Object onBeforeExecute(@Advice.Argument(0) @Nullable HttpHost host public static void onAfterExecute(@Advice.Return @Nullable HttpResponse response, @Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span == null) { return; } diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/ApacheHttpAsyncClientHelper.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/ApacheHttpAsyncClientHelper.java index 4c9e669259..76c9fa9d26 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/ApacheHttpAsyncClientHelper.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/ApacheHttpAsyncClientHelper.java @@ -18,12 +18,12 @@ */ package co.elastic.apm.agent.httpclient.v4.helper; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.objectpool.ObjectPool; -import co.elastic.apm.agent.objectpool.ObjectPoolFactory; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.tracer.pooling.Allocator; +import co.elastic.apm.agent.tracer.pooling.ObjectPool; +import co.elastic.apm.agent.tracer.pooling.ObjectPoolFactory; import org.apache.http.concurrent.FutureCallback; import org.apache.http.nio.protocol.HttpAsyncRequestProducer; import org.apache.http.protocol.HttpContext; @@ -38,7 +38,7 @@ public class ApacheHttpAsyncClientHelper { private final ObjectPool> futureCallbackWrapperObjectPool; public ApacheHttpAsyncClientHelper() { - ObjectPoolFactory factory = GlobalTracer.requireTracerImpl().getObjectPoolFactory(); + ObjectPoolFactory factory = GlobalTracer.get().getObjectPoolFactory(); requestProducerWrapperObjectPool = factory.createRecyclableObjectPool(MAX_POOLED_ELEMENTS, new RequestProducerWrapperAllocator()); futureCallbackWrapperObjectPool = factory.createRecyclableObjectPool(MAX_POOLED_ELEMENTS, new FutureCallbackWrapperAllocator()); } @@ -57,12 +57,12 @@ public FutureCallbackWrapper createInstance() { } } - public HttpAsyncRequestProducer wrapRequestProducer(HttpAsyncRequestProducer requestProducer, @Nullable Span span, + public HttpAsyncRequestProducer wrapRequestProducer(HttpAsyncRequestProducer requestProducer, @Nullable Span span, @Nullable AbstractSpan parent) { return requestProducerWrapperObjectPool.createInstance().with(requestProducer, span, parent); } - public FutureCallback wrapFutureCallback(FutureCallback futureCallback, HttpContext context, Span span) { + public FutureCallback wrapFutureCallback(FutureCallback futureCallback, HttpContext context, Span span) { return ((FutureCallbackWrapper) futureCallbackWrapperObjectPool.createInstance()).with(futureCallback, context, span); } diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/FutureCallbackWrapper.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/FutureCallbackWrapper.java index fd2c36c298..9383b034d3 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/FutureCallbackWrapper.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/FutureCallbackWrapper.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.httpclient.v4.helper; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.tracer.pooling.Recyclable; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; @@ -35,13 +35,13 @@ class FutureCallbackWrapper implements FutureCallback, Recyclable { private FutureCallback delegate; @Nullable private HttpContext context; - private volatile Span span; + private volatile Span span; FutureCallbackWrapper(ApacheHttpAsyncClientHelper helper) { this.helper = helper; } - FutureCallbackWrapper with(@Nullable FutureCallback delegate, @Nullable HttpContext context, Span span) { + FutureCallbackWrapper with(@Nullable FutureCallback delegate, @Nullable HttpContext context, Span span) { this.delegate = delegate; this.context = context; // write to volatile field last @@ -87,7 +87,7 @@ public void cancelled() { private void finishSpan(@Nullable Exception e) { // start by reading the volatile field - final Span localSpan = span; + final Span localSpan = span; try { if (context != null) { Object responseObject = context.getAttribute(HttpCoreContext.HTTP_RESPONSE); diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/HttpAsyncRequestProducerWrapper.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/HttpAsyncRequestProducerWrapper.java index b01bf02b6a..12752fe00e 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/HttpAsyncRequestProducerWrapper.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/helper/HttpAsyncRequestProducerWrapper.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.httpclient.v4.helper; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.tracer.pooling.Recyclable; import org.apache.http.HttpException; @@ -43,7 +43,7 @@ class HttpAsyncRequestProducerWrapper implements HttpAsyncRequestProducer, Recyc private AbstractSpan parent; @Nullable - private Span span; + private Span span; HttpAsyncRequestProducerWrapper(ApacheHttpAsyncClientHelper helper) { this.asyncClientHelper = helper; @@ -61,7 +61,7 @@ class HttpAsyncRequestProducerWrapper implements HttpAsyncRequestProducer, Recyc * @param parent the active span when this method is called * @return the {@link HttpAsyncRequestProducer} wrapper */ - public HttpAsyncRequestProducerWrapper with(HttpAsyncRequestProducer delegate, @Nullable Span span, + public HttpAsyncRequestProducerWrapper with(HttpAsyncRequestProducer delegate, @Nullable Span span, @Nullable AbstractSpan parent) { // Order is important due to visibility - write to delegate last on this (initiating) thread this.span = span; diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ApiInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ApiInstrumentation.java index 7a759f26ea..0461924aca 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ApiInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ApiInstrumentation.java @@ -24,6 +24,7 @@ import java.util.Collections; public abstract class ApiInstrumentation extends TracerAwareInstrumentation { + @Override public boolean includeWhenInstrumentationIsDisabled() { return true; diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java index c80b786de2..426727d4fa 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java @@ -18,6 +18,7 @@ */ package co.elastic.apm.agent.pluginapi; +import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -32,7 +33,7 @@ public class CaptureExceptionInstrumentation extends ApiInstrumentation { public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void captureException(@Advice.Origin Class clazz, @Advice.Argument(0) Throwable t) { - tracer.captureAndReportException(t, PrivilegedActionUtils.getClassLoader(clazz)); + tracer.require(Tracer.class).captureAndReportException(t, PrivilegedActionUtils.getClassLoader(clazz)); } } diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java index 189113daff..5a38572435 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java @@ -18,15 +18,17 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.bytebuddy.AnnotationValueOffsetMappingFactory; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -49,10 +51,12 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; -public class CaptureSpanInstrumentation extends TracerAwareInstrumentation { +public class CaptureSpanInstrumentation extends ElasticApmInstrumentation { public static final Logger logger = LoggerFactory.getLogger(CaptureSpanInstrumentation.class); + public static final Tracer tracer = GlobalTracer.get(); + private final CoreConfiguration coreConfig; private final StacktraceConfiguration stacktraceConfig; @@ -83,14 +87,14 @@ public static Object onMethodEnter( ) { final AbstractSpan parent = tracer.getActive(); if (parent != null) { - Span span = asExit ? parent.createExitSpan() : parent.createSpan(); + Span span = asExit ? parent.createExitSpan() : parent.createSpan(); if (span == null) { return null; } span.withName(spanName.isEmpty() ? signature : spanName) - .activate() - .setType(type, subtype, action); + .activate(); + ((co.elastic.apm.agent.impl.transaction.Span) span).setType(type, subtype, action); if (!discardable) { span.setNonDiscardable(); @@ -105,8 +109,8 @@ public static Object onMethodEnter( @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onMethodExit(@Advice.Enter @Nullable Object span, @Advice.Thrown @Nullable Throwable t) { - if (span instanceof Span) { - ((Span) span) + if (span instanceof Span) { + ((Span) span) .captureException(t) .withOutcome(t != null ? Outcome.FAILURE : Outcome.SUCCESS) .deactivate() diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java index c0f6692a55..fe3f59f280 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java @@ -18,14 +18,16 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.bytebuddy.AnnotationValueOffsetMappingFactory.AnnotationValueExtractor; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -53,7 +55,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; -public class CaptureTransactionInstrumentation extends TracerAwareInstrumentation { +public class CaptureTransactionInstrumentation extends ElasticApmInstrumentation { + + public static final Tracer tracer = GlobalTracer.get(); public static final Logger logger = LoggerFactory.getLogger(CaptureTransactionInstrumentation.class); @@ -74,7 +78,7 @@ public static Object onMethodEnter(@Advice.Origin Class clazz, @AnnotationValueExtractor(annotationClassName = "co.elastic.apm.api.CaptureTransaction", method = "type") String type) { final Object active = tracer.getActive(); if (active == null) { - Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); + Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); if (transaction != null) { if (transactionName.isEmpty()) { transaction.withName(signature, PRIO_METHOD_SIGNATURE); @@ -95,8 +99,8 @@ public static Object onMethodEnter(@Advice.Origin Class clazz, @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onMethodExit(@Advice.Enter @Nullable Object transaction, @Advice.Thrown @Nullable Throwable t) { - if (transaction instanceof Transaction) { - ((Transaction) transaction) + if (transaction instanceof Transaction) { + ((Transaction) transaction) .captureException(t) .withOutcome(t != null ? Outcome.FAILURE : Outcome.SUCCESS) .deactivate() diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java index 841adfbed4..c30d9cf067 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java @@ -19,8 +19,10 @@ package co.elastic.apm.agent.pluginapi; import co.elastic.apm.agent.configuration.ServiceInfo; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -65,7 +67,7 @@ public static class AdviceClass { @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static Object doStartTransaction(@Advice.Origin Class clazz) { - Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); + Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); if (transaction != null) { transaction.setFrameworkName(Utils.FRAMEWORK_NAME); } @@ -90,7 +92,7 @@ public static Object doStartTransaction(@Advice.Origin Class clazz, @Advice.Argument(1) @Nullable Object headerExtractor, @Advice.Argument(2) MethodHandle getAllHeaders, @Advice.Argument(3) @Nullable Object headersExtractor) { - Transaction transaction = null; + Transaction transaction = null; ClassLoader classLoader = PrivilegedActionUtils.getClassLoader(clazz); if (headersExtractor != null) { HeadersExtractorBridge headersExtractorBridge = HeadersExtractorBridge.get(getFirstHeader, getAllHeaders); @@ -147,7 +149,7 @@ public CaptureExceptionInstrumentation() { public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void captureException(@Advice.Origin Class clazz, @Advice.Argument(0) @Nullable Throwable e) { - tracer.captureAndReportException(e, PrivilegedActionUtils.getClassLoader(clazz)); + tracer.require(Tracer.class).captureAndReportException(e, PrivilegedActionUtils.getClassLoader(clazz)); } } } @@ -160,7 +162,7 @@ public SetServiceInfoForClassLoaderInstrumentation() { public static class AdviceClass { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void setServiceInfoForClassLoader(@Advice.Argument(0) @Nullable ClassLoader classLoader, @Advice.Argument(1) String serviceName, @Advice.Argument(2) @Nullable String serviceVersion) { - tracer.setServiceInfoForClassLoader(classLoader, ServiceInfo.of(serviceName, serviceVersion)); + tracer.require(Tracer.class).setServiceInfoForClassLoader(classLoader, ServiceInfo.of(serviceName, serviceVersion)); } } } @@ -176,7 +178,10 @@ public static class AdviceClass { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static Object doGetConfig(@Advice.Argument(0) @Nullable String key) { try { - ConfigurationOption configValue = GlobalTracer.getTracerImpl().getConfigurationRegistry().getConfigurationOptionByKey(key); + ConfigurationOption configValue = GlobalTracer.get() + .require(ElasticApmTracer.class) + .getConfigurationRegistry() + .getConfigurationOptionByKey(key); if (configValue == null) { return null; } else { diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/LegacySpanInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/LegacySpanInstrumentation.java index f2833632c1..6f468d3784 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/LegacySpanInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/LegacySpanInstrumentation.java @@ -18,8 +18,7 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -71,8 +70,8 @@ public static class AdviceClass { @Advice.OnMethodEnter(inline = false) public static void setName(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span, @Advice.Argument(0) String name) { - if (span instanceof Span) { - ((Span) span).withName(name, PRIO_USER_SUPPLIED); + if (span instanceof Span) { + ((Span) span).withName(name, PRIO_USER_SUPPLIED); } } } @@ -87,8 +86,8 @@ public static class AdviceClass { @Advice.OnMethodEnter(inline = false) public static void setType(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span, @Advice.Argument(0) String type) { - if (span instanceof Span) { - ((Span) span).setType(type, null, null); + if (span instanceof co.elastic.apm.agent.impl.transaction.Span) { + ((co.elastic.apm.agent.impl.transaction.Span) span).setType(type, null, null); } } } @@ -104,8 +103,8 @@ public static class AdviceClass { @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(inline = false) public static Object doCreateSpan(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span) { - if (span instanceof Span) { - return ((Span) span).createSpan(); + if (span instanceof Span) { + return ((Span) span).createSpan(); } else { return null; } @@ -121,8 +120,8 @@ public EndInstrumentation() { public static class AdviceClass { @Advice.OnMethodEnter(inline = false) public static void end(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span) { - if (span instanceof Span) { - ((Span) span).end(); + if (span instanceof Span) { + ((Span) span).end(); } } } @@ -137,8 +136,8 @@ public static class AdviceClass { @Advice.OnMethodExit(inline = false) public static void captureException(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span, @Advice.Argument(0) Throwable t) { - if (span instanceof Span) { - ((Span) span).captureException(t); + if (span instanceof Span) { + ((Span) span).captureException(t); } } } @@ -155,8 +154,8 @@ public static class AdviceClass { @Advice.OnMethodExit(inline = false) public static String getId(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span, @Advice.Return @Nullable String returnValue) { - if (span instanceof Span) { - return ((Span) span).getTraceContext().getId().toString(); + if (span instanceof Span) { + return ((Span) span).getTraceContext().getId().toString(); } else { return returnValue; } @@ -175,8 +174,8 @@ public static class AdviceClass { @Advice.OnMethodExit(inline = false) public static String getTraceId(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span, @Advice.Return @Nullable String returnValue) { - if (span instanceof Span) { - return ((Span) span).getTraceContext().getTraceId().toString(); + if (span instanceof Span) { + return ((Span) span).getTraceContext().getTraceId().toString(); } else { return returnValue; } @@ -194,8 +193,8 @@ public static class AdviceClass { public static void addTag(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span, @Advice.Argument(0) String key, @Advice.Argument(1) String value) { - if (span instanceof Span) { - ((Span) span).addLabel(key, value); + if (span instanceof co.elastic.apm.agent.impl.transaction.Span) { + ((co.elastic.apm.agent.impl.transaction.Span) span).addLabel(key, value); } } } @@ -209,8 +208,8 @@ public ActivateInstrumentation() { public static class AdviceClass { @Advice.OnMethodEnter(inline = false) public static void activate(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span) { - if (span instanceof Span) { - ((Span) span).activate(); + if (span instanceof Span) { + ((Span) span).activate(); } } } @@ -226,8 +225,8 @@ public static class AdviceClass { @Advice.OnMethodExit(inline = false) public static boolean isSampled(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object span, @Advice.Return boolean returnValue) { - if (span instanceof Span) { - return ((AbstractSpan) span).isSampled(); + if (span instanceof Span) { + return ((Span) span).isSampled(); } else { return returnValue; } diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TracedInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TracedInstrumentation.java index 3f57f11e46..ec21146e65 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TracedInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TracedInstrumentation.java @@ -18,16 +18,18 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.bytebuddy.AnnotationValueOffsetMappingFactory; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -53,7 +55,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; -public class TracedInstrumentation extends TracerAwareInstrumentation { +public class TracedInstrumentation extends ElasticApmInstrumentation { + + public static final Tracer tracer = GlobalTracer.get(); private final CoreConfiguration coreConfig; private final StacktraceConfiguration stacktraceConfig; @@ -86,7 +90,7 @@ public static Object onMethodEnter( final AbstractSpan parent = tracer.getActive(); if (parent != null) { - Span span = asExit ? parent.createExitSpan() : parent.createSpan(); + Span span = asExit ? parent.createExitSpan() : parent.createSpan(); if (span == null) { return null; } @@ -101,7 +105,7 @@ public static Object onMethodEnter( return span.activate(); } - Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); + Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); if (transaction == null) { return null; } @@ -117,7 +121,7 @@ public static Object onMethodEnter( namePriority = PRIO_USER_SUPPLIED; } return transaction.withName(name, namePriority) - .withType(type.isEmpty() ? Transaction.TYPE_REQUEST : type) + .withType(type.isEmpty() ? co.elastic.apm.agent.impl.transaction.Transaction.TYPE_REQUEST : type) .activate(); } diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TransactionInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TransactionInstrumentation.java index 766cf743eb..b74dfc1582 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TransactionInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/TransactionInstrumentation.java @@ -19,6 +19,7 @@ package co.elastic.apm.agent.pluginapi; import co.elastic.apm.agent.configuration.ServiceInfo; +import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.impl.transaction.Id; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction; @@ -175,7 +176,7 @@ public static class AdviceClass { public static void useServiceInfoForClassLoader(@Advice.FieldValue(value = "span", typing = Assigner.Typing.DYNAMIC) Object transaction, @Advice.Argument(0) ClassLoader classLoader) { if (transaction instanceof Transaction) { - ServiceInfo serviceInfo = tracer.getServiceInfoForClassLoader(classLoader); + ServiceInfo serviceInfo = tracer.require(Tracer.class).getServiceInfoForClassLoader(classLoader); if (serviceInfo != null) { ((Transaction) transaction).getTraceContext().setServiceInfo(serviceInfo.getServiceName(), serviceInfo.getServiceVersion()); } diff --git a/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java b/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java index 726783d159..db5416f51e 100644 --- a/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java @@ -21,10 +21,9 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; @@ -65,8 +64,8 @@ public static class Helper { @Nullable - static Span removeAndActivateSpan(AsyncHandler asyncHandler) { - Span span = handlerSpanMap.remove(asyncHandler); + static Span removeAndActivateSpan(AsyncHandler asyncHandler) { + Span span = handlerSpanMap.remove(asyncHandler); if (span != null) { span.activate(); } @@ -74,8 +73,8 @@ static Span removeAndActivateSpan(AsyncHandler asyncHandler) { } @Nullable - static Span getAndActivateSpan(AsyncHandler asyncHandler) { - Span span = handlerSpanMap.get(asyncHandler); + static Span getAndActivateSpan(AsyncHandler asyncHandler) { + Span span = handlerSpanMap.get(asyncHandler); if (span != null) { span.activate(); } @@ -108,7 +107,7 @@ public static Object onBeforeExecute(@Advice.Argument(value = 0) Request request DynamicTransformer.ensureInstrumented(asyncHandler.getClass(), Helper.ASYNC_HANDLER_INSTRUMENTATIONS); Uri uri = request.getUri(); - Span span = HttpClientHelper.startHttpClientSpan(parent, request.getMethod(), uri.toUrl(), uri.getScheme(), uri.getHost(), uri.getPort()); + Span span = HttpClientHelper.startHttpClientSpan(parent, request.getMethod(), uri.toUrl(), uri.getScheme(), uri.getHost(), uri.getPort()); if (span != null) { span.activate(); @@ -127,7 +126,7 @@ public static void onAfterExecute(@Advice.Enter @Nullable Object spanObj, if (spanObj == null) { return; } - Span span = (Span) spanObj; + Span span = (Span) spanObj; span.deactivate(); if (t != null) { Helper.handlerSpanMap.remove(asyncHandler); @@ -174,7 +173,7 @@ public ElementMatcher getMethodMatcher() { public static class AsyncHandlerOnCompletedInstrumentation extends AbstractAsyncHandlerInstrumentation { - public AsyncHandlerOnCompletedInstrumentation(ElasticApmTracer tracer) { + public AsyncHandlerOnCompletedInstrumentation() { super(named("onCompleted").and(takesArguments(0))); } @@ -187,7 +186,7 @@ public static Object onMethodEnter(@Advice.This AsyncHandler asyncHandler) { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onMethodExit(@Nullable @Advice.Enter Object spanObj) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { span.end(); span.deactivate(); @@ -198,7 +197,7 @@ public static void onMethodExit(@Nullable @Advice.Enter Object spanObj) { public static class AsyncHandlerOnThrowableInstrumentation extends AbstractAsyncHandlerInstrumentation { - public AsyncHandlerOnThrowableInstrumentation(ElasticApmTracer tracer) { + public AsyncHandlerOnThrowableInstrumentation() { super(named("onThrowable").and(takesArguments(Throwable.class))); } @@ -211,7 +210,7 @@ public static Object onMethodEnter(@Advice.This AsyncHandler asyncHandler) { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onMethodExit(@Nullable @Advice.Enter Object spanObj, @Advice.Argument(0) Throwable t) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { if (t instanceof MaxRedirectException) { span.withOutcome(Outcome.FAILURE); @@ -225,7 +224,7 @@ public static void onMethodExit(@Nullable @Advice.Enter Object spanObj, @Advice. public static class AsyncHandlerOnStatusReceivedInstrumentation extends AbstractAsyncHandlerInstrumentation { - public AsyncHandlerOnStatusReceivedInstrumentation(ElasticApmTracer tracer) { + public AsyncHandlerOnStatusReceivedInstrumentation() { super(named("onStatusReceived").and(takesArgument(0, named("org.asynchttpclient.HttpResponseStatus")))); } @@ -238,7 +237,7 @@ public static Object onMethodEnter(@Advice.This AsyncHandler asyncHandler) { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onMethodExit(@Nullable @Advice.Enter Object spanObj, @Advice.Argument(0) HttpResponseStatus status) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { span.getContext().getHttp().withStatusCode(status.getStatusCode()); span.deactivate(); @@ -249,7 +248,7 @@ public static void onMethodExit(@Nullable @Advice.Enter Object spanObj, @Advice. public static class StreamedAsyncHandlerOnStreamInstrumentation extends AbstractAsyncHandlerInstrumentation { - public StreamedAsyncHandlerOnStreamInstrumentation(ElasticApmTracer tracer) { + public StreamedAsyncHandlerOnStreamInstrumentation() { super(named("onStream").and(takesArgument(0, named("org.reactivestreams.Publisher")))); } @@ -262,7 +261,7 @@ public static Object onMethodEnter(@Advice.This AsyncHandler asyncHandler) { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onMethodExit(@Nullable @Advice.Enter Object spanObj) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { span.deactivate(); } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/AmazonHttpClientInstrumentation.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/AmazonHttpClientInstrumentation.java index dc323b8412..3634080480 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/AmazonHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/AmazonHttpClientInstrumentation.java @@ -25,7 +25,7 @@ import co.elastic.apm.agent.awssdk.v1.helper.SQSHelper; import co.elastic.apm.agent.awssdk.v1.helper.SdkV1DataSource; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import com.amazonaws.Request; import com.amazonaws.handlers.HandlerContextKey; import com.amazonaws.http.ExecutionContext; @@ -76,7 +76,7 @@ public static Object enterInvoke(@Advice.Argument(value = 0) Request request, return null; } - Span span = helper.startSpan(request, request.getEndpoint(), executionContext); + Span span = helper.startSpan(request, request.getEndpoint(), executionContext); if (span != null) { span.activate(); @@ -90,8 +90,8 @@ public static Object enterInvoke(@Advice.Argument(value = 0) Request request, @Advice.OnMethodExit(suppress = Throwable.class, inline = false, onThrowable = Throwable.class) public static void exitInvoke(@Nullable @Advice.Enter Object spanObj, @Nullable @Advice.Thrown Throwable thrown) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.deactivate(); if (thrown != null) { span.captureException(thrown); diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/SQSMessageDispatchingInstrumentation.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/SQSMessageDispatchingInstrumentation.java index ae613528e6..c9c4cc96fb 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/SQSMessageDispatchingInstrumentation.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/SQSMessageDispatchingInstrumentation.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.awssdk.v1.helper.SQSHelper; import co.elastic.apm.agent.awssdk.v1.helper.SdkV1DataSource; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.state.CallDepth; import com.amazonaws.AmazonWebServiceRequest; import com.amazonaws.services.sqs.model.ReceiveMessageRequest; @@ -49,8 +49,8 @@ public ElementMatcher getTypeMatcher() { } protected static void endSpan(@Nullable Object spanObj, @Nullable Throwable thrown) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.deactivate(); if (thrown != null) { span.captureException(thrown); @@ -91,7 +91,7 @@ public static Object enterSendMessage(@Advice.Argument(value = 0) AmazonWebServi return null; } - Span span = SQSHelper.getInstance().createSpan(queueName); + Span span = SQSHelper.getInstance().createSpan(queueName); if (span != null) { SQSHelper.getInstance().propagateContext(span, request); @@ -123,7 +123,7 @@ public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object enterReceiveMessage(@Advice.Argument(value = 0) ReceiveMessageRequest receiveMessageRequest) { String queueName = SdkV1DataSource.getInstance().getQueueNameFromQueueUrl(receiveMessageRequest.getQueueUrl()); - Span span = SQSHelper.getInstance().createSpan(queueName); + Span span = SQSHelper.getInstance().createSpan(queueName); if (span != null) { span.activate(); @@ -141,8 +141,8 @@ public static ReceiveMessageResult exitReceiveMessage(@Nullable @Advice.Enter Ob @Advice.Argument(value = 0) ReceiveMessageRequest receiveMessageRequest, @Advice.Return ReceiveMessageResult result, @Nullable @Advice.Thrown Throwable thrown) { - if (spanObj instanceof Span) { - SQSHelper.getInstance().handleReceivedMessages((Span) spanObj, receiveMessageRequest.getQueueUrl(), result.getMessages()); + if (spanObj instanceof Span) { + SQSHelper.getInstance().handleReceivedMessages((Span) spanObj, receiveMessageRequest.getQueueUrl(), result.getMessages()); } endSpan(spanObj, thrown); diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/DynamoDbHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/DynamoDbHelper.java index ba6f86bfa8..619ebf1c65 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/DynamoDbHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/DynamoDbHelper.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.awssdk.v1.helper; import co.elastic.apm.agent.awssdk.common.AbstractDynamoDBInstrumentationHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import com.amazonaws.AmazonWebServiceRequest; import com.amazonaws.Request; import com.amazonaws.http.ExecutionContext; @@ -31,22 +31,22 @@ public class DynamoDbHelper extends AbstractDynamoDBInstrumentationHelper, ExecutionContext> { - private static final DynamoDbHelper INSTANCE = new DynamoDbHelper(GlobalTracer.requireTracerImpl()); + private static final DynamoDbHelper INSTANCE = new DynamoDbHelper(GlobalTracer.get()); public static DynamoDbHelper getInstance() { return INSTANCE; } - public DynamoDbHelper(ElasticApmTracer tracer) { + public DynamoDbHelper(Tracer tracer) { super(tracer, SdkV1DataSource.getInstance()); } @Nullable @Override - public Span startSpan(Request request, URI httpURI, ExecutionContext context) { + public Span startSpan(Request request, URI httpURI, ExecutionContext context) { AmazonWebServiceRequest amazonRequest = request.getOriginalRequest(); - Span span = super.startSpan(request, httpURI, context); + Span span = super.startSpan(request, httpURI, context); if (span != null) { span.withSync(!isRequestAsync(amazonRequest)); } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/S3Helper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/S3Helper.java index 178c09ab91..e8b048b6aa 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/S3Helper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/S3Helper.java @@ -19,22 +19,20 @@ package co.elastic.apm.agent.awssdk.v1.helper; import co.elastic.apm.agent.awssdk.common.AbstractS3InstrumentationHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import com.amazonaws.Request; import com.amazonaws.http.ExecutionContext; -import javax.annotation.Nullable; - public class S3Helper extends AbstractS3InstrumentationHelper, ExecutionContext> { - private static final S3Helper INSTANCE = new S3Helper(GlobalTracer.requireTracerImpl()); + private static final S3Helper INSTANCE = new S3Helper(GlobalTracer.get()); public static S3Helper getInstance() { return INSTANCE; } - public S3Helper(ElasticApmTracer tracer) { + public S3Helper(Tracer tracer) { super(tracer, SdkV1DataSource.getInstance()); } } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/SQSHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/SQSHelper.java index b0c26d3f30..3b1da59c60 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/SQSHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/SQSHelper.java @@ -21,11 +21,12 @@ import co.elastic.apm.agent.awssdk.common.AbstractSQSInstrumentationHelper; import co.elastic.apm.agent.awssdk.v1.helper.sqs.wrapper.ReceiveMessageResultWrapper; import co.elastic.apm.agent.configuration.CoreConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.common.util.WildcardMatcher; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.dispatch.TextHeaderSetter; import com.amazonaws.AmazonWebServiceRequest; import com.amazonaws.Request; @@ -46,18 +47,18 @@ public class SQSHelper extends AbstractSQSInstrumentationHelper, ExecutionContext, Message> implements TextHeaderSetter> { - private static final SQSHelper INSTANCE = new SQSHelper(GlobalTracer.requireTracerImpl()); + private static final SQSHelper INSTANCE = new SQSHelper(GlobalTracer.get()); public static SQSHelper getInstance() { return INSTANCE; } - protected SQSHelper(ElasticApmTracer tracer) { + protected SQSHelper(Tracer tracer) { super(tracer, SdkV1DataSource.getInstance()); } - public void propagateContext(Span span, AmazonWebServiceRequest request) { + public void propagateContext(Span span, AmazonWebServiceRequest request) { if (request instanceof SendMessageRequest) { SendMessageRequest sendMessageRequest = (SendMessageRequest) request; span.propagateTraceContext(sendMessageRequest.getMessageAttributes(), this); @@ -127,7 +128,7 @@ protected boolean isReceiveMessageRequest(Request request) { } @Override - protected void setMessageContext(@Nullable Message sqsMessage, @Nullable String queueName, co.elastic.apm.agent.impl.context.Message message) { + protected void setMessageContext(@Nullable Message sqsMessage, @Nullable String queueName, co.elastic.apm.agent.tracer.metadata.Message message) { if (queueName != null) { message.withQueue(queueName); } @@ -164,15 +165,18 @@ protected void setMessageContext(@Nullable Message sqsMessage, @Nullable String */ @Nullable @Override - public Span startSpan(Request request, URI httpURI, ExecutionContext context) { + public Span startSpan(Request request, URI httpURI, ExecutionContext context) { if (isAlreadyActive(request)) { - Span activeSpan = tracer.getActiveExitSpan(); - if (activeSpan != null && SQS_TYPE.equals(activeSpan.getSubtype())) { - enrichSpan(activeSpan, request, request.getEndpoint(), context); - activeSpan.withSync(isRequestSync(request.getOriginalRequest())); + AbstractSpan active = tracer.getActive(); + if (active instanceof Span) { + Span activeSpan = (Span) active; + if (activeSpan.isExit() && SQS_TYPE.equals(activeSpan.getSubtype())) { + enrichSpan(activeSpan, request, request.getEndpoint(), context); + activeSpan.withSync(isRequestSync(request.getOriginalRequest())); + } } } else { - Span span = super.startSpan(request, request.getEndpoint(), context); + Span span = super.startSpan(request, request.getEndpoint(), context); if (span != null) { span.withSync(isRequestSync(request.getOriginalRequest())); return span; diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageIteratorWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageIteratorWrapper.java index 033b57aea0..e1a61110aa 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageIteratorWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageIteratorWrapper.java @@ -20,13 +20,13 @@ import co.elastic.apm.agent.awssdk.common.AbstractMessageIteratorWrapper; import co.elastic.apm.agent.awssdk.v1.helper.SQSHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import com.amazonaws.services.sqs.model.Message; import java.util.Iterator; class MessageIteratorWrapper extends AbstractMessageIteratorWrapper { - public MessageIteratorWrapper(Iterator delegate, ElasticApmTracer tracer, String queueName) { + public MessageIteratorWrapper(Iterator delegate, Tracer tracer, String queueName) { super(delegate, tracer, queueName, SQSHelper.getInstance(), SQSHelper.getInstance()); } } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageListWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageListWrapper.java index 9bf1b83dcb..729f565105 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageListWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/MessageListWrapper.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.awssdk.common.AbstractMessageListWrapper; import co.elastic.apm.agent.awssdk.v1.helper.SQSHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import com.amazonaws.services.sqs.model.Message; import java.util.Iterator; @@ -28,7 +28,7 @@ public class MessageListWrapper extends AbstractMessageListWrapper { - public MessageListWrapper(List delegate, ElasticApmTracer tracer, String queueName) { + public MessageListWrapper(List delegate, Tracer tracer, String queueName) { super(delegate, tracer, queueName, SQSHelper.getInstance(), SQSHelper.getInstance()); } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/ReceiveMessageResultWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/ReceiveMessageResultWrapper.java index 060da9eeb1..8bcf2573ce 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/ReceiveMessageResultWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/main/java/co/elastic/apm/agent/awssdk/v1/helper/sqs/wrapper/ReceiveMessageResultWrapper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.awssdk.v1.helper.sqs.wrapper; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import com.amazonaws.services.sqs.model.Message; import com.amazonaws.services.sqs.model.ReceiveMessageResult; @@ -27,12 +27,12 @@ public class ReceiveMessageResultWrapper extends ReceiveMessageResult { private final ReceiveMessageResult delegate; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final String queueName; private final MessageListWrapper listWrapper; - public ReceiveMessageResultWrapper(ReceiveMessageResult delegate, ElasticApmTracer tracer, String queueName) { + public ReceiveMessageResultWrapper(ReceiveMessageResult delegate, Tracer tracer, String queueName) { this.delegate = delegate; this.tracer = tracer; this.queueName = queueName; diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/test/java/co/elastic/apm/agent/awssdk/v1/SQSJmsClientIT.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/test/java/co/elastic/apm/agent/awssdk/v1/SQSJmsClientIT.java index 9bbcb8fe7b..9f2c1efcaa 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/test/java/co/elastic/apm/agent/awssdk/v1/SQSJmsClientIT.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-1-plugin/src/test/java/co/elastic/apm/agent/awssdk/v1/SQSJmsClientIT.java @@ -21,7 +21,8 @@ import co.elastic.apm.agent.awssdk.common.AbstractAwsClientIT; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Span; @@ -296,7 +297,7 @@ static class SQSListener implements MessageListener { @Override public void onMessage(Message message) { try { - Tracer tracer = GlobalTracer.getTracerImpl(); + Tracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); assertThat(tracer).isNotNull(); AbstractSpan parent = tracer.getActive(); assertThat(parent).isNotNull(); diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseAsyncClientHandlerInstrumentation.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseAsyncClientHandlerInstrumentation.java index 1d7910d273..ecadaf77fc 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseAsyncClientHandlerInstrumentation.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseAsyncClientHandlerInstrumentation.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.awssdk.v2.helper.S3Helper; import co.elastic.apm.agent.awssdk.v2.helper.SQSHelper; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -75,7 +75,7 @@ public static TransformingAsyncResponseHandler enterDoExecute(@Advice.Argumen String awsService = executionContext.executionAttributes().getAttribute(AwsSignerExecutionAttribute.SERVICE_NAME); SdkRequest sdkRequest = clientExecutionParams.getInput(); URI uri = clientConfiguration.option(SdkClientOption.ENDPOINT); - Span span = null; + Span span = null; if ("S3".equalsIgnoreCase(awsService)) { span = S3Helper.getInstance().startSpan(sdkRequest, uri, executionContext); } else if ("DynamoDb".equalsIgnoreCase(awsService)) { diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseSyncClientHandlerInstrumentation.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseSyncClientHandlerInstrumentation.java index 64ececba11..f582d72811 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseSyncClientHandlerInstrumentation.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/BaseSyncClientHandlerInstrumentation.java @@ -25,7 +25,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.common.JvmRuntimeInfo; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -84,7 +84,7 @@ public static Object enterDoExecute(@Advice.Argument(value = 0) ClientExecutionP String awsService = executionContext.executionAttributes().getAttribute(AwsSignerExecutionAttribute.SERVICE_NAME); SdkRequest sdkRequest = clientExecutionParams.getInput(); URI uri = clientConfiguration.option(SdkClientOption.ENDPOINT); - Span span = null; + Span span = null; if ("S3".equalsIgnoreCase(awsService)) { span = S3Helper.getInstance().startSpan(sdkRequest, uri, executionContext); } else if ("DynamoDb".equalsIgnoreCase(awsService)) { @@ -110,8 +110,8 @@ public static void exitDoExecute(@Advice.Argument(value = 0) ClientExecutionPara @Advice.This Object thiz) { String awsService = executionContext.executionAttributes().getAttribute(AwsSignerExecutionAttribute.SERVICE_NAME); SdkRequest sdkRequest = clientExecutionParams.getInput(); - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.deactivate(); if (thrown != null) { if (JVM_RUNTIME_INFO.isCoretto() && JVM_RUNTIME_INFO.getMajorVersion() > 16) { diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/ResponseHandlerWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/ResponseHandlerWrapper.java index a878e0b71c..839d3739ca 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/ResponseHandlerWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/ResponseHandlerWrapper.java @@ -21,7 +21,7 @@ import co.elastic.apm.agent.awssdk.v2.helper.SQSHelper; import co.elastic.apm.agent.awssdk.v2.helper.sqs.wrapper.MessageListWrapper; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import org.reactivestreams.Publisher; import software.amazon.awssdk.core.Response; import software.amazon.awssdk.core.SdkRequest; @@ -37,11 +37,11 @@ public class ResponseHandlerWrapper implements TransformingAsyncResponseHandl private final TransformingAsyncResponseHandler> delegate; @Nullable - private final Span span; + private final Span span; private final SdkRequest sdkRequest; private final String awsService; - public ResponseHandlerWrapper(String awsService, TransformingAsyncResponseHandler> delegate, SdkRequest request, @Nullable Span span) { + public ResponseHandlerWrapper(String awsService, TransformingAsyncResponseHandler> delegate, SdkRequest request, @Nullable Span span) { this.awsService = awsService; this.delegate = delegate; this.span = span; diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/DynamoDbHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/DynamoDbHelper.java index a98e41cc18..44f6dd7706 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/DynamoDbHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/DynamoDbHelper.java @@ -19,22 +19,20 @@ package co.elastic.apm.agent.awssdk.v2.helper; import co.elastic.apm.agent.awssdk.common.AbstractDynamoDBInstrumentationHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import software.amazon.awssdk.core.SdkRequest; import software.amazon.awssdk.core.http.ExecutionContext; -import javax.annotation.Nullable; - public class DynamoDbHelper extends AbstractDynamoDBInstrumentationHelper { - private static final DynamoDbHelper INSTANCE = new DynamoDbHelper(GlobalTracer.requireTracerImpl()); + private static final DynamoDbHelper INSTANCE = new DynamoDbHelper(GlobalTracer.get()); public static DynamoDbHelper getInstance() { return INSTANCE; } - public DynamoDbHelper(ElasticApmTracer tracer) { + public DynamoDbHelper(Tracer tracer) { super(tracer, SdkV2DataSource.getInstance()); } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/S3Helper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/S3Helper.java index 72d21a328f..09c3726133 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/S3Helper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/S3Helper.java @@ -19,22 +19,20 @@ package co.elastic.apm.agent.awssdk.v2.helper; import co.elastic.apm.agent.awssdk.common.AbstractS3InstrumentationHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import software.amazon.awssdk.core.SdkRequest; import software.amazon.awssdk.core.http.ExecutionContext; -import javax.annotation.Nullable; - public class S3Helper extends AbstractS3InstrumentationHelper { - private static final S3Helper INSTANCE = new S3Helper(GlobalTracer.requireTracerImpl()); + private static final S3Helper INSTANCE = new S3Helper(GlobalTracer.get()); public static S3Helper getInstance() { return INSTANCE; } - public S3Helper(ElasticApmTracer tracer) { + public S3Helper(Tracer tracer) { super(tracer, SdkV2DataSource.getInstance()); } } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/SQSHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/SQSHelper.java index c2f70d0fd0..4db9b2794e 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/SQSHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/SQSHelper.java @@ -19,10 +19,10 @@ package co.elastic.apm.agent.awssdk.v2.helper; import co.elastic.apm.agent.awssdk.common.AbstractSQSInstrumentationHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.dispatch.TextHeaderSetter; import software.amazon.awssdk.core.SdkRequest; import software.amazon.awssdk.core.SdkResponse; @@ -47,17 +47,17 @@ @SuppressWarnings({"rawtypes", "unchecked"}) public class SQSHelper extends AbstractSQSInstrumentationHelper implements TextHeaderSetter> { - private static final SQSHelper INSTANCE = new SQSHelper(GlobalTracer.requireTracerImpl()); + private static final SQSHelper INSTANCE = new SQSHelper(GlobalTracer.get()); public static SQSHelper getInstance() { return INSTANCE; } - public SQSHelper(ElasticApmTracer tracer) { + public SQSHelper(Tracer tracer) { super(tracer, SdkV2DataSource.getInstance()); } - private SdkRequest propagateContext(Span span, SdkRequest sdkRequest) { + private SdkRequest propagateContext(Span span, SdkRequest sdkRequest) { if (sdkRequest instanceof SendMessageRequest) { SendMessageRequest sendMessageRequest = (SendMessageRequest) sdkRequest; Map attributesMap = new HashMap<>(sendMessageRequest.messageAttributes()); @@ -119,7 +119,7 @@ protected boolean isReceiveMessageRequest(SdkRequest request) { return request instanceof ReceiveMessageRequest; } - public void modifyRequestObject(@Nullable Span span, ClientExecutionParams clientExecutionParams, ExecutionContext executionContext) { + public void modifyRequestObject(@Nullable Span span, ClientExecutionParams clientExecutionParams, ExecutionContext executionContext) { SdkRequest sdkRequest = clientExecutionParams.getInput(); SdkRequest newRequestObj = null; if (span != null && clientExecutionParams.getOperationName().startsWith("SendMessage")) { @@ -179,7 +179,7 @@ public void forEach(String headerName, Message message, S state, HeaderConsu } } - public void handleReceivedMessages(Span span, @Nullable SdkRequest sdkRequest, @Nullable SdkResponse sdkResponse) { + public void handleReceivedMessages(Span span, @Nullable SdkRequest sdkRequest, @Nullable SdkResponse sdkResponse) { if (sdkResponse instanceof ReceiveMessageResponse && sdkRequest instanceof ReceiveMessageRequest) { SQSHelper.getInstance().handleReceivedMessages(span, ((ReceiveMessageRequest) sdkRequest).queueUrl(), ((ReceiveMessageResponse) sdkResponse).messages()); } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageIteratorWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageIteratorWrapper.java index cddb27fd92..68c306c6ae 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageIteratorWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageIteratorWrapper.java @@ -20,13 +20,13 @@ import co.elastic.apm.agent.awssdk.common.AbstractMessageIteratorWrapper; import co.elastic.apm.agent.awssdk.v2.helper.SQSHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import software.amazon.awssdk.services.sqs.model.Message; import java.util.Iterator; class MessageIteratorWrapper extends AbstractMessageIteratorWrapper { - public MessageIteratorWrapper(Iterator delegate, ElasticApmTracer tracer, String queueName) { + public MessageIteratorWrapper(Iterator delegate, Tracer tracer, String queueName) { super(delegate, tracer, queueName, SQSHelper.getInstance(), SQSHelper.getInstance()); } } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageListWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageListWrapper.java index e0d2734c88..c53439d0aa 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageListWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/helper/sqs/wrapper/MessageListWrapper.java @@ -23,11 +23,11 @@ import co.elastic.apm.agent.awssdk.v2.helper.SQSHelper; import co.elastic.apm.agent.awssdk.v2.helper.SdkV2DataSource; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.sdk.state.CallDepth; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.tracer.Tracer; import software.amazon.awssdk.core.SdkRequest; import software.amazon.awssdk.core.SdkResponse; import software.amazon.awssdk.services.sqs.model.Message; @@ -43,7 +43,7 @@ public class MessageListWrapper extends AbstractMessageListWrapper { public static final CallDepth jmsReceiveMessageCallDepth = CallDepth.get(MessageListWrapper.class); private static final WeakMap> sqsResponseToWrappedMessageListMap = WeakConcurrent.buildMap(); - public static void registerWrapperListForResponse(@Nullable SdkRequest sdkRequest, @Nullable SdkResponse sdkResponse, ElasticApmTracer tracer) { + public static void registerWrapperListForResponse(@Nullable SdkRequest sdkRequest, @Nullable SdkResponse sdkResponse, Tracer tracer) { if (sdkResponse instanceof ReceiveMessageResponse && sdkRequest instanceof ReceiveMessageRequest) { String queueName = SdkV2DataSource.getInstance().getFieldValue(IAwsSdkDataSource.QUEUE_NAME_FIELD, sdkRequest); ReceiveMessageResponse receiveMessageResponse = (ReceiveMessageResponse) sdkResponse; @@ -66,7 +66,7 @@ public static List getMessagesList(ReceiveMessageResponse response) { return sqsResponseToWrappedMessageListMap.get(response); } - public MessageListWrapper(List delegate, ElasticApmTracer tracer, String queueName) { + public MessageListWrapper(List delegate, Tracer tracer, String queueName) { super(delegate, tracer, queueName, SQSHelper.getInstance(), SQSHelper.getInstance()); } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/test/java/co/elastic/apm/agent/awssdk/v2/SQSJmsClientIT.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/test/java/co/elastic/apm/agent/awssdk/v2/SQSJmsClientIT.java index b2c23b8d20..73f0650016 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/test/java/co/elastic/apm/agent/awssdk/v2/SQSJmsClientIT.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/test/java/co/elastic/apm/agent/awssdk/v2/SQSJmsClientIT.java @@ -21,7 +21,8 @@ import co.elastic.apm.agent.awssdk.common.AbstractAwsClientIT; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Span; @@ -301,7 +302,7 @@ static class SQSListener implements MessageListener { @Override public void onMessage(Message message) { try { - Tracer tracer = GlobalTracer.getTracerImpl(); + Tracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); assertThat(tracer).isNotNull(); AbstractSpan parent = tracer.getActive(); assertThat(parent).isNotNull(); diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentationHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentationHelper.java index c9f2e803e6..2927e985ef 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentationHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentationHelper.java @@ -18,29 +18,29 @@ */ package co.elastic.apm.agent.awssdk.common; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.net.URI; public abstract class AbstractAwsSdkInstrumentationHelper { protected final IAwsSdkDataSource awsSdkDataSource; - protected final ElasticApmTracer tracer; + protected final Tracer tracer; - protected AbstractAwsSdkInstrumentationHelper(ElasticApmTracer tracer, IAwsSdkDataSource awsSdkDataSource) { + protected AbstractAwsSdkInstrumentationHelper(Tracer tracer, IAwsSdkDataSource awsSdkDataSource) { this.tracer = tracer; this.awsSdkDataSource = awsSdkDataSource; } - public ElasticApmTracer getTracer() { + public Tracer getTracer() { return tracer; } @Nullable - public abstract Span startSpan(R request, URI httpURI, C context); + public abstract Span startSpan(R request, URI httpURI, C context); - protected void setDestinationContext(Span span, @Nullable URI uri, R sdkRequest, C context, String type, @Nullable String name) { + protected void setDestinationContext(Span span, @Nullable URI uri, R sdkRequest, C context, String type, @Nullable String name) { if (uri != null) { span.getContext().getDestination() .withAddress(uri.getHost()) diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractDynamoDBInstrumentationHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractDynamoDBInstrumentationHelper.java index 0f7cf48b3a..ec94f3c0d9 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractDynamoDBInstrumentationHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractDynamoDBInstrumentationHelper.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.awssdk.common; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.net.URI; @@ -28,11 +28,11 @@ public abstract class AbstractDynamoDBInstrumentationHelper extends AbstractAwsSdkInstrumentationHelper { public static final String DYNAMO_DB_TYPE = "dynamodb"; - protected AbstractDynamoDBInstrumentationHelper(ElasticApmTracer tracer, IAwsSdkDataSource awsSdkDataSource) { + protected AbstractDynamoDBInstrumentationHelper(Tracer tracer, IAwsSdkDataSource awsSdkDataSource) { super(tracer, awsSdkDataSource); } - public void enrichSpan(Span span, R sdkRequest, URI httpURI, C context) { + public void enrichSpan(Span span, R sdkRequest, URI httpURI, C context) { String operationName = awsSdkDataSource.getOperationName(sdkRequest, context); String region = awsSdkDataSource.getRegion(sdkRequest, context); String tableName = awsSdkDataSource.getFieldValue(IAwsSdkDataSource.TABLE_NAME_FIELD, sdkRequest); @@ -49,7 +49,7 @@ public void enrichSpan(Span span, R sdkRequest, URI httpURI, C context) { } - StringBuilder name = span.getAndOverrideName(AbstractSpan.PRIO_DEFAULT); + StringBuilder name = span.getAndOverrideName(co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT); if (name != null) { name.append("DynamoDB ").append(operationName); @@ -62,8 +62,12 @@ public void enrichSpan(Span span, R sdkRequest, URI httpURI, C context) { } @Nullable - public Span startSpan(R sdkRequest, URI httpURI, C context) { - Span span = tracer.createExitChildSpan(); + public Span startSpan(R sdkRequest, URI httpURI, C context) { + AbstractSpan active = tracer.getActive(); + if (active == null) { + return null; + } + Span span = active.createExitSpan(); if (span == null) { return null; } diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageIteratorWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageIteratorWrapper.java index 30ece2f680..a377bc8be0 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageIteratorWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageIteratorWrapper.java @@ -19,9 +19,10 @@ package co.elastic.apm.agent.awssdk.common; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,12 +39,12 @@ public abstract class AbstractMessageIteratorWrapper implements Iterato public static final Logger logger = LoggerFactory.getLogger(AbstractMessageIteratorWrapper.class); private final Iterator delegate; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final String queueName; private final AbstractSQSInstrumentationHelper sqsInstrumentationHelper; private final TextHeaderGetter textHeaderGetter; - public AbstractMessageIteratorWrapper(Iterator delegate, ElasticApmTracer tracer, + public AbstractMessageIteratorWrapper(Iterator delegate, Tracer tracer, String queueName, AbstractSQSInstrumentationHelper sqsInstrumentationHelper, TextHeaderGetter textHeaderGetter) { @@ -62,8 +63,8 @@ public boolean hasNext() { } @Nullable - public Transaction endCurrentTransaction() { - Transaction transaction = null; + public Transaction endCurrentTransaction() { + Transaction transaction = null; try { transaction = tracer.currentTransaction(); if (transaction != null && MESSAGING_TYPE.equals(transaction.getType())) { @@ -77,10 +78,13 @@ public Transaction endCurrentTransaction() { } public void endMessageProcessingSpan() { - Span span = tracer.getActiveSpan(); + AbstractSpan active = tracer.getActive(); + if (!(active instanceof Span)) { + return; + } - if (span != null - && span.getType() != null && span.getType().equals(MESSAGING_TYPE) + Span span = (Span) active; + if (span.getType() != null && span.getType().equals(MESSAGING_TYPE) && span.getSubtype() != null && span.getSubtype().equals(SQS_TYPE) && span.getAction() != null && span.getAction().equals(MESSAGE_PROCESSING_ACTION)) { span.deactivate().end(); @@ -89,7 +93,7 @@ public void endMessageProcessingSpan() { @Override public Message next() { - Transaction currentTransaction = endCurrentTransaction(); + Transaction currentTransaction = endCurrentTransaction(); Message sqsMessage = delegate.next(); if (currentTransaction == null) { sqsInstrumentationHelper.startTransactionOnMessage(sqsMessage, queueName, textHeaderGetter); diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageListWrapper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageListWrapper.java index dbc2273973..79545af496 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageListWrapper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractMessageListWrapper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.awssdk.common; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; import java.util.Collection; @@ -28,13 +28,13 @@ public abstract class AbstractMessageListWrapper implements List { protected List delegate; - protected final ElasticApmTracer tracer; + protected final Tracer tracer; protected final String queueName; protected final AbstractSQSInstrumentationHelper sqsInstrumentationHelper; protected final TextHeaderGetter textHeaderGetter; - public AbstractMessageListWrapper(List delegate, ElasticApmTracer tracer, String queueName, + public AbstractMessageListWrapper(List delegate, Tracer tracer, String queueName, AbstractSQSInstrumentationHelper sqsInstrumentationHelper, TextHeaderGetter textHeaderGetter) { this.delegate = delegate; diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractS3InstrumentationHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractS3InstrumentationHelper.java index 32adc4450b..97de53a900 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractS3InstrumentationHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractS3InstrumentationHelper.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.awssdk.common; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.net.URI; @@ -28,14 +28,18 @@ public abstract class AbstractS3InstrumentationHelper extends AbstractAwsSdkInstrumentationHelper { public static final String S3_TYPE = "s3"; - protected AbstractS3InstrumentationHelper(ElasticApmTracer tracer, IAwsSdkDataSource awsSdkDataSource) { + protected AbstractS3InstrumentationHelper(Tracer tracer, IAwsSdkDataSource awsSdkDataSource) { super(tracer, awsSdkDataSource); } @Nullable - public Span startSpan(R request, URI httpURI, C context) { - Span span = tracer.createExitChildSpan(); + public Span startSpan(R request, URI httpURI, C context) { + AbstractSpan active = tracer.getActive(); + if (active == null) { + return null; + } + Span span = active.createExitSpan(); if (span == null) { return null; } @@ -45,14 +49,14 @@ public Span startSpan(R request, URI httpURI, C context) { span.withType("storage") .withSubtype(S3_TYPE) .withAction(operationName); - StringBuilder name = span.getAndOverrideName(AbstractSpan.PRIO_DEFAULT); + StringBuilder name = span.getAndOverrideName(co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT); if (name != null) { name.append("S3 ").append(operationName); if (bucketName != null && !bucketName.isEmpty()) { name.append(" ").append(bucketName); } } - span.withName("S3", AbstractSpan.PRIO_DEFAULT - 1); + span.withName("S3", co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT - 1); setDestinationContext(span, httpURI, request, context, S3_TYPE, bucketName); return span; diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractSQSInstrumentationHelper.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractSQSInstrumentationHelper.java index 6e2f121f14..f08796b627 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractSQSInstrumentationHelper.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractSQSInstrumentationHelper.java @@ -20,15 +20,15 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.context.Message; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.metadata.Message; import co.elastic.apm.agent.util.PrivilegedActionUtils; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; @@ -77,18 +77,22 @@ public abstract class AbstractSQSInstrumentationHelper extends A protected abstract boolean isReceiveMessageRequest(R request); - protected AbstractSQSInstrumentationHelper(ElasticApmTracer tracer, IAwsSdkDataSource awsSdkDataSource) { + protected AbstractSQSInstrumentationHelper(Tracer tracer, IAwsSdkDataSource awsSdkDataSource) { super(tracer, awsSdkDataSource); this.messagingConfiguration = tracer.getConfig(MessagingConfiguration.class); this.coreConfiguration = tracer.getConfig(CoreConfiguration.class); } @Nullable - public Span createSpan(@Nullable String queueName) { + public Span createSpan(@Nullable String queueName) { if (WildcardMatcher.isAnyMatch(messagingConfiguration.getIgnoreMessageQueues(), queueName)) { return null; } - Span span = tracer.createExitChildSpan(); + AbstractSpan active = tracer.getActive(); + if (active == null) { + return null; + } + Span span = active.createExitSpan(); if (span != null) { span.withType(MESSAGING_TYPE) .withSubtype(SQS_TYPE); @@ -96,7 +100,7 @@ public Span createSpan(@Nullable String queueName) { return span; } - public void enrichSpan(Span span, R request, URI httpURI, C context) { + public void enrichSpan(Span span, R request, URI httpURI, C context) { String operationName = awsSdkDataSource.getOperationName(request, context); String queueName = awsSdkDataSource.getFieldValue(IAwsSdkDataSource.QUEUE_NAME_FIELD, request); @@ -114,14 +118,14 @@ public void enrichSpan(Span span, R request, URI httpURI, C context) { .withAction(action); if (span.isSampled()) { - StringBuilder name = span.getAndOverrideName(AbstractSpan.PRIO_DEFAULT); + StringBuilder name = span.getAndOverrideName(co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT); if (name != null) { name.append("SQS ").append(spanNameOperation); if (queueName != null && !queueName.isEmpty()) { name.append(" ").append(queueName); } } - span.withName("SQS", AbstractSpan.PRIO_DEFAULT - 1); + span.withName("SQS", co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT - 1); if (queueName != null) { span.getContext().getMessage() @@ -133,11 +137,11 @@ public void enrichSpan(Span span, R request, URI httpURI, C context) { } @Nullable - public Span startSpan(R request, URI httpURI, C context) { + public Span startSpan(R request, URI httpURI, C context) { AbstractSpan activeSpan = tracer.getActive(); if (isReceiveMessageRequest(request) && messagingConfiguration.shouldEndMessagingTransactionOnPoll() && activeSpan instanceof Transaction) { - Transaction transaction = (Transaction) activeSpan; + Transaction transaction = (Transaction) activeSpan; if (MESSAGING_TYPE.equals(transaction.getType())) { transaction.deactivate().end(); return null; @@ -146,7 +150,7 @@ public Span startSpan(R request, URI httpURI, C context) { String queueName = awsSdkDataSource.getFieldValue(IAwsSdkDataSource.QUEUE_NAME_FIELD, request); - Span span = createSpan(queueName); + Span span = createSpan(queueName); if (span != null) { enrichSpan(span, request, httpURI, context); } @@ -157,7 +161,7 @@ public Span startSpan(R request, URI httpURI, C context) { public void startTransactionOnMessage(MessageT sqsMessage, String queueName, TextHeaderGetter headerGetter) { try { if (!WildcardMatcher.isAnyMatch(messagingConfiguration.getIgnoreMessageQueues(), queueName)) { - Transaction transaction = tracer.startChildTransaction(sqsMessage, headerGetter, PrivilegedActionUtils.getClassLoader(AbstractSQSInstrumentationHelper.class)); + Transaction transaction = tracer.startChildTransaction(sqsMessage, headerGetter, PrivilegedActionUtils.getClassLoader(AbstractSQSInstrumentationHelper.class)); if (transaction != null) { transaction.withType(MESSAGING_TYPE).withName("SQS RECEIVE from " + queueName).activate(); transaction.setFrameworkName(FRAMEWORK_NAME); @@ -172,12 +176,8 @@ public void startTransactionOnMessage(MessageT sqsMessage, String queueName, Tex } } - private void addSpanLink(Span span, MessageT sqsMessage, TextHeaderGetter headerGetter) { - span.addSpanLink( - TraceContext.getFromTraceContextTextHeaders(), - headerGetter, - sqsMessage - ); + private void addSpanLink(Span span, MessageT sqsMessage, TextHeaderGetter headerGetter) { + span.addLink(headerGetter, sqsMessage); } protected void setMessageContext(@Nullable MessageT sqsMessage, @Nullable String queueName, Message message) { @@ -209,7 +209,7 @@ protected void setMessageContext(@Nullable MessageT sqsMessage, @Nullable String } } - public void handleReceivedMessages(Span span, String queueUrl, @Nullable List messages) { + public void handleReceivedMessages(Span span, String queueUrl, @Nullable List messages) { String queueName = awsSdkDataSource.getQueueNameFromQueueUrl(queueUrl); MessageT singleMessage = null; if (messages != null) { diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV1TransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV1TransactionHelper.java index f9d7d8985c..25c57bfd8e 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV1TransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV1TransactionHelper.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.awslambda.MapTextHeaderGetter; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; @@ -41,7 +41,7 @@ private APIGatewayProxyV1TransactionHelper(ElasticApmTracer tracer) { public static APIGatewayProxyV1TransactionHelper getInstance() { if (INSTANCE == null) { - INSTANCE = new APIGatewayProxyV1TransactionHelper(GlobalTracer.requireTracerImpl()); + INSTANCE = new APIGatewayProxyV1TransactionHelper(GlobalTracer.get().require(ElasticApmTracer.class)); } return INSTANCE; } diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV2TransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV2TransactionHelper.java index eab0ecab6f..61a969c67d 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV2TransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/APIGatewayProxyV2TransactionHelper.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.awslambda.MapTextHeaderGetter; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; @@ -39,7 +39,7 @@ private APIGatewayProxyV2TransactionHelper(ElasticApmTracer tracer) { public static APIGatewayProxyV2TransactionHelper getInstance() { if (INSTANCE == null) { - INSTANCE = new APIGatewayProxyV2TransactionHelper(GlobalTracer.requireTracerImpl()); + INSTANCE = new APIGatewayProxyV2TransactionHelper(GlobalTracer.get().require(ElasticApmTracer.class)); } return INSTANCE; } diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/PlainTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/PlainTransactionHelper.java index 3adda2f58d..1963a04e5d 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/PlainTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/PlainTransactionHelper.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.awslambda.helper; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; @@ -39,7 +39,7 @@ private PlainTransactionHelper(ElasticApmTracer tracer) { public static PlainTransactionHelper getInstance() { if (INSTANCE == null) { - INSTANCE = new PlainTransactionHelper(GlobalTracer.requireTracerImpl()); + INSTANCE = new PlainTransactionHelper(GlobalTracer.get().require(ElasticApmTracer.class)); } return INSTANCE; } diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/S3TransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/S3TransactionHelper.java index 44b0119bc8..d44f36de88 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/S3TransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/S3TransactionHelper.java @@ -19,10 +19,10 @@ package co.elastic.apm.agent.awslambda.helper; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.CloudOrigin; import co.elastic.apm.agent.impl.context.ServiceOrigin; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.FaasTrigger; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; @@ -44,7 +44,7 @@ private S3TransactionHelper(ElasticApmTracer tracer) { public static S3TransactionHelper getInstance() { if (INSTANCE == null) { - INSTANCE = new S3TransactionHelper(GlobalTracer.requireTracerImpl()); + INSTANCE = new S3TransactionHelper(GlobalTracer.get().require(ElasticApmTracer.class)); } return INSTANCE; } diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SNSTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SNSTransactionHelper.java index 872c744d08..d5862f729a 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SNSTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SNSTransactionHelper.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.awslambda.SNSMessageAttributesGetter; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction; import com.amazonaws.services.lambda.runtime.events.SNSEvent; @@ -40,7 +40,7 @@ private SNSTransactionHelper(ElasticApmTracer tracer) { public static SNSTransactionHelper getInstance() { if (INSTANCE == null) { - INSTANCE = new SNSTransactionHelper(GlobalTracer.requireTracerImpl()); + INSTANCE = new SNSTransactionHelper(GlobalTracer.get().require(ElasticApmTracer.class)); } return INSTANCE; } diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SQSTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SQSTransactionHelper.java index c398ee7c63..0879c568c6 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SQSTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/SQSTransactionHelper.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.awslambda.SQSMessageAttributesGetter; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction; import com.amazonaws.services.lambda.runtime.events.SQSEvent; @@ -41,7 +41,7 @@ private SQSTransactionHelper(ElasticApmTracer tracer) { public static SQSTransactionHelper getInstance() { if (INSTANCE == null) { - INSTANCE = new SQSTransactionHelper(GlobalTracer.requireTracerImpl()); + INSTANCE = new SQSTransactionHelper(GlobalTracer.get().require(ElasticApmTracer.class)); } return INSTANCE; } diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/AbstractFunction.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/AbstractFunction.java index 6d5722fa97..b06efeac95 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/AbstractFunction.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/AbstractFunction.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.awslambda.lambdas; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; @@ -27,7 +28,7 @@ public abstract class AbstractFunction implements RequestHandler { protected void createChildSpan() { - Objects.requireNonNull(GlobalTracer.requireTracerImpl().getActive()) + Objects.requireNonNull(GlobalTracer.get().require(ElasticApmTracer.class).getActive()) .createSpan() .withName("child-span") .activate() diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomHandler.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomHandler.java index 337212645d..c52f751b7a 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomHandler.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomHandler.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.awslambda.lambdas; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import com.amazonaws.services.lambda.runtime.Context; import java.util.Objects; @@ -26,7 +27,7 @@ public class CustomHandler { public Void customHandleRequest(Object object, Context context) { - Objects.requireNonNull(GlobalTracer.requireTracerImpl().getActive()) + Objects.requireNonNull(GlobalTracer.get().require(ElasticApmTracer.class).getActive()) .createSpan() .withName("child-span") .activate() diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomStreamHandler.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomStreamHandler.java index d122f82615..29d95b0cc3 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomStreamHandler.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/CustomStreamHandler.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.awslambda.lambdas; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import com.amazonaws.services.lambda.runtime.Context; import java.io.InputStream; @@ -28,7 +29,7 @@ public class CustomStreamHandler { public void customHandleRequest(InputStream inputStream, OutputStream outputStream, Context context) { - Objects.requireNonNull(GlobalTracer.requireTracerImpl().getActive()) + Objects.requireNonNull(GlobalTracer.get().require(ElasticApmTracer.class).getActive()) .createSpan() .withName("child-span") .activate() diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/StreamHandlerLambdaFunction.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/StreamHandlerLambdaFunction.java index f6a46d5ce3..94bb1960a4 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/StreamHandlerLambdaFunction.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/lambdas/StreamHandlerLambdaFunction.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.awslambda.lambdas; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; @@ -30,7 +31,7 @@ public class StreamHandlerLambdaFunction implements RequestStreamHandler { @Override public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) { - Objects.requireNonNull(GlobalTracer.requireTracerImpl().getActive()) + Objects.requireNonNull(GlobalTracer.get().require(ElasticApmTracer.class).getActive()) .createSpan() .withName("child-span") .activate() diff --git a/apm-agent-plugins/apm-cassandra/apm-cassandra-core-plugin/src/main/java/co/elastic/apm/agent/cassandra/CassandraHelper.java b/apm-agent-plugins/apm-cassandra/apm-cassandra-core-plugin/src/main/java/co/elastic/apm/agent/cassandra/CassandraHelper.java index fdd67b271c..0863642b1f 100644 --- a/apm-agent-plugins/apm-cassandra/apm-cassandra-core-plugin/src/main/java/co/elastic/apm/agent/cassandra/CassandraHelper.java +++ b/apm-agent-plugins/apm-cassandra/apm-cassandra-core-plugin/src/main/java/co/elastic/apm/agent/cassandra/CassandraHelper.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.cassandra; import co.elastic.apm.agent.db.signature.SignatureParser; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; @@ -35,8 +35,12 @@ public CassandraHelper(Tracer tracer) { } @Nullable - public Span startCassandraSpan(@Nullable String query, boolean preparedStatement, @Nullable String keyspace) { - Span span = tracer.createExitChildSpan(); + public Span startCassandraSpan(@Nullable String query, boolean preparedStatement, @Nullable String keyspace) { + AbstractSpan active = tracer.getActive(); + if (active == null) { + return null; + } + Span span = active.createExitSpan(); if (span == null) { return null; } @@ -48,11 +52,11 @@ public Span startCassandraSpan(@Nullable String query, boolean preparedStatement .withStatement(query) .withInstance(keyspace); - StringBuilder name = span.getAndOverrideName(AbstractSpan.PRIO_DEFAULT); + StringBuilder name = span.getAndOverrideName(co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT); if (query != null && name != null) { signatureParser.querySignature(query, name, preparedStatement); } - span.withName(CASSANDRA, AbstractSpan.PRIO_DEFAULT - 1); + span.withName(CASSANDRA, co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT - 1); span.getContext().getServiceTarget() .withType(CASSANDRA) diff --git a/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/main/java/co/elastic/apm/agent/cassandra3/Cassandra3Instrumentation.java b/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/main/java/co/elastic/apm/agent/cassandra3/Cassandra3Instrumentation.java index fe439060e9..de24319b95 100644 --- a/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/main/java/co/elastic/apm/agent/cassandra3/Cassandra3Instrumentation.java +++ b/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/main/java/co/elastic/apm/agent/cassandra3/Cassandra3Instrumentation.java @@ -21,9 +21,9 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; import co.elastic.apm.agent.cassandra.CassandraHelper; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.Destination; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import com.datastax.driver.core.BoundStatement; import com.datastax.driver.core.Host; import com.datastax.driver.core.ResultSet; @@ -111,10 +111,10 @@ private static String getQuery(Statement statement) { public static void onExit(@Advice.Thrown @Nullable Throwable thrown, @Advice.Return ResultSetFuture result, @Nullable @Advice.Enter Object spanObj) { - if (!(spanObj instanceof Span)) { + if (!(spanObj instanceof Span)) { return; } - final Span span = (Span) spanObj; + final Span span = (Span) spanObj; span.captureException(thrown).deactivate(); Futures.addCallback(result, new FutureCallback() { @Override @@ -130,14 +130,14 @@ public void onSuccess(@Nullable ResultSet result) { @Override public void onFailure(Throwable t) { - span.endExceptionally(t); + span.captureException(t).end(); } }); } } private interface DestinationAddressSetter { - void setDestination(Span span, Host host); + void setDestination(Span span, Host host); class Resolver { @@ -171,7 +171,7 @@ enum WithSocketAddress implements DestinationAddressSetter { INSTANCE; @Override - public void setDestination(Span span, Host host) { + public void setDestination(Span span, Host host) { span.getContext().getDestination().withSocketAddress(host.getSocketAddress()); } } @@ -180,7 +180,7 @@ enum WithInetAddress implements DestinationAddressSetter { INSTANCE; @Override - public void setDestination(Span span, Host host) { + public void setDestination(Span span, Host host) { span.getContext().getDestination().withInetAddress(host.getAddress()); } } diff --git a/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/main/java/co/elastic/apm/agent/cassandra4/Cassandra4Instrumentation.java b/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/main/java/co/elastic/apm/agent/cassandra4/Cassandra4Instrumentation.java index 9ae0a5c88c..60bdfd5377 100644 --- a/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/main/java/co/elastic/apm/agent/cassandra4/Cassandra4Instrumentation.java +++ b/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/main/java/co/elastic/apm/agent/cassandra4/Cassandra4Instrumentation.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.cassandra.CassandraHelper; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; import com.datastax.oss.driver.api.core.CqlIdentifier; import com.datastax.oss.driver.api.core.cql.AsyncResultSet; import com.datastax.oss.driver.api.core.cql.BoundStatement; @@ -117,10 +117,10 @@ private static String getQuery(Request request) { public static void onExit(@Advice.Thrown @Nullable Throwable thrown, @Advice.Return Object result, @Nullable @Advice.Enter Object spanObj) { - if (!(spanObj instanceof Span)) { + if (!(spanObj instanceof Span)) { return; } - Span span = (Span) spanObj; + Span span = (Span) spanObj; span.captureException(thrown).deactivate(); if (result instanceof ResultSet) { setDestination(span, ((ResultSet) result).getExecutionInfo()); @@ -137,7 +137,7 @@ public static void onExit(@Advice.Thrown @Nullable Throwable thrown, } } - private static void setDestination(Span span, ExecutionInfo info) { + private static void setDestination(Span span, ExecutionInfo info) { Node coordinator = info.getCoordinator(); if (coordinator != null) { span.getContext().getDestination().withSocketAddress(coordinator.getEndPoint().resolve()); diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java index 264a72a148..482fc1221e 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.dubbo; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import com.alibaba.dubbo.remoting.exchange.ResponseCallback; diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseCallbackInstrumentation.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseCallbackInstrumentation.java index b06789b7e3..f4b72ad2b7 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseCallbackInstrumentation.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseCallbackInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.dubbo; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; import com.alibaba.dubbo.remoting.exchange.ResponseCallback; import com.alibaba.dubbo.rpc.Result; diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java index 9c86a8bd1d..ac5eaa0895 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.dubbo; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import com.alibaba.dubbo.remoting.exchange.ResponseCallback; diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/AlibabaMonitorFilterAdvice.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/AlibabaMonitorFilterAdvice.java index a39c30025d..04892ddaa2 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/AlibabaMonitorFilterAdvice.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/AlibabaMonitorFilterAdvice.java @@ -20,12 +20,12 @@ import co.elastic.apm.agent.dubbo.helper.AlibabaDubboTextMapPropagator; import co.elastic.apm.agent.dubbo.helper.DubboTraceHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import com.alibaba.dubbo.rpc.Invocation; import com.alibaba.dubbo.rpc.Result; @@ -37,7 +37,7 @@ public class AlibabaMonitorFilterAdvice { - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + private static final Tracer tracer = GlobalTracer.get(); @Nullable @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) @@ -46,7 +46,7 @@ public static Object onEnterFilterInvoke(@Advice.Argument(1) Invocation invocati // for consumer side, just create span, more information will be collected in provider side AbstractSpan active = tracer.getActive(); if (context.isConsumerSide() && active != null) { - Span span = DubboTraceHelper.createConsumerSpan(tracer, invocation.getInvoker().getInterface(), + Span span = DubboTraceHelper.createConsumerSpan(tracer, invocation.getInvoker().getInterface(), invocation.getMethodName(), context.getRemoteAddress()); if (span != null) { span.propagateTraceContext(context, AlibabaDubboTextMapPropagator.INSTANCE); @@ -54,7 +54,7 @@ public static Object onEnterFilterInvoke(@Advice.Argument(1) Invocation invocati } } else if (context.isProviderSide() && active == null) { // for provider side - Transaction transaction = tracer.startChildTransaction(context, AlibabaDubboTextMapPropagator.INSTANCE, PrivilegedActionUtils.getClassLoader(Invocation.class)); + Transaction transaction = tracer.startChildTransaction(context, AlibabaDubboTextMapPropagator.INSTANCE, PrivilegedActionUtils.getClassLoader(Invocation.class)); if (transaction != null) { transaction.activate(); DubboTraceHelper.fillTransaction(transaction, invocation.getInvoker().getInterface(), invocation.getMethodName()); diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java index 7be4f3d9cf..5ca0a88e19 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java @@ -20,12 +20,12 @@ import co.elastic.apm.agent.dubbo.helper.ApacheDubboTextMapPropagator; import co.elastic.apm.agent.dubbo.helper.DubboTraceHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import org.apache.dubbo.rpc.AsyncRpcResult; @@ -38,7 +38,7 @@ public class ApacheMonitorFilterAdvice { - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + private static final Tracer tracer = GlobalTracer.get(); @Nullable @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) @@ -47,7 +47,7 @@ public static Object onEnterFilterInvoke(@Advice.Argument(1) Invocation invocati AbstractSpan active = tracer.getActive(); // for consumer side, just create span, more information will be collected in provider side if (context.isConsumerSide() && active != null) { - Span span = DubboTraceHelper.createConsumerSpan(tracer, invocation.getInvoker().getInterface(), + Span span = DubboTraceHelper.createConsumerSpan(tracer, invocation.getInvoker().getInterface(), invocation.getMethodName(), context.getRemoteAddress()); if (span != null) { span.propagateTraceContext(context, ApacheDubboTextMapPropagator.INSTANCE); @@ -55,7 +55,7 @@ public static Object onEnterFilterInvoke(@Advice.Argument(1) Invocation invocati } } else if (context.isProviderSide() && active == null) { // for provider side - Transaction transaction = tracer.startChildTransaction(context, ApacheDubboTextMapPropagator.INSTANCE, PrivilegedActionUtils.getClassLoader(Invocation.class)); + Transaction transaction = tracer.startChildTransaction(context, ApacheDubboTextMapPropagator.INSTANCE, PrivilegedActionUtils.getClassLoader(Invocation.class)); if (transaction != null) { transaction.activate(); DubboTraceHelper.fillTransaction(transaction, invocation.getInvoker().getInterface(), invocation.getMethodName()); diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/helper/DubboTraceHelper.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/helper/DubboTraceHelper.java index 26a49b93bd..ede10c2686 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/helper/DubboTraceHelper.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/helper/DubboTraceHelper.java @@ -18,11 +18,11 @@ */ package co.elastic.apm.agent.dubbo.helper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.context.Destination; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; +import co.elastic.apm.agent.tracer.metadata.Destination; import javax.annotation.Nullable; import java.net.InetSocketAddress; @@ -34,19 +34,25 @@ public class DubboTraceHelper { public static final String SPAN_KEY = "_elastic_apm_span"; @Nullable - public static Span createConsumerSpan(ElasticApmTracer tracer, Class apiClass, String methodName, InetSocketAddress remoteAddress) { + public static Span createConsumerSpan(Tracer tracer, Class apiClass, String methodName, InetSocketAddress remoteAddress) { AbstractSpan traceContext = tracer.getActive(); if (traceContext == null) { return null; } - Span span = traceContext.createExitSpan(); + Span span = traceContext.createExitSpan(); if (span == null) { return null; } span.withType(EXTERNAL_TYPE) .withSubtype(DUBBO_SUBTYPE); - span.updateName(apiClass, methodName); + + StringBuilder spanName = span.getAndOverrideName(co.elastic.apm.agent.impl.transaction.Span.PRIO_DEFAULT); + if (spanName != null) { + String className = apiClass.getName(); + spanName.append(className, className.lastIndexOf('.') + 1, className.length()); + spanName.append("#").append(methodName); + } Destination destination = span.getContext().getDestination(); destination.withInetSocketAddress(remoteAddress); @@ -59,8 +65,13 @@ public static Span createConsumerSpan(ElasticApmTracer tracer, Class apiClass return span.activate(); } - public static void fillTransaction(Transaction transaction, Class apiClass, String methodName) { - transaction.updateName(apiClass, methodName); - transaction.withType(Transaction.TYPE_REQUEST); + public static void fillTransaction(Transaction transaction, Class apiClass, String methodName) { + StringBuilder spanName = transaction.getAndOverrideName(co.elastic.apm.agent.impl.transaction.Transaction.PRIO_DEFAULT); + if (spanName != null) { + String className = apiClass.getName(); + spanName.append(className, className.lastIndexOf('.') + 1, className.length()); + spanName.append("#").append(methodName); + } + transaction.withType(co.elastic.apm.agent.impl.transaction.Transaction.TYPE_REQUEST); } } diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/test/java/co/elastic/apm/agent/dubbo/api/impl/DubboTestApiImpl.java b/apm-agent-plugins/apm-dubbo-plugin/src/test/java/co/elastic/apm/agent/dubbo/api/impl/DubboTestApiImpl.java index 15f16659d3..3a2a8f8bb6 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/test/java/co/elastic/apm/agent/dubbo/api/impl/DubboTestApiImpl.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/test/java/co/elastic/apm/agent/dubbo/api/impl/DubboTestApiImpl.java @@ -21,7 +21,7 @@ import co.elastic.apm.agent.dubbo.api.AnotherApi; import co.elastic.apm.agent.dubbo.api.DubboTestApi; import co.elastic.apm.agent.dubbo.api.exception.BizException; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.MappingBuilder; diff --git a/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceNameInstrumentation.java b/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceNameInstrumentation.java index 34cc651bf8..9acf9e69e1 100644 --- a/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceNameInstrumentation.java +++ b/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceNameInstrumentation.java @@ -20,8 +20,7 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.ServiceInfo; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.Tracer; import co.elastic.logging.log4j2.EcsLayout; import net.bytebuddy.asm.Advice; @@ -29,12 +28,10 @@ public class Log4j2ServiceNameInstrumentation extends AbstractLog4j2ServiceInstr public static class AdviceClass { - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); - @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter(@Advice.This EcsLayout.Builder builder) { if (builder.getServiceName() == null || builder.getServiceName().isEmpty()) { - ServiceInfo serviceInfo = tracer.getServiceInfoForClassLoader(Thread.currentThread().getContextClassLoader()); + ServiceInfo serviceInfo = tracer.require(Tracer.class).getServiceInfoForClassLoader(Thread.currentThread().getContextClassLoader()); String configuredServiceName = tracer.getConfig(CoreConfiguration.class).getServiceName(); builder.setServiceName(serviceInfo != null ? serviceInfo.getServiceName() : configuredServiceName); } diff --git a/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceVersionInstrumentation.java b/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceVersionInstrumentation.java index ba323ffeee..9f3843d497 100644 --- a/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceVersionInstrumentation.java +++ b/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/Log4j2ServiceVersionInstrumentation.java @@ -20,8 +20,7 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.ServiceInfo; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.Tracer; import co.elastic.logging.log4j2.EcsLayout; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -39,12 +38,10 @@ public ElementMatcher.Junction getTypeMatcher() { public static class AdviceClass { - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); - @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter(@Advice.This EcsLayout.Builder builder) { if (builder.getServiceVersion() == null || builder.getServiceVersion().isEmpty()) { - ServiceInfo serviceInfo = tracer.getServiceInfoForClassLoader(Thread.currentThread().getContextClassLoader()); + ServiceInfo serviceInfo = tracer.require(Tracer.class).getServiceInfoForClassLoader(Thread.currentThread().getContextClassLoader()); String configuredServiceVersion = tracer.getConfig(CoreConfiguration.class).getServiceVersion(); builder.setServiceVersion(serviceInfo != null ? serviceInfo.getServiceVersion() : configuredServiceVersion); } diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientAsyncInstrumentation.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientAsyncInstrumentation.java index 10b9b54fa5..50624129f2 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientAsyncInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentation; import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentationHelper; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.method.MethodDescription; @@ -75,7 +75,7 @@ public static Object[] onBeforeExecute(@Advice.Argument(0) String method, @Advice.Argument(3) @Nullable HttpEntity entity, @Advice.Argument(5) ResponseListener responseListener) { - Span span = helper.createClientSpan(method, endpoint, entity); + Span span = helper.createClientSpan(method, endpoint, entity); if (span != null) { Object[] ret = new Object[2]; ret[0] = span; @@ -89,7 +89,7 @@ public static Object[] onBeforeExecute(@Advice.Argument(0) String method, public static void onAfterExecute(@Advice.Thrown @Nullable Throwable t, @Advice.Enter @Nullable Object[] entryArgs) { if (entryArgs != null) { - final Span span = (Span) entryArgs[0]; + final Span span = (Span) entryArgs[0]; if (span != null) { // Deactivate in this thread. Span will be ended and reported by the listener span.deactivate(); diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientSyncInstrumentation.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientSyncInstrumentation.java index 3e9dc34862..3c51025234 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientSyncInstrumentation.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-5_6/src/main/java/co/elastic/apm/agent/esrestclient/v5_6/ElasticsearchClientSyncInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentation; import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentationHelper; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -54,7 +54,7 @@ public static Object onBeforeExecute(@Advice.Argument(0) String method, public static void onAfterExecute(@Advice.Return @Nullable Response response, @Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { try { helper.finishClientSpan(response, span, t); diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientAsyncInstrumentation.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientAsyncInstrumentation.java index ecefa86231..e50edf0dc9 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientAsyncInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentation; import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentationHelper; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.method.MethodDescription; @@ -66,7 +66,7 @@ public static class ElasticsearchRestClientAsyncAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object[] onBeforeExecute(@Advice.Argument(0) Request request, @Advice.Argument(1) ResponseListener responseListener) { - Span span = helper.createClientSpan(request.getMethod(), request.getEndpoint(), request.getEntity()); + Span span = helper.createClientSpan(request.getMethod(), request.getEndpoint(), request.getEntity()); if (span != null) { Object[] ret = new Object[2]; ret[0] = span; @@ -80,7 +80,7 @@ public static Object[] onBeforeExecute(@Advice.Argument(0) Request request, public static void onAfterExecute(@Advice.Thrown @Nullable Throwable t, @Advice.Enter @Nullable Object[] entryArgs) { if (entryArgs != null) { - final Span span = (Span) entryArgs[0]; + final Span span = (Span) entryArgs[0]; if (span != null) { // Deactivate in this thread. Span will be ended and reported by the listener span.deactivate(); diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientSyncInstrumentation.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientSyncInstrumentation.java index b87ec3f5c3..1186200f26 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientSyncInstrumentation.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-6_4/src/main/java/co/elastic/apm/agent/esrestclient/v6_4/ElasticsearchClientSyncInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentation; import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentationHelper; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -67,7 +67,7 @@ public static Object onBeforeExecute(@Advice.Argument(0) Request request) { public static void onAfterExecute(@Advice.Return @Nullable Response response, @Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { try { helper.finishClientSpan(response, span, t); diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-7_x/src/main/java/co/elastic/apm/agent/esrestclient/v7_x/RestClientInstrumentation.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-7_x/src/main/java/co/elastic/apm/agent/esrestclient/v7_x/RestClientInstrumentation.java index 36e7125be2..dc93d5b069 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-7_x/src/main/java/co/elastic/apm/agent/esrestclient/v7_x/RestClientInstrumentation.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-7_x/src/main/java/co/elastic/apm/agent/esrestclient/v7_x/RestClientInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentation; import co.elastic.apm.agent.esrestclient.ElasticsearchRestClientInstrumentationHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.method.MethodDescription; diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java index 5ba52a4210..dd7cf97b01 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java @@ -19,14 +19,14 @@ package co.elastic.apm.agent.esrestclient; import co.elastic.apm.agent.common.util.WildcardMatcher; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.objectpool.ObjectPool; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.pooling.ObjectPool; import co.elastic.apm.agent.util.IOUtils; import co.elastic.apm.agent.util.LoggerUtils; import co.elastic.apm.agent.tracer.pooling.Allocator; @@ -46,7 +46,7 @@ public class ElasticsearchRestClientInstrumentationHelper { private static final Logger logger = LoggerFactory.getLogger(ElasticsearchRestClientInstrumentationHelper.class); private static final Logger unsupportedOperationOnceLogger = LoggerUtils.logOnce(logger); - private static final ElasticsearchRestClientInstrumentationHelper INSTANCE = new ElasticsearchRestClientInstrumentationHelper(GlobalTracer.requireTracerImpl()); + private static final ElasticsearchRestClientInstrumentationHelper INSTANCE = new ElasticsearchRestClientInstrumentationHelper(GlobalTracer.get()); public static final List QUERY_WILDCARD_MATCHERS = Arrays.asList( WildcardMatcher.valueOf("*_search"), @@ -58,7 +58,7 @@ public class ElasticsearchRestClientInstrumentationHelper { public static final String ELASTICSEARCH = "elasticsearch"; public static final String SPAN_ACTION = "request"; private static final int MAX_POOLED_ELEMENTS = 256; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final ObjectPool responseListenerObjectPool; @@ -66,7 +66,7 @@ public static ElasticsearchRestClientInstrumentationHelper get() { return INSTANCE; } - private ElasticsearchRestClientInstrumentationHelper(ElasticApmTracer tracer) { + private ElasticsearchRestClientInstrumentationHelper(Tracer tracer) { this.tracer = tracer; this.responseListenerObjectPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(MAX_POOLED_ELEMENTS, new ResponseListenerAllocator()); } @@ -79,13 +79,13 @@ public ResponseListenerWrapper createInstance() { } @Nullable - public Span createClientSpan(String method, String endpoint, @Nullable HttpEntity httpEntity) { + public Span createClientSpan(String method, String endpoint, @Nullable HttpEntity httpEntity) { final AbstractSpan activeSpan = tracer.getActive(); if (activeSpan == null) { return null; } - Span span = activeSpan.createExitSpan(); + Span span = activeSpan.createExitSpan(); // Don't record nested spans. In 5.x clients the instrumented sync method is calling the instrumented async method if (span == null) { @@ -120,7 +120,7 @@ public Span createClientSpan(String method, String endpoint, @Nullable HttpEntit return span; } - public void finishClientSpan(@Nullable Response response, Span span, @Nullable Throwable t) { + public void finishClientSpan(@Nullable Response response, Span span, @Nullable Throwable t) { try { String url = null; int statusCode = -1; @@ -162,7 +162,7 @@ public void finishClientSpan(@Nullable Response response, Span span, @Nullable T } } - public ResponseListener wrapClientResponseListener(ResponseListener listener, Span span) { + public ResponseListener wrapClientResponseListener(ResponseListener listener, Span span) { return responseListenerObjectPool.createInstance().withClientSpan(listener, span); } diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ResponseListenerWrapper.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ResponseListenerWrapper.java index 369ed0c217..90e0fed029 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ResponseListenerWrapper.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ResponseListenerWrapper.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.esrestclient; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.pooling.Recyclable; import org.elasticsearch.client.Response; import org.elasticsearch.client.ResponseListener; @@ -49,7 +49,7 @@ public class ResponseListenerWrapper implements ResponseListener, Recyclable { this.tracer = tracer; } - ResponseListenerWrapper withClientSpan(ResponseListener delegate, Span span) { + ResponseListenerWrapper withClientSpan(ResponseListener delegate, Span span) { // Order is important due to visibility - write to span last on this (initiating) thread this.delegate = delegate; this.isClientSpan = true; @@ -144,8 +144,8 @@ private void onFailureContextPropagation(Exception exception) { private void finishClientSpan(@Nullable Response response, @Nullable Throwable throwable) { // First read volatile span to ensure visibility on executing thread AbstractSpan localSpan = context; - if (localSpan instanceof Span) { - helper.finishClientSpan(response, (Span) localSpan, throwable); + if (localSpan instanceof Span) { + helper.finishClientSpan(response, (Span) localSpan, throwable); } } diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/test/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelperTest.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/test/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelperTest.java index 04c7d6b1dd..df8ca9e6a8 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/test/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelperTest.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/test/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelperTest.java @@ -56,7 +56,7 @@ void after(){ @Test void testCreateSpan() { - Span span = helper.createClientSpan("GET", "/_test", null); + Span span = (Span) helper.createClientSpan("GET", "/_test", null); assertThat(span).isNotNull(); assertThat(tracer.getActive()).isEqualTo(span); @@ -81,7 +81,7 @@ void testCreateSpan() { @Test void testCreateSpanWithClusterName() { - Span span = helper.createClientSpan("GET", "/_test", null); + Span span = (Span) helper.createClientSpan("GET", "/_test", null); assertThat(span).isNotNull(); assertThat(tracer.getActive()).isEqualTo(span); @@ -121,7 +121,7 @@ private static Response mockResponse(Map headers) { @Test void testNonSampledSpan() { TransactionTest.setRecorded(false, transaction); - Span esSpan = helper.createClientSpan("SEARCH", "/test", null); + Span esSpan = (Span) helper.createClientSpan("SEARCH", "/test", null); assertThat(esSpan).isNotNull(); try { assertThat(esSpan.isSampled()).isFalse(); diff --git a/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleExceptionSourceFilterInstrumentation.java b/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleExceptionSourceFilterInstrumentation.java index bf28a6ab93..516c3162db 100644 --- a/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleExceptionSourceFilterInstrumentation.java +++ b/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleExceptionSourceFilterInstrumentation.java @@ -21,7 +21,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import com.twitter.finagle.http.Request; @@ -91,7 +91,7 @@ public static class ExceptionSourceFilterAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onBeforeExecute(@Nullable @Advice.Argument(0) Object serviceArg, @Nullable @Advice.FieldValue(SERVICE_NAME_FIELD) String serviceName) { if (serviceArg instanceof Request) { - Span spanToEnhance = FinaglePayloadSizeFilterInstrumentation.PayloadSizeFilterAdvice + Span spanToEnhance = FinaglePayloadSizeFilterInstrumentation.PayloadSizeFilterAdvice .getAndRemoveSpanWithUnknownHostForRequest((Request) serviceArg); if (spanToEnhance != null && serviceName != null && !serviceName.isEmpty()) { updateSpanHostname(spanToEnhance, serviceName); @@ -100,7 +100,7 @@ public static void onBeforeExecute(@Nullable @Advice.Argument(0) Object serviceA } } - private static void updateSpanHostname(Span spanToEnhance, String serviceName) { + private static void updateSpanHostname(Span spanToEnhance, String serviceName) { CharSequence currentUriStr = spanToEnhance.getContext().getHttp().getUrl(); String method = spanToEnhance.getContext().getHttp().getMethod(); if (currentUriStr.length() == 0 || method == null || method.isEmpty()) { diff --git a/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinaglePayloadSizeFilterInstrumentation.java b/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinaglePayloadSizeFilterInstrumentation.java index f4eaeae510..eacd91e0ee 100644 --- a/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinaglePayloadSizeFilterInstrumentation.java +++ b/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinaglePayloadSizeFilterInstrumentation.java @@ -22,8 +22,8 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.finaglehttpclient.helper.RequestHeaderAccessor; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -109,7 +109,7 @@ public static class PayloadSizeFilterAdvice { } @Nullable - public static Span getAndRemoveSpanWithUnknownHostForRequest(Request forRequest) { + public static Span getAndRemoveSpanWithUnknownHostForRequest(Request forRequest) { return inflightSpansWithUnknownHost.remove(forRequest); } @@ -140,7 +140,7 @@ public static Object onBeforeExecute(@Nullable @Advice.Argument(0) Request reque } URI uri = resolveURI(request, host); - Span span = HttpClientHelper.startHttpClientSpan(parent, request.method().name(), uri, null); + Span span = HttpClientHelper.startHttpClientSpan(parent, request.method().name(), uri, null); if (span != null) { span.activate(); @@ -185,7 +185,7 @@ public static void onExit( if (spanObj == null) { return; } - final Span span = (Span) spanObj; + final Span span = (Span) spanObj; span.deactivate(); if (thrown != null) { span.captureException(thrown); @@ -210,8 +210,8 @@ public void onFailure(Throwable cause) { } } - private static void endSpanForRequest(@Nullable Request request, Span span) { - if (request != null) { // should always be true because otherwise no span is created + private static void endSpanForRequest(@Nullable Request request, Span span) { + if (request != null) { // should always be true because otherwise no Span is created inflightSpansWithUnknownHost.remove(request); } span.end(); diff --git a/apm-agent-plugins/apm-grails-plugin/src/main/java/co/elastic/apm/agent/grails/GrailsTransactionNameInstrumentation.java b/apm-agent-plugins/apm-grails-plugin/src/main/java/co/elastic/apm/agent/grails/GrailsTransactionNameInstrumentation.java index 17f9d89708..4ef51d1f96 100644 --- a/apm-agent-plugins/apm-grails-plugin/src/main/java/co/elastic/apm/agent/grails/GrailsTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-grails-plugin/src/main/java/co/elastic/apm/agent/grails/GrailsTransactionNameInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.grails; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import grails.core.GrailsControllerClass; import net.bytebuddy.asm.Advice; @@ -82,7 +82,7 @@ public static class HandlerAdapterAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void setTransactionName(@Advice.Argument(2) Object handler) { - final Transaction transaction = tracer.currentTransaction(); + final Transaction transaction = tracer.currentTransaction(); if (transaction == null) { return; } diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ChannelInstrumentation.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ChannelInstrumentation.java index 13a4bd2205..bebef85fc8 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ChannelInstrumentation.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ChannelInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.grpc; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import io.grpc.CallOptions; @@ -92,7 +92,7 @@ public static void onExit(@Advice.Return @Nullable ClientCall clientCall, if (clientCall != null) { DynamicTransformer.ensureInstrumented(clientCall.getClass(), CLIENT_CALL_INSTRUMENTATION); } - GrpcHelper.getInstance().onClientCallCreationExit(clientCall, (Span) span); + GrpcHelper.getInstance().onClientCallCreationExit(clientCall, (Span) span); } } } diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallImplInstrumentation.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallImplInstrumentation.java index e70062c967..a367dfa9a7 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallImplInstrumentation.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallImplInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.grpc; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import io.grpc.ClientCall; @@ -96,7 +96,7 @@ public static void onExit(@Advice.Argument(0) ClientCall.Listener listener, @Advice.Thrown @Nullable Throwable thrown, @Advice.Enter @Nullable Object span) { - GrpcHelper.getInstance().clientCallStartExit((Span) span, listener, thrown); + GrpcHelper.getInstance().clientCallStartExit((Span) span, listener, thrown); } } } diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallListenerInstrumentation.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallListenerInstrumentation.java index f6eecaea68..ce4041a87f 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallListenerInstrumentation.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ClientCallListenerInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.grpc; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.DynamicTransformer; import io.grpc.ClientCall; import io.grpc.Metadata; @@ -74,7 +74,7 @@ public static void onExit(@Advice.This ClientCall.Listener listener, @Advice.Thrown @Nullable Throwable thrown, @Advice.Enter @Nullable Object span) { - GrpcHelper.getInstance().exitClientListenerMethod(thrown, listener, (Span) span, status); + GrpcHelper.getInstance().exitClientListenerMethod(thrown, listener, (Span) span, status); } } } @@ -115,7 +115,7 @@ public static void onExit(@Advice.This ClientCall.Listener listener, @Advice.Thrown @Nullable Throwable thrown, @Advice.Enter @Nullable Object span) { - GrpcHelper.getInstance().exitClientListenerMethod(thrown, listener, (Span) span, null); + GrpcHelper.getInstance().exitClientListenerMethod(thrown, listener, (Span) span, null); } } } diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/GrpcHelper.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/GrpcHelper.java index 4dec361456..bd0a6b1114 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/GrpcHelper.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/GrpcHelper.java @@ -19,13 +19,13 @@ package co.elastic.apm.agent.grpc; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import co.elastic.apm.agent.tracer.dispatch.AbstractHeaderGetter; @@ -58,27 +58,27 @@ public static GrpcHelper getInstance() { /** * Map of all in-flight {@link Span} with {@link ClientCall} instance as key. */ - private final WeakMap, Span> clientCallSpans; + private final WeakMap, Span> clientCallSpans; /** * Map of all in-flight {@link Span} with {@link ClientCall} instance as key. */ - private final WeakMap, Span> delayedClientCallSpans; + private final WeakMap, Span> delayedClientCallSpans; /** * Map of all in-flight {@link Span} with {@link ClientCall.Listener} instance as key. */ - private final WeakMap, Span> clientCallListenerSpans; + private final WeakMap, Span> clientCallListenerSpans; /** * Map of all in-flight {@link Transaction} with {@link ServerCall.Listener} instance as key. */ - private final WeakMap, Transaction> serverListenerTransactions; + private final WeakMap, Transaction> serverListenerTransactions; /** * Map of all in-flight {@link Transaction} with {@link ServerCall} instance as key. */ - private final WeakMap, Transaction> serverCallTransactions; + private final WeakMap, Transaction> serverCallTransactions; /** * gRPC header cache used to minimize allocations @@ -114,7 +114,7 @@ public GrpcHelper() { * @return transaction, or {@literal null} if none has been created */ @Nullable - public Transaction startTransaction(Tracer tracer, ClassLoader cl, ServerCall serverCall, Metadata headers) { + public Transaction startTransaction(Tracer tracer, ClassLoader cl, ServerCall serverCall, Metadata headers) { MethodDescriptor methodDescriptor = serverCall.getMethodDescriptor(); // ignore non-unary method calls for now @@ -128,7 +128,7 @@ public Transaction startTransaction(Tracer tracer, ClassLoader cl, ServerCall transaction = tracer.startChildTransaction(headers, headerGetter, cl); if (transaction == null) { return null; } @@ -148,7 +148,7 @@ public Transaction startTransaction(Tracer tracer, ClassLoader cl, ServerCall serverCall, ServerCall.Listener listener, Transaction transaction) { + public void registerTransaction(ServerCall serverCall, ServerCall.Listener listener, Transaction transaction) { serverCallTransactions.put(serverCall, transaction); serverListenerTransactions.put(listener, transaction); transaction.deactivate(); @@ -163,7 +163,7 @@ public void registerTransaction(ServerCall serverCall, ServerCall.Listener * @param serverCall server call */ public void exitServerCall(Status status, @Nullable Throwable thrown, ServerCall serverCall) { - Transaction transaction = serverCallTransactions.remove(serverCall); + Transaction transaction = serverCallTransactions.remove(serverCall); if (transaction != null) { // there are multiple ways to terminate transaction, which aren't mutually exclusive @@ -217,8 +217,8 @@ public static Outcome toServerOutcome(@Nullable Status status) { * @return transaction, or {@literal null} if there is none */ @Nullable - public Transaction enterServerListenerMethod(ServerCall.Listener listener) { - Transaction transaction = serverListenerTransactions.get(listener); + public Transaction enterServerListenerMethod(ServerCall.Listener listener) { + Transaction transaction = serverListenerTransactions.get(listener); if (transaction != null) { transaction.activate(); } @@ -235,7 +235,7 @@ public Transaction enterServerListenerMethod(ServerCall.Listener listener) { */ public void exitServerListenerMethod(@Nullable Throwable thrown, ServerCall.Listener listener, - @Nullable Transaction transaction, + @Nullable Transaction transaction, @Nullable Status terminateStatus) { if (transaction == null) { @@ -284,7 +284,7 @@ public void exitServerListenerMethod(@Nullable Throwable thrown, * @return client call span (activated) or {@literal null} if not within an exit span. */ @Nullable - public Span onClientCallCreationEntry(@Nullable AbstractSpan parent, + public Span onClientCallCreationEntry(@Nullable AbstractSpan parent, @Nullable MethodDescriptor method, @Nullable String authority) { @@ -297,7 +297,7 @@ public Span onClientCallCreationEntry(@Nullable AbstractSpan parent, return null; } - Span span = parent.createExitSpan(); + Span span = parent.createExitSpan(); if (span == null) { // as it's an external call, we only need a single span for nested calls return null; @@ -327,14 +327,17 @@ public Span onClientCallCreationEntry(@Nullable AbstractSpan parent, * @param clientCall client call * @param spanFromEntry span created at {@link #onClientCallCreationEntry(AbstractSpan, MethodDescriptor, String)} */ - public void onClientCallCreationExit(@Nullable ClientCall clientCall, @Nullable Span spanFromEntry) { + public void onClientCallCreationExit(@Nullable ClientCall clientCall, @Nullable Span spanFromEntry) { if (clientCall != null) { - Span spanToMap = spanFromEntry; + Span spanToMap = spanFromEntry; if (spanToMap == null) { // handling nested newCall() invocations - we still want to map the client call to the same span - Span tmp = GlobalTracer.get().getActiveSpan(); - if (tmp != null && tmp.getSubtype() != null && tmp.getSubtype().equals(GRPC) && tmp.isExit()) { - spanToMap = tmp; + AbstractSpan active = GlobalTracer.get().getActive(); + if (active instanceof Span) { + Span tmp = (Span) active; + if (tmp.getSubtype() != null && tmp.getSubtype().equals(GRPC) && tmp.isExit()) { + spanToMap = tmp; + } } } @@ -384,7 +387,7 @@ private boolean isDelayedClientCall(ClientCall clientCall) { public void replaceClientCallRegistration(ClientCall placeholderClientCall, ClientCall realClientCall) { // we cannot remove yet, because the span could have been ended already through ClientCall#start(), in which case // it will be recycled ahead of time due to reference decrement when removed from the map - Span spanOfPlaceholder = delayedClientCallSpans.get(placeholderClientCall); + Span spanOfPlaceholder = delayedClientCallSpans.get(placeholderClientCall); if (spanOfPlaceholder == null) { return; } @@ -392,7 +395,7 @@ public void replaceClientCallRegistration(ClientCall placeholderClientCall try { // we cannot remove yet, because the span could have been ended already, in which case // it will be recycled ahead of time due to reference decrement when removed from the map - Span spanOfRealClientCall = clientCallSpans.get(realClientCall); + Span spanOfRealClientCall = clientCallSpans.get(realClientCall); boolean mapPlaceholderSpanToRealClientCall = false; if (spanOfRealClientCall == null) { mapPlaceholderSpanToRealClientCall = true; @@ -431,13 +434,13 @@ public void replaceClientCallRegistration(ClientCall placeholderClientCall * @return span, or {@literal null is there is none} */ @Nullable - public Span clientCallStartEnter(ClientCall clientCall, - ClientCall.Listener listener, - Metadata headers) { + public Span clientCallStartEnter(ClientCall clientCall, + ClientCall.Listener listener, + Metadata headers) { // span should already have been registered // no other lookup by client call is required, thus removing entry - Span span = clientCallSpans.remove(clientCall); + Span span = clientCallSpans.remove(clientCall); if (span == null) { return null; } @@ -458,7 +461,7 @@ public Span clientCallStartEnter(ClientCall clientCall, * @param listener client call listener * @param thrown thrown exception */ - public void clientCallStartExit(@Nullable Span spanFromEntry, ClientCall.Listener listener, @Nullable Throwable thrown) { + public void clientCallStartExit(@Nullable Span spanFromEntry, ClientCall.Listener listener, @Nullable Throwable thrown) { if (spanFromEntry != null) { spanFromEntry.deactivate(); } @@ -473,9 +476,9 @@ public void clientCallStartExit(@Nullable Span spanFromEntry, ClientCall.Listene } public void cancelCall(ClientCall clientCall, @Nullable Throwable cause) { - WeakMap, Span> clientCallMap = (isDelayedClientCall(clientCall)) ? delayedClientCallSpans : clientCallSpans; + WeakMap, Span> clientCallMap = (isDelayedClientCall(clientCall)) ? delayedClientCallSpans : clientCallSpans; // we can't remove yet, in order to avoid reference decrement prematurely - Span span = clientCallMap.get(clientCall); + Span span = clientCallMap.get(clientCall); if (span != null) { if (!span.isFinished()) { span @@ -494,14 +497,14 @@ public void cancelCall(ClientCall clientCall, @Nullable Throwable cause) { * @return active span or {@literal null} if there is none */ @Nullable - public Span enterClientListenerMethod(ClientCall.Listener listener) { - Span span = clientCallListenerSpans.get(listener); + public Span enterClientListenerMethod(ClientCall.Listener listener) { + Span span = clientCallListenerSpans.get(listener); if (span != null) { if (span.isFinished()) { // the span may have already been ended by another listener on a different thread/stack clientCallListenerSpans.remove(listener); span = null; - } else if (span == GlobalTracer.get().getActiveSpan()) { + } else if (span == GlobalTracer.get().getActive()) { // avoid duplicated activation and invocation on nested listener method calls span = null; } else { @@ -521,7 +524,7 @@ public Span enterClientListenerMethod(ClientCall.Listener listener) { */ public void exitClientListenerMethod(@Nullable Throwable thrown, ClientCall.Listener listener, - @Nullable Span span, + @Nullable Span span, @Nullable Status onCloseStatus) { boolean lastCall = onCloseStatus != null || thrown != null; diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallHandlerInstrumentation.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallHandlerInstrumentation.java index b5a4d728a1..6e1e243ea4 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallHandlerInstrumentation.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallHandlerInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.grpc; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.util.PrivilegedActionUtils; @@ -94,10 +94,10 @@ public static void onExit(@Advice.Thrown @Nullable Throwable thrown, @Advice.Return @Nullable ServerCall.Listener listener, @Advice.Enter @Nullable Object enterTransaction) { - if (!(enterTransaction instanceof Transaction)) { + if (!(enterTransaction instanceof Transaction)) { return; } - Transaction transaction = (Transaction) enterTransaction; + Transaction transaction = (Transaction) enterTransaction; if (thrown != null) { // terminate transaction in case of exception as it won't be stored transaction.deactivate().end(); diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallListenerInstrumentation.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallListenerInstrumentation.java index 1bbb671cf5..07af2bb8da 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallListenerInstrumentation.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/ServerCallListenerInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.grpc; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.DynamicTransformer; import io.grpc.ServerCall; import io.grpc.Status; @@ -92,8 +92,8 @@ public static void onExit(@Advice.Thrown @Nullable Throwable thrown, @Advice.This ServerCall.Listener listener, @Advice.Enter @Nullable Object transaction) { - if (transaction instanceof Transaction) { - GrpcHelper.getInstance().exitServerListenerMethod(thrown, listener, (Transaction) transaction, null); + if (transaction instanceof Transaction) { + GrpcHelper.getInstance().exitServerListenerMethod(thrown, listener, (Transaction) transaction, null); } } } @@ -127,8 +127,8 @@ public static void onExit(@Advice.Thrown @Nullable Throwable thrown, @Advice.This ServerCall.Listener listener, @Advice.Enter @Nullable Object transaction) { - if (transaction instanceof Transaction) { - GrpcHelper.getInstance().exitServerListenerMethod(thrown, listener, (Transaction) transaction, Status.CANCELLED); + if (transaction instanceof Transaction) { + GrpcHelper.getInstance().exitServerListenerMethod(thrown, listener, (Transaction) transaction, Status.CANCELLED); } } } @@ -162,8 +162,8 @@ public static void onExit(@Advice.Thrown @Nullable Throwable thrown, @Advice.This ServerCall.Listener listener, @Advice.Enter @Nullable Object transaction) { - if (transaction instanceof Transaction) { - GrpcHelper.getInstance().exitServerListenerMethod(thrown, listener, (Transaction) transaction, Status.OK); + if (transaction instanceof Transaction) { + GrpcHelper.getInstance().exitServerListenerMethod(thrown, listener, (Transaction) transaction, Status.OK); } } } diff --git a/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-5_x/src/main/java/co/elastic/apm/agent/hibernatesearch/v5/HibernateSearch5Instrumentation.java b/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-5_x/src/main/java/co/elastic/apm/agent/hibernatesearch/v5/HibernateSearch5Instrumentation.java index 2358c4bbb4..970d15a847 100644 --- a/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-5_x/src/main/java/co/elastic/apm/agent/hibernatesearch/v5/HibernateSearch5Instrumentation.java +++ b/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-5_x/src/main/java/co/elastic/apm/agent/hibernatesearch/v5/HibernateSearch5Instrumentation.java @@ -21,7 +21,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.hibernatesearch.HibernateSearchConstants; import co.elastic.apm.agent.hibernatesearch.HibernateSearchHelper; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -90,8 +90,8 @@ public static Object onBeforeExecute(@Advice.This FullTextQueryImpl query, public static void onAfterExecute(@Advice.Enter @Nullable Object span, @Advice.Thrown Throwable t) { - if (span instanceof Span) { - ((Span) span).captureException(t) + if (span instanceof Span) { + ((Span) span).captureException(t) .deactivate() .end(); } diff --git a/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-6_x/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearch6Instrumentation.java b/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-6_x/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearch6Instrumentation.java index 0cf1875c80..9c4dd7cefc 100644 --- a/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-6_x/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearch6Instrumentation.java +++ b/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-6_x/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearch6Instrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.hibernatesearch; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -87,8 +87,8 @@ public static Object onBeforeExecute(@Advice.This SearchQuery query, public static void onAfterExecute(@Advice.Enter @Nullable Object span, @Advice.Thrown @Nullable Throwable t) { - if (span instanceof Span) { - ((Span) span).captureException(t) + if (span instanceof Span) { + ((Span) span).captureException(t) .deactivate() .end(); } diff --git a/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-common/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearchHelper.java b/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-common/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearchHelper.java index f33d869788..a8e721ee17 100644 --- a/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-common/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearchHelper.java +++ b/apm-agent-plugins/apm-hibernate-search-plugin/apm-hibernate-search-plugin-common/src/main/java/co/elastic/apm/agent/hibernatesearch/HibernateSearchHelper.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.hibernatesearch; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; public final class HibernateSearchHelper { @@ -28,17 +28,17 @@ private HibernateSearchHelper() { } - public static Span createAndActivateSpan(final Tracer tracer, final String methodName, - final String query) { + public static Span createAndActivateSpan(final Tracer tracer, final String methodName, + final String query) { AbstractSpan active = tracer.getActive(); // avoid creating the same span twice for example, when an instrumented API is wrapped - if (active == null || active instanceof Span && HibernateSearchConstants.HIBERNATE_SEARCH_ORM_TYPE - .equals(((Span) active).getSubtype())) { + if (active == null || active instanceof Span && HibernateSearchConstants.HIBERNATE_SEARCH_ORM_TYPE + .equals(((Span) active).getSubtype())) { return null; } - Span span = active.createSpan().activate(); + Span span = active.createSpan().activate(); span.withType(HibernateSearchConstants.HIBERNATE_SEARCH_ORM_SPAN_TYPE) .withSubtype(HibernateSearchConstants.HIBERNATE_SEARCH_ORM_TYPE) diff --git a/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/httpclient/HttpClientHelper.java b/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/httpclient/HttpClientHelper.java index 6560e044d0..68fc64e69b 100644 --- a/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/httpclient/HttpClientHelper.java +++ b/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/httpclient/HttpClientHelper.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.httpclient; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -34,7 +34,7 @@ public class HttpClientHelper { public static final String HTTP_SUBTYPE = "http"; @Nullable - public static Span startHttpClientSpan(AbstractSpan parent, String method, @Nullable URI uri, @Nullable CharSequence hostName) { + public static Span startHttpClientSpan(AbstractSpan parent, String method, @Nullable URI uri, @Nullable CharSequence hostName) { String uriString = null; String scheme = null; int port = -1; @@ -50,9 +50,9 @@ public static Span startHttpClientSpan(AbstractSpan parent, String method, @N } @Nullable - public static Span startHttpClientSpan(AbstractSpan parent, String method, @Nullable String uri, + public static Span startHttpClientSpan(AbstractSpan parent, String method, @Nullable String uri, @Nullable String scheme, @Nullable CharSequence hostName, int port) { - Span span = parent.createExitSpan(); + Span span = parent.createExitSpan(); if (span != null) { updateHttpSpanNameAndContext(span, method, uri, scheme, hostName, port); } @@ -62,7 +62,7 @@ public static Span startHttpClientSpan(AbstractSpan parent, String method, @N return span; } - public static void updateHttpSpanNameAndContext(Span span, String method, @Nullable String uri, String scheme, CharSequence hostName, int port) { + public static void updateHttpSpanNameAndContext(Span span, String method, @Nullable String uri, String scheme, CharSequence hostName, int port) { span.withType(EXTERNAL_TYPE) .withSubtype(HTTP_SUBTYPE) .withName(method).appendToName(" ").appendToName(hostName != null ? hostName : "unknown host"); @@ -74,7 +74,7 @@ public static void updateHttpSpanNameAndContext(Span span, String method, @Nulla setDestinationServiceDetails(span, scheme, hostName, port); } - public static void setDestinationServiceDetails(Span span, @Nullable String scheme, @Nullable CharSequence host, int port) { + public static void setDestinationServiceDetails(Span span, @Nullable String scheme, @Nullable CharSequence host, int port) { if (scheme == null || host == null || host.length() == 0) { return; } diff --git a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/BaseServerEndpointInstrumentation.java b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/BaseServerEndpointInstrumentation.java index 09aac2edce..f44ea39f21 100644 --- a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/BaseServerEndpointInstrumentation.java +++ b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/BaseServerEndpointInstrumentation.java @@ -19,10 +19,10 @@ package co.elastic.apm.agent.websocket; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -48,7 +48,7 @@ public abstract class BaseServerEndpointInstrumentation extends TracerAwareInstr private final Collection applicationPackages; - public BaseServerEndpointInstrumentation(ElasticApmTracer tracer) { + public BaseServerEndpointInstrumentation(Tracer tracer) { applicationPackages = tracer.getConfig(StacktraceConfiguration.class).getApplicationPackages(); } @@ -83,9 +83,9 @@ protected static class BaseAdvice { @Nullable protected static Object startTransactionOrSetTransactionName(String signature, String frameworkName, @Nullable String frameworkVersion) { - Transaction currentTransaction = tracer.currentTransaction(); + Transaction currentTransaction = tracer.currentTransaction(); if (currentTransaction == null) { - Transaction rootTransaction = tracer.startRootTransaction(Thread.currentThread().getContextClassLoader()); + Transaction rootTransaction = tracer.startRootTransaction(Thread.currentThread().getContextClassLoader()); if (rootTransaction != null) { setTransactionTypeAndName(rootTransaction, signature, frameworkName, frameworkVersion); return rootTransaction.activate(); @@ -102,7 +102,7 @@ protected static void endTransaction(@Nullable Object transactionOrNull, @Advice return; } - Transaction transaction = (Transaction) transactionOrNull; + Transaction transaction = (Transaction) transactionOrNull; try { if (t != null) { transaction.captureException(t).withOutcome(Outcome.FAILURE); @@ -112,8 +112,8 @@ protected static void endTransaction(@Nullable Object transactionOrNull, @Advice } } - private static void setTransactionTypeAndName(Transaction transaction, String signature, String frameworkName, @Nullable String frameworkVersion) { - transaction.withType(Transaction.TYPE_REQUEST); + private static void setTransactionTypeAndName(Transaction transaction, String signature, String frameworkName, @Nullable String frameworkVersion) { + transaction.withType(co.elastic.apm.agent.impl.transaction.Transaction.TYPE_REQUEST); transaction.withName(signature, PRIO_HIGH_LEVEL_FRAMEWORK, false); transaction.setFrameworkName(frameworkName); transaction.setFrameworkVersion(frameworkVersion); diff --git a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentation.java b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentation.java index 6219ca5809..56b444a371 100644 --- a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentation.java +++ b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.websocket; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.util.VersionUtils; import jakarta.websocket.server.ServerEndpoint; import net.bytebuddy.asm.Advice; @@ -30,7 +30,7 @@ public class JakartaServerEndpointInstrumentation extends BaseServerEndpointInstrumentation { - public JakartaServerEndpointInstrumentation(ElasticApmTracer tracer) { + public JakartaServerEndpointInstrumentation(Tracer tracer) { super(tracer); } diff --git a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentation.java b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentation.java index 4886047df3..b387fa28ae 100644 --- a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentation.java +++ b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/main/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.websocket; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.util.VersionUtils; import net.bytebuddy.asm.Advice; @@ -30,7 +30,7 @@ public class JavaxServerEndpointInstrumentation extends BaseServerEndpointInstrumentation { - public JavaxServerEndpointInstrumentation(ElasticApmTracer tracer) { + public JavaxServerEndpointInstrumentation(Tracer tracer) { super(tracer); } diff --git a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrent.java b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrent.java index 6518cfd2fa..63a7bfa1a7 100644 --- a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrent.java +++ b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrent.java @@ -20,12 +20,12 @@ import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; import co.elastic.apm.agent.common.ThreadUtils; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.state.GlobalState; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.util.ArrayList; diff --git a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/RunnableCallableForkJoinTaskInstrumentation.java b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/RunnableCallableForkJoinTaskInstrumentation.java index f61791e668..606b8f8546 100644 --- a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/RunnableCallableForkJoinTaskInstrumentation.java +++ b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/RunnableCallableForkJoinTaskInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.concurrent; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.sdk.DynamicTransformer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; diff --git a/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientAdvice.java b/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientAdvice.java index 12f9a296fe..8842119f7c 100644 --- a/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientAdvice.java +++ b/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientAdvice.java @@ -18,13 +18,13 @@ */ package co.elastic.apm.agent.java_ldap; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import com.sun.jndi.ldap.Connection; import com.sun.jndi.ldap.LdapResult; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.implementation.bytecode.assign.Assigner; @@ -32,7 +32,7 @@ public class LdapClientAdvice { - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + private static final Tracer tracer = GlobalTracer.get(); @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object onEnter(@Advice.Origin("#m") String methodName, @Advice.FieldValue(value = "conn", typing = Assigner.Typing.DYNAMIC) Connection connection) { @@ -41,7 +41,7 @@ public static Object onEnter(@Advice.Origin("#m") String methodName, @Advice.Fie return null; } - Span span = parent.createExitSpan(); + Span span = parent.createExitSpan(); if (span == null) { return null; } @@ -60,7 +60,7 @@ public static Object onEnter(@Advice.Origin("#m") String methodName, @Advice.Fie @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onExit(@Advice.Enter @Nullable Object spanObj, @Nullable @Advice.Return LdapResult ldapResult, @Nullable @Advice.Thrown Throwable t) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { span.withOutcome((ldapResult != null && ldapResult.status == 0 /* LDAP_SUCCESS */) ? Outcome.SUCCESS : Outcome.FAILURE) .captureException(t) diff --git a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java index 7c5ca8b0fc..651fe35211 100644 --- a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java +++ b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java @@ -19,11 +19,11 @@ package co.elastic.apm.agent.javalin; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import co.elastic.apm.agent.util.VersionUtils; import io.javalin.http.Context; @@ -85,7 +85,7 @@ public String getAdviceClassName() { public static class HandlerAdapterAdvice { - private static final WebConfiguration webConfig = GlobalTracer.requireTracerImpl().getConfig(WebConfiguration.class); + private static final WebConfiguration webConfig = GlobalTracer.get().getConfig(WebConfiguration.class); // never invoked, only used to cache the fact that the io.javalin.http.Context#handlerType() method is unavailable in this Javalin version private static final MethodHandle NOOP = MethodHandles.constant(String.class, "Non-supported Javalin version"); @@ -137,7 +137,7 @@ public static Object setSpanAndTransactionName(@Advice.This Handler handler, return null; } - final Transaction transaction = tracer.currentTransaction(); + final Transaction transaction = tracer.currentTransaction(); if (transaction == null) { return null; } @@ -183,7 +183,7 @@ public static void onAfterExecute(@Advice.Enter @Nullable Object spanObj, @Advice.Argument(0) Context ctx, @Advice.Thrown @Nullable Throwable t) { if (spanObj != null) { - final Span span = (Span) spanObj; + final Span span = (Span) spanObj; span.deactivate(); final CompletableFuture responseFuture = ctx.resultFuture(); diff --git a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinRenderInstrumentation.java b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinRenderInstrumentation.java index 34938a38fb..c5c2d706f4 100644 --- a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinRenderInstrumentation.java +++ b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinRenderInstrumentation.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.javalin; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -89,7 +89,7 @@ public static Object setSpanName(@Advice.Argument(0) String template) { public static void onAfterExecute(@Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { if (spanObj != null) { - final Span span = (Span) spanObj; + final Span span = (Span) spanObj; span.deactivate(); span.captureException(t); span.end(); diff --git a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JakartaeeJaxRsTransactionNameInstrumentation.java b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JakartaeeJaxRsTransactionNameInstrumentation.java index 38b143ac39..d8ebc409d1 100644 --- a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JakartaeeJaxRsTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JakartaeeJaxRsTransactionNameInstrumentation.java @@ -19,14 +19,14 @@ package co.elastic.apm.agent.jaxrs; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.util.VersionUtils; import net.bytebuddy.asm.Advice; import javax.annotation.Nullable; public class JakartaeeJaxRsTransactionNameInstrumentation extends JaxRsTransactionNameInstrumentation { - public JakartaeeJaxRsTransactionNameInstrumentation(ElasticApmTracer tracer) { + public JakartaeeJaxRsTransactionNameInstrumentation(Tracer tracer) { super(tracer); } diff --git a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JavaxJaxRsTransactionNameInstrumentation.java b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JavaxJaxRsTransactionNameInstrumentation.java index 24f5992239..4387ad7b3a 100644 --- a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JavaxJaxRsTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JavaxJaxRsTransactionNameInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.jaxrs; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.util.VersionUtils; import net.bytebuddy.asm.Advice; @@ -27,7 +27,7 @@ public class JavaxJaxRsTransactionNameInstrumentation extends JaxRsTransactionNameInstrumentation { - public JavaxJaxRsTransactionNameInstrumentation(ElasticApmTracer tracer) { + public JavaxJaxRsTransactionNameInstrumentation(Tracer tracer) { super(tracer); } diff --git a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsOffsetMappingFactory.java b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsOffsetMappingFactory.java index a9e2a360c0..8862d7cbe3 100644 --- a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsOffsetMappingFactory.java +++ b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsOffsetMappingFactory.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.jaxrs; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.annotation.AnnotationDescription; import net.bytebuddy.description.annotation.AnnotationSource; @@ -41,7 +41,7 @@ public class JaxRsOffsetMappingFactory implements Advice.OffsetMapping.Factory applicationPackages; private final JaxRsConfiguration configuration; - private final ElasticApmTracer tracer; + private final Tracer tracer; - public JaxRsTransactionNameInstrumentation(ElasticApmTracer tracer) { + public JaxRsTransactionNameInstrumentation(Tracer tracer) { this.tracer = tracer; applicationPackages = tracer.getConfig(StacktraceConfiguration.class).getApplicationPackages(); configuration = tracer.getConfig(JaxRsConfiguration.class); @@ -120,12 +120,12 @@ public Advice.OffsetMapping.Factory getOffsetMapping() { } static class BaseAdvice { - private static final boolean useAnnotationValueForTransactionName = GlobalTracer.getTracerImpl() + private static final boolean useAnnotationValueForTransactionName = GlobalTracer.get() .getConfig(JaxRsConfiguration.class) .isUseJaxRsPathForTransactionName(); protected static void setTransactionName(String signature, @Nullable String pathAnnotationValue, @Nullable String frameworkVersion) { - final Transaction transaction = TracerAwareInstrumentation.tracer.currentTransaction(); + final Transaction transaction = TracerAwareInstrumentation.tracer.currentTransaction(); if (transaction != null) { String transactionName = signature; if (useAnnotationValueForTransactionName) { diff --git a/apm-agent-plugins/apm-jaxws-plugin/src/main/java/co/elastic/apm/agent/jaxws/JaxWsTransactionNameInstrumentation.java b/apm-agent-plugins/apm-jaxws-plugin/src/main/java/co/elastic/apm/agent/jaxws/JaxWsTransactionNameInstrumentation.java index c3753655ec..a1ff1cee3f 100644 --- a/apm-agent-plugins/apm-jaxws-plugin/src/main/java/co/elastic/apm/agent/jaxws/JaxWsTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-jaxws-plugin/src/main/java/co/elastic/apm/agent/jaxws/JaxWsTransactionNameInstrumentation.java @@ -20,9 +20,9 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; -import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -52,14 +52,14 @@ public class JaxWsTransactionNameInstrumentation extends TracerAwareInstrumentat private final Collection applicationPackages; - public JaxWsTransactionNameInstrumentation(ElasticApmTracer tracer) { + public JaxWsTransactionNameInstrumentation(Tracer tracer) { applicationPackages = tracer.getConfig(StacktraceConfiguration.class).getApplicationPackages(); } public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void setTransactionName(@SimpleMethodSignature String signature) { - final Transaction transaction = tracer.currentTransaction(); + final Transaction transaction = tracer.currentTransaction(); if (transaction != null) { transaction.withName(signature, PRIO_HIGH_LEVEL_FRAMEWORK, false); transaction.setFrameworkName(FRAMEWORK_NAME); diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/StatementInstrumentation.java b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/StatementInstrumentation.java index 245e9c940c..23388dbc52 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/StatementInstrumentation.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/StatementInstrumentation.java @@ -18,8 +18,7 @@ */ package co.elastic.apm.agent.jdbc; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.jdbc.helper.JdbcHelper; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -82,7 +81,7 @@ public ElementMatcher getMethodMatcher() { @SuppressWarnings("DuplicatedCode") public static class ExecuteWithQueryInstrumentation extends StatementInstrumentation { - public ExecuteWithQueryInstrumentation(ElasticApmTracer tracer) { + public ExecuteWithQueryInstrumentation() { super( named("execute").or(named("executeQuery")) .and(takesArgument(0, String.class)) @@ -108,7 +107,7 @@ public static void onAfterExecute(@Advice.This Statement statement, return; } - ((Span) span).captureException(t) + ((Span) span).captureException(t) .deactivate() .end(); @@ -131,7 +130,7 @@ public static void onAfterExecute(@Advice.This Statement statement, */ public static class ExecuteUpdateWithQueryInstrumentation extends StatementInstrumentation { - public ExecuteUpdateWithQueryInstrumentation(ElasticApmTracer tracer) { + public ExecuteUpdateWithQueryInstrumentation() { super( named("executeUpdate").or(named("executeLargeUpdate")) .and(takesArgument(0, String.class)) @@ -157,12 +156,12 @@ public static void onAfterExecute(@Advice.Enter @Nullable Object span, } if (t == null) { - ((Span) span).getContext() + ((Span) span).getContext() .getDb() .withAffectedRowsCount(returnValue); } - ((Span) span).captureException(t) + ((Span) span).captureException(t) .deactivate() .end(); } @@ -174,7 +173,7 @@ public static void onAfterExecute(@Advice.Enter @Nullable Object span, */ public static class AddBatchInstrumentation extends StatementInstrumentation { - public AddBatchInstrumentation(ElasticApmTracer tracer) { + public AddBatchInstrumentation() { super( nameStartsWith("addBatch") .and(takesArgument(0, String.class)) @@ -200,7 +199,7 @@ public static void storeSql(@Advice.This Statement statement, @Advice.Argument(0 * */ public static class ExecuteBatchInstrumentation extends StatementInstrumentation { - public ExecuteBatchInstrumentation(ElasticApmTracer tracer) { + public ExecuteBatchInstrumentation() { super( named("executeBatch").or(named("executeLargeBatch")) .and(takesArguments(0)) @@ -224,10 +223,10 @@ public static Object onBeforeExecute(@Advice.This Statement statement) { public static void onAfterExecute(@Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t, @Advice.Return @Nullable Object returnValue) { - if (!(spanObj instanceof Span)) { + if (!(spanObj instanceof Span)) { return; } - Span span = (Span) spanObj; + Span span = (Span) spanObj; // for 'executeBatch' and 'executeLargeBatch', we have to compute the sum as Statement.getUpdateCount() // does not seem to return the sum of all elements. As we can use instanceof to check return type @@ -265,7 +264,7 @@ public static void onAfterExecute(@Advice.Enter @Nullable Object spanObj, * */ public static class ExecuteUpdateNoQueryInstrumentation extends StatementInstrumentation { - public ExecuteUpdateNoQueryInstrumentation(ElasticApmTracer tracer) { + public ExecuteUpdateNoQueryInstrumentation() { super( named("executeUpdate").or(named("executeLargeUpdate")) .and(takesArguments(0)) @@ -293,12 +292,12 @@ public static void onAfterExecute(@Advice.Enter @Nullable Object span, } if (t == null) { - ((Span) span).getContext() + ((Span) span).getContext() .getDb() .withAffectedRowsCount(returnValue); } - ((Span) span).captureException(t) + ((Span) span).captureException(t) .deactivate() .end(); } @@ -313,7 +312,7 @@ public static void onAfterExecute(@Advice.Enter @Nullable Object span, * */ public static class ExecutePreparedStatementInstrumentation extends StatementInstrumentation { - public ExecutePreparedStatementInstrumentation(ElasticApmTracer tracer) { + public ExecutePreparedStatementInstrumentation() { super( named("execute").or(named("executeQuery")) .and(takesArguments(0)) @@ -340,7 +339,7 @@ public static void onAfterExecute(@Advice.This Statement statement, return; } - ((Span) span).captureException(t) + ((Span) span).captureException(t) .deactivate() .end(); } @@ -355,7 +354,7 @@ public static void onAfterExecute(@Advice.This Statement statement, */ public static class CloseStatementInstrumentation extends StatementInstrumentation { - public CloseStatementInstrumentation(ElasticApmTracer tracer) { + public CloseStatementInstrumentation() { super( named("close") .and(takesArguments(0)) diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java index 3283b03544..fc57ff688e 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.db.signature.Scanner; import co.elastic.apm.agent.db.signature.SignatureParser; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.jdbc.JdbcFilter; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -81,12 +81,12 @@ public String retrieveSqlForStatement(Object statement) { @Nullable - public Span createJdbcSpan(@Nullable String sql, Object statement, @Nullable AbstractSpan parent, boolean preparedStatement) { + public Span createJdbcSpan(@Nullable String sql, Object statement, @Nullable AbstractSpan parent, boolean preparedStatement) { if (!(statement instanceof Statement) || sql == null || isAlreadyMonitored(parent) || parent == null) { return null; } - Span span = parent.createExitSpan(); + Span span = parent.createExitSpan(); if (span == null) { return null; } else { @@ -96,7 +96,7 @@ public Span createJdbcSpan(@Nullable String sql, Object statement, @Nullable Abs if (sql.isEmpty()) { span.withName("empty query"); } else if (span.isSampled()) { - StringBuilder spanName = span.getAndOverrideName(AbstractSpan.PRIO_DEFAULT); + StringBuilder spanName = span.getAndOverrideName(co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT); if (spanName != null) { signatureParser.querySignature(sql, spanName, preparedStatement); } @@ -141,10 +141,10 @@ public Span createJdbcSpan(@Nullable String sql, Object statement, @Nullable Abs * we only record each JDBC call once. */ private boolean isAlreadyMonitored(@Nullable AbstractSpan parent) { - if (!(parent instanceof Span)) { + if (!(parent instanceof Span)) { return false; } - Span parentSpan = (Span) parent; + Span parentSpan = (Span) parent; // a db span can't be the child of another db span // this means the span has already been created for this db call return parentSpan.getType() != null && parentSpan.getType().equals(DB_SPAN_TYPE); diff --git a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdvice.java b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdvice.java index a8629418cf..c73423e792 100644 --- a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdvice.java +++ b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdvice.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.httpclient; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import javax.annotation.Nullable; @@ -36,8 +36,8 @@ public static Object onBeforeExecute(@Advice.Argument(value = 0) HttpRequest htt public static void onAfterExecute(@Advice.Return @Nullable HttpResponse response, @Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { - if (spanObj instanceof Span) { - final Span span = (Span) spanObj; + if (spanObj instanceof Span) { + final Span span = (Span) spanObj; if (response != null) { int statusCode = response.statusCode(); span.getContext().getHttp().withStatusCode(statusCode); diff --git a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdviceHelper.java b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdviceHelper.java index abdfa7f46b..74e0142162 100644 --- a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdviceHelper.java +++ b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAdviceHelper.java @@ -18,10 +18,10 @@ */ package co.elastic.apm.agent.httpclient; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.net.URI; @@ -32,14 +32,14 @@ public class HttpClientAdviceHelper { private static final Tracer tracer = GlobalTracer.get(); @Nullable - public static Span startSpan(HttpRequest httpRequest) { + public static Span startSpan(HttpRequest httpRequest) { final AbstractSpan parent = tracer.getActive(); if (parent == null) { return null; } URI uri = httpRequest.uri(); - Span span = HttpClientHelper.startHttpClientSpan(parent, httpRequest.method(), uri, uri.getHost()); + Span span = HttpClientHelper.startHttpClientSpan(parent, httpRequest.method(), uri, uri.getHost()); if (span != null) { span.activate(); } diff --git a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncAdvice.java b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncAdvice.java index 831d6f07f2..a2f118ae9c 100644 --- a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncAdvice.java +++ b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncAdvice.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.httpclient; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import javax.annotation.Nullable; @@ -37,8 +37,8 @@ public static Object onBeforeExecute(@Advice.Argument(value = 0) HttpRequest htt public static void onAfterExecute(@Advice.Return @Nullable CompletableFuture> completableFuture, @Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { - if (spanObj instanceof Span) { - final Span span = (Span) spanObj; + if (spanObj instanceof Span) { + final Span span = (Span) spanObj; span.deactivate(); if (completableFuture == null) { span.captureException(t) diff --git a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpRequestHeadersAdvice.java b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpRequestHeadersAdvice.java index ebae9e54eb..8dd1635288 100644 --- a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpRequestHeadersAdvice.java +++ b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpRequestHeadersAdvice.java @@ -18,9 +18,10 @@ */ package co.elastic.apm.agent.httpclient; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import javax.annotation.Nullable; @@ -37,12 +38,12 @@ public class HttpRequestHeadersAdvice { @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static HttpHeaders onAfterExecute(@Advice.Return @Nullable final HttpHeaders httpHeaders) { - Span span = tracer.getActiveSpan(); - if (span == null || httpHeaders == null) { // in case of thrown exception return value might be null + AbstractSpan active = tracer.getActive(); + if (!(active instanceof Span) || httpHeaders == null) { // in case of thrown exception return value might be null return httpHeaders; } Map> headersMap = new LinkedHashMap<>(httpHeaders.map()); - span.propagateTraceContext(headersMap, HttpClientRequestPropertyAccessor.instance()); + active.propagateTraceContext(headersMap, HttpClientRequestPropertyAccessor.instance()); return HttpHeaders.of(headersMap, (x, y) -> true); } } diff --git a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java index 205db8ed61..7e2fa48a9b 100644 --- a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java +++ b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java @@ -19,16 +19,14 @@ package co.elastic.apm.agent.httpserver; import co.elastic.apm.agent.configuration.CoreConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.context.Request; -import co.elastic.apm.agent.impl.context.Response; +import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.web.ResultUtil; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.sdk.logging.Logger; -import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; +import co.elastic.apm.agent.tracer.metadata.Request; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.util.TransactionNameUtils; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; @@ -42,15 +40,13 @@ public class HttpHandlerAdvice { - private static final Logger logger = LoggerFactory.getLogger(HttpHandlerAdvice.class); - - private static final ElasticApmTracer tracer; + private static final Tracer tracer; private static final HttpServerHelper serverHelper; private static final WebConfiguration webConfiguration; private static final CoreConfiguration coreConfiguration; static { - tracer = GlobalTracer.requireTracerImpl(); + tracer = GlobalTracer.get(); serverHelper = new HttpServerHelper(tracer.getConfig(WebConfiguration.class)); webConfiguration = tracer.getConfig(WebConfiguration.class); coreConfiguration = tracer.getConfig(CoreConfiguration.class); @@ -65,7 +61,7 @@ public static Object onEnterHandle(@Advice.Argument(0) HttpExchange exchange) { return null; } - Transaction transaction = tracer.startChildTransaction(exchange.getRequestHeaders(), HeadersHeaderGetter.INSTANCE, Thread.currentThread().getContextClassLoader()); + Transaction transaction = tracer.startChildTransaction(exchange.getRequestHeaders(), HeadersHeaderGetter.INSTANCE, Thread.currentThread().getContextClassLoader()); if (transaction == null) { return null; } @@ -76,7 +72,7 @@ public static Object onEnterHandle(@Advice.Argument(0) HttpExchange exchange) { transaction.getAndOverrideName(AbstractSpan.PRIO_LOW_LEVEL_FRAMEWORK), webConfiguration.getUrlGroups()); - transaction.withType(Transaction.TYPE_REQUEST) + transaction.withType(co.elastic.apm.agent.impl.transaction.Transaction.TYPE_REQUEST) .setFrameworkName("JDK HTTP Server"); Request request = transaction.getContext().getRequest(); @@ -136,7 +132,7 @@ public static void onExitHandle(@Advice.Argument(0) HttpExchange exchange, @Advi return; } - Transaction transaction = (Transaction) transactionOrNull; + Transaction transaction = (Transaction) transactionOrNull; transaction .withResultIfUnset(ResultUtil.getResultByHttpStatus(exchange.getResponseCode())) .captureException(t); @@ -146,8 +142,7 @@ public static void onExitHandle(@Advice.Argument(0) HttpExchange exchange, @Advi .withFinished(true) .withStatusCode(exchange.getResponseCode()); - ElasticApmTracer tracer = GlobalTracer.getTracerImpl(); - if (transaction.isSampled() && tracer.getConfig(CoreConfiguration.class).isCaptureHeaders()) { + if (transaction.isSampled() && coreConfiguration.isCaptureHeaders()) { Headers headers = exchange.getResponseHeaders(); if (headers != null) { for (Map.Entry> header : headers.entrySet()) { diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/BaseJmsInstrumentation.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/BaseJmsInstrumentation.java index b775afdc81..053b6780f8 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/BaseJmsInstrumentation.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/BaseJmsInstrumentation.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.matcher.ElementMatcher; import java.util.Collection; @@ -51,15 +51,15 @@ protected static class BaseAdvice { protected static final CoreConfiguration coreConfiguration; static { - ElasticApmTracer elasticApmTracer = GlobalTracer.requireTracerImpl(); + Tracer tracer = GlobalTracer.get(); // loading helper class will load JMS-related classes if loaded from Instrumentation static init // that fails when trying to load instrumentation classes without JMS dependencies, for example when generating // documentation that relies on instrumentation group names - helper = new JmsInstrumentationHelper(elasticApmTracer); + helper = new JmsInstrumentationHelper(tracer); - messagingConfiguration = elasticApmTracer.getConfig(MessagingConfiguration.class); - coreConfiguration = elasticApmTracer.getConfig(CoreConfiguration.class); + messagingConfiguration = tracer.getConfig(MessagingConfiguration.class); + coreConfiguration = tracer.getConfig(CoreConfiguration.class); } } } diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java index 08ea63d0a3..ac3721d867 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java @@ -20,11 +20,11 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -84,11 +84,11 @@ public class JmsInstrumentationHelper { static final String FRAMEWORK_NAME = "JMS"; private static final Logger logger = LoggerFactory.getLogger(JmsInstrumentationHelper.class); - private final ElasticApmTracer tracer; + private final Tracer tracer; private final CoreConfiguration coreConfiguration; private final MessagingConfiguration messagingConfiguration; - public JmsInstrumentationHelper(ElasticApmTracer tracer) { + public JmsInstrumentationHelper(Tracer tracer) { this.tracer = tracer; coreConfiguration = tracer.getConfig(CoreConfiguration.class); messagingConfiguration = tracer.getConfig(MessagingConfiguration.class); @@ -96,7 +96,7 @@ public JmsInstrumentationHelper(ElasticApmTracer tracer) { @SuppressWarnings("Duplicates") @Nullable - public Span startJmsSendSpan(Destination destination, Message message) { + public Span startJmsSendSpan(Destination destination, Message message) { final AbstractSpan activeSpan = tracer.getActive(); if (activeSpan == null) { @@ -113,7 +113,7 @@ public Span startJmsSendSpan(Destination destination, Message message) { return null; } - Span span = activeSpan.createExitSpan(); + Span span = activeSpan.createExitSpan(); if (span == null) { return null; @@ -143,18 +143,14 @@ public Span startJmsSendSpan(Destination destination, Message message) { } @Nullable - public Transaction startJmsTransaction(Message parentMessage, Class instrumentedClass) { - Transaction transaction = tracer.startChildTransaction(parentMessage, JmsMessagePropertyAccessor.instance(), PrivilegedActionUtils.getClassLoader(instrumentedClass)); + public Transaction startJmsTransaction(Message parentMessage, Class instrumentedClass) { + Transaction transaction = tracer.startChildTransaction(parentMessage, JmsMessagePropertyAccessor.instance(), PrivilegedActionUtils.getClassLoader(instrumentedClass)); if (transaction != null) { transaction.setFrameworkName(FRAMEWORK_NAME); } return transaction; } - public void makeChildOf(Transaction childTransaction, Message parentMessage) { - TraceContext.getFromTraceContextTextHeaders().asChildOf(childTransaction.getTraceContext(), parentMessage, JmsMessagePropertyAccessor.instance()); - } - @Nullable public MessageListener wrapLambda(@Nullable MessageListener listener) { // the name check also prevents from wrapping twice @@ -244,7 +240,7 @@ public void addMessageDetails(@Nullable Message message, AbstractSpan span) { return; } try { - co.elastic.apm.agent.impl.context.Message messageContext = span.getContext().getMessage(); + co.elastic.apm.agent.tracer.metadata.Message messageContext = span.getContext().getMessage(); // Currently only capturing body of TextMessages. The javax.jms.Message#getBody() API is since 2.0, so, // if we are supporting JMS 1.1, it makes no sense to rely on isAssignableFrom. @@ -258,7 +254,7 @@ public void addMessageDetails(@Nullable Message message, AbstractSpan span) { messageContext.addHeader(JMS_EXPIRATION_HEADER, String.valueOf(message.getJMSExpiration())); messageContext.addHeader(JMS_TIMESTAMP_HEADER, String.valueOf(message.getJMSTimestamp())); - Enumeration properties = message.getPropertyNames(); + Enumeration properties = message.getPropertyNames(); if (properties != null) { while (properties.hasMoreElements()) { String propertyName = String.valueOf(properties.nextElement()); diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java index c18fe4a168..18192a738e 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java @@ -19,10 +19,10 @@ package co.elastic.apm.agent.jms; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; @@ -97,8 +97,8 @@ public static Object beforeReceive(@Advice.Origin Class clazz, if (parent == null) { createPollingTransaction = true; } else { - if (parent instanceof Transaction) { - Transaction transaction = (Transaction) parent; + if (parent instanceof Transaction) { + Transaction transaction = (Transaction) parent; if (MESSAGE_POLLING.equals(transaction.getType())) { // Avoid duplications for nested calls return null; @@ -111,8 +111,8 @@ public static Object beforeReceive(@Advice.Origin Class clazz, } else { createPollingSpan = true; } - } else if (parent instanceof Span) { - Span parentSpan = (Span) parent; + } else if (parent instanceof Span) { + Span parentSpan = (Span) parent; if (MESSAGING_TYPE.equals(parentSpan.getType()) && "receive".equals(parentSpan.getAction())) { // Avoid duplication for nested calls return null; @@ -132,7 +132,7 @@ public static Object beforeReceive(@Advice.Origin Class clazz, } else if (createPollingTransaction) { createdSpan = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); if (createdSpan != null) { - ((Transaction) createdSpan).withType(MESSAGE_POLLING); + ((Transaction) createdSpan).withType(MESSAGE_POLLING); } } @@ -166,25 +166,22 @@ public static void afterReceive(@Advice.Origin Class clazz, logger.error("Failed to retrieve meta info from Message", e); } - if (abstractSpan instanceof Transaction) { - Transaction transaction = (Transaction) abstractSpan; + if (abstractSpan instanceof Transaction) { + Transaction transaction = (Transaction) abstractSpan; if (discard) { transaction.ignoreTransaction(); } else { - helper.makeChildOf(transaction, message); - transaction.withType(MESSAGING_TYPE); + transaction + .withType(MESSAGING_TYPE) + .addLink(JmsMessagePropertyAccessor.instance(), message); helper.addMessageDetails(message, abstractSpan); } } else if (abstractSpan != null) { - abstractSpan.addSpanLink( - TraceContext.getFromTraceContextTextHeaders(), - JmsMessagePropertyAccessor.instance(), - message - ); + abstractSpan.addLink(JmsMessagePropertyAccessor.instance(), message); } } else if (abstractSpan instanceof Transaction) { // Do not report polling transactions if not yielding messages - ((Transaction) abstractSpan).ignoreTransaction(); + ((Transaction) abstractSpan).ignoreTransaction(); addDetails = false; } @@ -210,7 +207,7 @@ public static void afterReceive(@Advice.Origin Class clazz, && messagingConfiguration.getMessagePollingTransactionStrategy() != MessagingConfiguration.JmsStrategy.POLLING && !"receiveNoWait".equals(methodName)) { - Transaction messageHandlingTransaction = helper.startJmsTransaction(message, clazz); + Transaction messageHandlingTransaction = helper.startJmsTransaction(message, clazz); if (messageHandlingTransaction != null) { messageHandlingTransaction.withType(MESSAGE_HANDLING) .withName(RECEIVE_NAME_PREFIX); diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java index 2424b87783..44154a3fe8 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.jms; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import net.bytebuddy.asm.Advice; @@ -55,7 +55,7 @@ public class JmsMessageListenerInstrumentation extends BaseJmsInstrumentation { private MessagingConfiguration configuration; - public JmsMessageListenerInstrumentation(ElasticApmTracer tracer) { + public JmsMessageListenerInstrumentation(Tracer tracer) { this.configuration = tracer.getConfig(MessagingConfiguration.class); } @@ -123,7 +123,7 @@ public static Object beforeOnMessage(@Advice.Argument(0) @Nullable final Message } // Create a transaction - even if running on same JVM as the sender - Transaction transaction = helper.startJmsTransaction(message, clazz); + Transaction transaction = helper.startJmsTransaction(message, clazz); if (transaction != null) { transaction.withType(MESSAGING_TYPE) .withName(RECEIVE_NAME_PREFIX); @@ -143,8 +143,8 @@ public static Object beforeOnMessage(@Advice.Argument(0) @Nullable final Message @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class, inline = false) public static void afterOnMessage(@Advice.Enter @Nullable final Object transactionObj, @Advice.Thrown final Throwable throwable) { - if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + if (transactionObj instanceof Transaction) { + Transaction transaction = (Transaction) transactionObj; transaction.captureException(throwable); transaction.deactivate().end(); } diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java index cfa8f3fec4..863d1d0f9d 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.jms; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -96,8 +96,8 @@ public static Object beforeSend(@Advice.Argument(0) final Message message, public static void afterSend(@Advice.Enter @Nullable final Object spanObj, @Advice.Thrown final Throwable throwable) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.captureException(throwable); span.deactivate().end(); } @@ -133,8 +133,8 @@ public static Object startSpan(@Advice.Argument(0) final Destination destination public static void endSpan(@Advice.Enter @Nullable final Object spanObj, @Advice.Thrown final Throwable throwable) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.captureException(throwable); span.deactivate().end(); } diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsInstrumentationIT.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsInstrumentationIT.java index 22357138b0..a2acd815f3 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsInstrumentationIT.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsInstrumentationIT.java @@ -536,8 +536,13 @@ private void verifySendReceiveOnNonTracedThread(String destinationName, TextMess for (Transaction receiveTransaction : receiveTransactions) { assertThat(receiveTransaction.getNameAsString()).startsWith("JMS RECEIVE from "); assertThat(receiveTransaction.getNameAsString()).endsWith(destinationName); - assertThat(receiveTransaction.getTraceContext().getTraceId()).isEqualTo(currentTraceId); - assertThat(receiveTransaction.getTraceContext().getParentId()).isEqualTo(sendInitialMessageSpan.getTraceContext().getId()); + if (receiveTransaction.getSpanLinks().isEmpty()) { + assertThat(receiveTransaction.getTraceContext().getTraceId()).isEqualTo(currentTraceId); + assertThat(receiveTransaction.getTraceContext().getParentId()).isEqualTo(sendInitialMessageSpan.getTraceContext().getId()); + } else { + assertThat(receiveTransaction.getSpanLinks().get(0).getTraceId()).isEqualTo(currentTraceId); + assertThat(receiveTransaction.getSpanLinks().get(0).getParentId()).isEqualTo(sendInitialMessageSpan.getTraceContext().getId()); + } assertThat(receiveTransaction.getType()).isEqualTo(MESSAGING_TYPE); assertThat(receiveTransaction.getContext().getMessage().getQueueName()).isEqualTo(destinationName); StringBuilder body = receiveTransaction.getContext().getMessage().getBodyForRead(); diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsMessageListenerTest.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsMessageListenerTest.java index 97aa3aac82..d3d31d3d0e 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsMessageListenerTest.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/JmsMessageListenerTest.java @@ -22,7 +22,8 @@ import co.elastic.apm.agent.bci.ElasticApmAgent; import co.elastic.apm.agent.configuration.MessagingConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.jms.test.TestMessageConsumer; import co.elastic.apm.agent.jms.test.TestMessageListener; @@ -121,7 +122,7 @@ private void testJmsMessageListenerPackage(boolean expectIncluded, JmsMessageLis case LAMBDA: // lambda is instrumented through wrapping on the message consumer MessageListener listener = msg -> { - transaction.set(GlobalTracer.get().currentTransaction()); + transaction.set(GlobalTracer.get().require(Tracer.class).currentTransaction()); }; TestMessageConsumer consumer = new TestMessageConsumer(); // listener should be wrapped on setter entry @@ -159,7 +160,7 @@ public InnerClassMsgHandler(AtomicReference transaction) { @Override public void onMessage(Message message) { - transaction.set(GlobalTracer.get().currentTransaction()); + transaction.set(GlobalTracer.get().require(Tracer.class).currentTransaction()); } } diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMessageListener.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMessageListener.java index fd87a7c51a..e331e857f1 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMessageListener.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMessageListener.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.jms.test; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import javax.jms.Message; @@ -35,6 +36,6 @@ public TestMessageListener(AtomicReference transaction) { @Override public void onMessage(Message message) { - transaction.set(GlobalTracer.get().currentTransaction()); + transaction.set(GlobalTracer.get().require(Tracer.class).currentTransaction()); } } diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMsgHandler.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMsgHandler.java index 6c5025dcce..6a6bf68a12 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMsgHandler.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/test/java/co/elastic/apm/agent/jms/test/TestMsgHandler.java @@ -19,7 +19,8 @@ package co.elastic.apm.agent.jms.test; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import javax.jms.Message; @@ -37,6 +38,6 @@ public TestMsgHandler(AtomicReference transaction) { @Override public void onMessage(Message message) { - transaction.set(GlobalTracer.get().currentTransaction()); + transaction.set(GlobalTracer.get().require(Tracer.class).currentTransaction()); } } diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-spring-plugin/src/test/java/co/elastic/apm/agent/jms/spring/SpringMapMessageListener.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-spring-plugin/src/test/java/co/elastic/apm/agent/jms/spring/SpringMapMessageListener.java index d73e03cc76..7cb75a4db7 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-spring-plugin/src/test/java/co/elastic/apm/agent/jms/spring/SpringMapMessageListener.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-spring-plugin/src/test/java/co/elastic/apm/agent/jms/spring/SpringMapMessageListener.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.jms.spring; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import org.apache.activemq.command.ActiveMQMapMessage; import org.springframework.jms.listener.SessionAwareMessageListener; @@ -45,7 +46,7 @@ public void onMessage(MapMessage mapMessage, Session session) throws JMSExceptio } System.out.println("Received map message: "); map.forEach((key, value) -> System.out.println(" " + key + " --> " + value)); - Transaction transaction = GlobalTracer.getTracerImpl().currentTransaction(); + Transaction transaction = GlobalTracer.get().require(ElasticApmTracer.class).currentTransaction(); assertThat(transaction.isFinished()).isFalse(); SpringJmsTest.resultQueue.offer(map); } diff --git a/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleExecuteInstrumentation.java b/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleExecuteInstrumentation.java index 43e2d2248f..78ae54253b 100644 --- a/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleExecuteInstrumentation.java +++ b/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleExecuteInstrumentation.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.jsf; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -50,13 +50,13 @@ protected static Object createAndActivateSpan(boolean withExternalContext, @Null if (parent == null) { return null; } - if (parent instanceof Span) { - Span parentSpan = (Span) parent; + if (parent instanceof Span) { + Span parentSpan = (Span) parent; if (SPAN_SUBTYPE.equals(parentSpan.getSubtype()) && SPAN_ACTION.equals(parentSpan.getAction())) { return null; } } - Transaction transaction = tracer.currentTransaction(); + Transaction transaction = tracer.currentTransaction(); if (transaction != null) { try { if (withExternalContext) { @@ -70,7 +70,7 @@ protected static Object createAndActivateSpan(boolean withExternalContext, @Null // do nothing- rely on the default servlet name logic } } - Span span = parent.createSpan() + Span span = parent.createSpan() .withType(SPAN_TYPE) .withSubtype(SPAN_SUBTYPE) .withAction(SPAN_ACTION) @@ -80,8 +80,8 @@ protected static Object createAndActivateSpan(boolean withExternalContext, @Null } protected static void endAndDeactivateSpan(@Nullable Object span, @Nullable Throwable t) { - if (span instanceof Span) { - ((Span) span).captureException(t).deactivate().end(); + if (span instanceof Span) { + ((Span) span).captureException(t).deactivate().end(); } } } diff --git a/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleRenderInstrumentation.java b/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleRenderInstrumentation.java index 5522e51e5f..3f68be981d 100644 --- a/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleRenderInstrumentation.java +++ b/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleRenderInstrumentation.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.jsf; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -66,13 +66,13 @@ public static Object createRenderSpan() { if (parent == null) { return null; } - if (parent instanceof Span) { - Span parentSpan = (Span) parent; + if (parent instanceof Span) { + Span parentSpan = (Span) parent; if (SPAN_SUBTYPE.equals(parentSpan.getSubtype()) && SPAN_ACTION.equals(parentSpan.getAction())) { return null; } } - Span span = parent.createSpan() + Span span = parent.createSpan() .withType(SPAN_TYPE) .withSubtype(SPAN_SUBTYPE) .withAction(SPAN_ACTION) @@ -85,8 +85,8 @@ public static Object createRenderSpan() { public static void endRenderSpan(@Advice.Enter @Nullable Object span, @Advice.Thrown @Nullable Throwable t) { - if (span instanceof Span) { - ((Span) span).captureException(t).deactivate().end(); + if (span instanceof Span) { + ((Span) span).captureException(t).deactivate().end(); } } } diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaConsumerInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaConsumerInstrumentation.java index f0eb2fb23c..74523809d5 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaConsumerInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaConsumerInstrumentation.java @@ -19,10 +19,10 @@ package co.elastic.apm.agent.kafka; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -57,7 +57,7 @@ public String getAdviceClassName() { public static class KafkaPollEntryAdvice { - private static final MessagingConfiguration messagingConfiguration = GlobalTracer.requireTracerImpl().getConfig(MessagingConfiguration.class); + private static final MessagingConfiguration messagingConfiguration = GlobalTracer.get().getConfig(MessagingConfiguration.class); @SuppressWarnings("unused") @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) @@ -69,14 +69,14 @@ public static void pollStart() { } if (messagingConfiguration.shouldEndMessagingTransactionOnPoll() && activeSpan instanceof Transaction) { - Transaction transaction = (Transaction) activeSpan; + Transaction transaction = (Transaction) activeSpan; if ("messaging".equals(transaction.getType())) { transaction.deactivate().end(); return; } } - Span span = activeSpan.createExitSpan(); + Span span = activeSpan.createExitSpan(); if (span == null) { return; } @@ -84,7 +84,7 @@ public static void pollStart() { span.withType("messaging") .withSubtype("kafka") .withAction("poll") - .withName("KafkaConsumer#poll", AbstractSpan.PRIO_HIGH_LEVEL_FRAMEWORK); + .withName("KafkaConsumer#poll", co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_HIGH_LEVEL_FRAMEWORK); span.getContext().getServiceTarget().withType("kafka"); @@ -111,11 +111,12 @@ public static class KafkaPollExitAdvice { @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class, inline = false) public static void pollEnd(@Advice.Thrown final Throwable throwable) { - Span span = tracer.getActiveSpan(); - if (span != null && - "kafka".equals(span.getSubtype()) && - "poll".equals(span.getAction()) - ) { + AbstractSpan active = tracer.getActive(); + if (!(active instanceof Span)) { + return; + } + Span span = (Span) active; + if ("kafka".equals(span.getSubtype()) && "poll".equals(span.getAction())) { span.captureException(throwable); span.deactivate().end(); } diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerInstrumentation.java index 6884373611..93acd70c30 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerInstrumentation.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.kafka; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.kafka.helper.KafkaInstrumentationHelper; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; @@ -70,7 +71,7 @@ public static class KafkaProducerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Callback beforeSend(@Advice.Argument(0) final ProducerRecord record, @Advice.Argument(1) @Nullable Callback callback) { - Span span = helper.onSendStart(record); + Span span = helper.onSendStart(record); if (span == null) { return callback; } @@ -82,9 +83,12 @@ public static Callback beforeSend(@Advice.Argument(0) final ProducerRecord public static void afterSend(@Advice.Argument(0) final ProducerRecord record, @Advice.This final KafkaProducer thiz, @Advice.Thrown final Throwable throwable) { - final Span span = tracer.getActiveExitSpan(); - if (span != null) { - helper.onSendEnd(span, record, thiz, throwable); + AbstractSpan active = tracer.getActive(); + if (active instanceof Span) { + Span activeSpan = (Span) active; + if (activeSpan.isExit()) { + helper.onSendEnd(activeSpan, record, thiz, throwable); + } } } } diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/CallbackWrapper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/CallbackWrapper.java index 58215f38ca..228b251888 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/CallbackWrapper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/CallbackWrapper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.kafka.helper; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.tracer.pooling.Recyclable; import org.apache.kafka.clients.producer.Callback; import org.apache.kafka.clients.producer.RecordMetadata; @@ -32,13 +32,13 @@ class CallbackWrapper implements Callback, Recyclable { @Nullable private Callback delegate; @SuppressWarnings("NotNullFieldNotInitialized") - private volatile Span span; + private volatile Span span; CallbackWrapper(KafkaInstrumentationHelper helper) { this.helper = helper; } - Callback wrap(@Nullable Callback delegate, Span span) { + Callback wrap(@Nullable Callback delegate, Span span) { this.delegate = delegate; this.span = span; return this; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java index 39a47ddb32..096c4c8495 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java @@ -19,14 +19,15 @@ package co.elastic.apm.agent.kafka.helper; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.common.util.WildcardMatcher; -import co.elastic.apm.agent.objectpool.ObjectPool; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.pooling.Allocator; +import co.elastic.apm.agent.tracer.pooling.ObjectPool; import org.apache.kafka.clients.producer.Callback; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; @@ -39,17 +40,17 @@ public class KafkaInstrumentationHelper { public static final Logger logger = LoggerFactory.getLogger(KafkaInstrumentationHelper.class); - private static final KafkaInstrumentationHelper INSTANCE = new KafkaInstrumentationHelper(GlobalTracer.requireTracerImpl()); + private static final KafkaInstrumentationHelper INSTANCE = new KafkaInstrumentationHelper(GlobalTracer.get()); private final ObjectPool callbackWrapperObjectPool; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final MessagingConfiguration messagingConfiguration; public static KafkaInstrumentationHelper get() { return INSTANCE; } - public KafkaInstrumentationHelper(ElasticApmTracer tracer) { + public KafkaInstrumentationHelper(Tracer tracer) { this.tracer = tracer; this.messagingConfiguration = tracer.getConfig(MessagingConfiguration.class); this.callbackWrapperObjectPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(256, @@ -69,14 +70,18 @@ private boolean ignoreTopic(String topicName) { } @Nullable - public Span onSendStart(ProducerRecord record) { + public Span onSendStart(ProducerRecord record) { String topic = record.topic(); if (ignoreTopic(topic)) { return null; } - final Span span = tracer.createExitChildSpan(); + AbstractSpan active = tracer.getActive(); + if (active == null) { + return null; + } + final Span span = active.createExitSpan(); if (span == null) { return null; } @@ -98,7 +103,7 @@ public Span onSendStart(ProducerRecord record) { } @Nullable - public Callback wrapCallback(@Nullable Callback callback, Span span) { + public Callback wrapCallback(@Nullable Callback callback, Span span) { if (callback instanceof CallbackWrapper) { // don't wrap twice return callback; @@ -115,7 +120,7 @@ void recycle(CallbackWrapper callbackWrapper) { callbackWrapperObjectPool.recycle(callbackWrapper); } - public void onSendEnd(Span span, ProducerRecord producerRecord, KafkaProducer kafkaProducer, @Nullable Throwable throwable) { + public void onSendEnd(Span span, ProducerRecord producerRecord, KafkaProducer kafkaProducer, @Nullable Throwable throwable) { // Topic address collection is normally very fast, as it uses cached cluster state information. However, // when the cluster metadata is required to be updated, its query may block for a short period. In diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java index bec7ec0916..6ef2ff4c73 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.kafka; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.kafka.helper.KafkaInstrumentationHeadersHelper; import co.elastic.apm.agent.kafka.helper.KafkaInstrumentationHelper; import net.bytebuddy.asm.Advice; @@ -70,7 +70,7 @@ public static class KafkaProducerHeadersAdvice { public static Object[] beforeSend(@Advice.FieldValue("apiVersions") final ApiVersions apiVersions, @Advice.Argument(0) final ProducerRecord record, @Nullable @Advice.Argument(value = 1) Callback callback) { - Span span = helper.onSendStart(record); + Span span = helper.onSendStart(record); if (span == null) { return null; } @@ -107,7 +107,7 @@ public static Object[] afterSend(@Advice.Enter @Nullable Object[] enter, @Advice.This final KafkaProducer thiz, @Advice.Thrown @Nullable final Throwable throwable) { - Span span = enter != null ? (Span) enter[0] : null; + Span span = enter != null ? (Span) enter[0] : null; if (span == null) { return null; } diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/NewKafkaPollExitInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/NewKafkaPollExitInstrumentation.java index bf18f65efb..87d73d8b9e 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/NewKafkaPollExitInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/NewKafkaPollExitInstrumentation.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.kafka; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.kafka.helper.KafkaInstrumentationHeadersHelper; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatcher; @@ -51,11 +52,12 @@ public static class KafkaPollExitAdvice { public static void pollEnd(@Advice.Thrown final Throwable throwable, @Advice.Return @Nullable ConsumerRecords records) { - Span span = tracer.getActiveSpan(); - if (span != null && - span.getSubtype() != null && span.getSubtype().equals("kafka") && - span.getAction() != null && span.getAction().equals("poll") - ) { + AbstractSpan active = tracer.getActive(); + if (!(active instanceof Span)) { + return; + } + Span span = (Span) active; + if ("kafka".equals(span.getSubtype()) && "poll".equals(span.getAction())) { helper.addSpanLinks(records, span); span.captureException(throwable) .deactivate() diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIterableWrapper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIterableWrapper.java index c9fbeb963e..aa5521676b 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIterableWrapper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIterableWrapper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.kafka.helper; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import org.apache.kafka.clients.consumer.ConsumerRecord; import java.util.Iterator; @@ -26,9 +26,9 @@ class ConsumerRecordsIterableWrapper implements Iterable> { private final Iterable> delegate; - private final ElasticApmTracer tracer; + private final Tracer tracer; - public ConsumerRecordsIterableWrapper(Iterable> delegate, ElasticApmTracer tracer) { + public ConsumerRecordsIterableWrapper(Iterable> delegate, Tracer tracer) { this.delegate = delegate; this.tracer = tracer; } diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java index 2f3e4b4dde..6dc8cea9ee 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java @@ -20,11 +20,11 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.context.Message; import co.elastic.apm.agent.impl.transaction.TraceContext; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; +import co.elastic.apm.agent.tracer.metadata.Message; import co.elastic.apm.agent.util.PrivilegedActionUtils; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.header.Header; @@ -40,11 +40,11 @@ class ConsumerRecordsIteratorWrapper implements Iterator> { public static final String FRAMEWORK_NAME = "Kafka"; private final Iterator> delegate; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final CoreConfiguration coreConfiguration; private final MessagingConfiguration messagingConfiguration; - public ConsumerRecordsIteratorWrapper(Iterator> delegate, ElasticApmTracer tracer) { + public ConsumerRecordsIteratorWrapper(Iterator> delegate, Tracer tracer) { this.delegate = delegate; this.tracer = tracer; coreConfiguration = tracer.getConfig(CoreConfiguration.class); @@ -59,7 +59,7 @@ public boolean hasNext() { public void endCurrentTransaction() { try { - Transaction transaction = tracer.currentTransaction(); + Transaction transaction = tracer.currentTransaction(); if (transaction != null && "messaging".equals(transaction.getType())) { transaction.deactivate().end(); } @@ -75,7 +75,7 @@ public void endCurrentTransaction() { try { String topic = record.topic(); if (!WildcardMatcher.isAnyMatch(messagingConfiguration.getIgnoreMessageQueues(), topic)) { - Transaction transaction = tracer.startChildTransaction(record, KafkaRecordHeaderAccessor.instance(), PrivilegedActionUtils.getClassLoader(ConsumerRecordsIteratorWrapper.class)); + Transaction transaction = tracer.startChildTransaction(record, KafkaRecordHeaderAccessor.instance(), PrivilegedActionUtils.getClassLoader(ConsumerRecordsIteratorWrapper.class)); if (transaction != null) { transaction.withType("messaging").withName("Kafka record from " + topic).activate(); transaction.setFrameworkName(FRAMEWORK_NAME); diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsListWrapper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsListWrapper.java index becd215df1..357de0f3da 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsListWrapper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsListWrapper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.kafka.helper; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import org.apache.kafka.clients.consumer.ConsumerRecord; import java.util.Collection; @@ -29,9 +29,9 @@ class ConsumerRecordsListWrapper implements List> { private final List> delegate; - private final ElasticApmTracer tracer; + private final Tracer tracer; - public ConsumerRecordsListWrapper(List> delegate, ElasticApmTracer tracer) { + public ConsumerRecordsListWrapper(List> delegate, Tracer tracer) { this.delegate = delegate; this.tracer = tracer; } diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java index 50564b3773..256b4681ce 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java @@ -18,11 +18,11 @@ */ package co.elastic.apm.agent.kafka.helper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; +import co.elastic.apm.agent.tracer.Tracer; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.producer.ProducerRecord; @@ -36,7 +36,7 @@ public class KafkaInstrumentationHeadersHelper { private static final Logger logger = LoggerFactory.getLogger(KafkaInstrumentationHeadersHelper.class); - private static final KafkaInstrumentationHeadersHelper INSTANCE = new KafkaInstrumentationHeadersHelper(GlobalTracer.requireTracerImpl()); + private static final KafkaInstrumentationHeadersHelper INSTANCE = new KafkaInstrumentationHeadersHelper(GlobalTracer.get()); private static final ThreadLocal wrappingDisabled = new ThreadLocal() { @Override @@ -45,13 +45,13 @@ protected Boolean initialValue() { } }; - private final ElasticApmTracer tracer; + private final Tracer tracer; public static KafkaInstrumentationHeadersHelper get() { return INSTANCE; } - public KafkaInstrumentationHeadersHelper(ElasticApmTracer tracer) { + public KafkaInstrumentationHeadersHelper(Tracer tracer) { this.tracer = tracer; } @@ -108,11 +108,7 @@ public void addSpanLinks(@Nullable ConsumerRecords records, AbstractSpan record : records) { - span.addSpanLink( - TraceContext.getFromTraceContextBinaryHeaders(), - KafkaRecordHeaderAccessor.instance(), - record - ); + span.addLink(KafkaRecordHeaderAccessor.instance(), record); } } finally { wrappingDisabled.set(false); @@ -120,7 +116,7 @@ public void addSpanLinks(@Nullable ConsumerRecords records, AbstractSpan producerRecord) { + public void setOutgoingTraceContextHeaders(Span span, ProducerRecord producerRecord) { span.propagateTraceContext(producerRecord, KafkaRecordHeaderAccessor.instance()); } diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-spring-plugin/src/main/java/co/elastic/apm/agent/kafka/SpringKafkaBatchListenerInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-spring-plugin/src/main/java/co/elastic/apm/agent/kafka/SpringKafkaBatchListenerInstrumentation.java index d3d6dced5a..2be570fc35 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-spring-plugin/src/main/java/co/elastic/apm/agent/kafka/SpringKafkaBatchListenerInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-spring-plugin/src/main/java/co/elastic/apm/agent/kafka/SpringKafkaBatchListenerInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.kafka; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.util.LoggerUtils; @@ -75,7 +75,7 @@ public static class SpringKafkaBatchListenerAdvice { @Nullable @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object onEnter(@Advice.This Object thiz) { - Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(thiz.getClass())); + Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(thiz.getClass())); if (transaction != null) { transaction .withType("messaging") @@ -91,7 +91,7 @@ public static Object onEnter(@Advice.This Object thiz) { @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onExit(@Nullable @Advice.Enter Object transactionObj) { - Transaction transaction = (Transaction) transactionObj; + Transaction transaction = (Transaction) transactionObj; if (transaction != null) { transaction.deactivate().end(); } diff --git a/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/error/JulLoggerErrorCapturingInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/error/JulLoggerErrorCapturingInstrumentation.java index 83e54aaaff..4481a0a91c 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/error/JulLoggerErrorCapturingInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/error/JulLoggerErrorCapturingInstrumentation.java @@ -18,6 +18,7 @@ */ package co.elastic.apm.agent.jul.error; +import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.loginstr.error.AbstractLoggerErrorCapturingInstrumentation; import co.elastic.apm.agent.loginstr.error.LoggerErrorHelper; import net.bytebuddy.asm.Advice; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java index 21adbf2723..65e4971f0c 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java @@ -18,11 +18,11 @@ */ package co.elastic.apm.agent.log4j2.correlation; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.error.ErrorCapture; import co.elastic.apm.agent.loginstr.correlation.AbstractLogCorrelationHelper; import co.elastic.apm.agent.loginstr.correlation.CorrelationIdMapAdapter; +import co.elastic.apm.agent.tracer.Tracer; import org.apache.logging.log4j.ThreadContext; import java.util.Map; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java index ecd47cbe98..a939ca184f 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java @@ -18,12 +18,12 @@ */ package co.elastic.apm.agent.loginstr.correlation; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.error.ErrorCapture; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.sdk.state.CallDepth; import co.elastic.apm.agent.sdk.state.GlobalState; +import co.elastic.apm.agent.tracer.Tracer; @GlobalState public abstract class AbstractLogCorrelationHelper { diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java index c94d8ca2cc..7262590c8e 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java @@ -18,10 +18,10 @@ */ package co.elastic.apm.agent.loginstr.correlation; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.error.ErrorCapture; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.util.AbstractMap; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/AbstractLoggerErrorCapturingInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/AbstractLoggerErrorCapturingInstrumentation.java index 03e61b0007..babada2f9b 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/AbstractLoggerErrorCapturingInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/AbstractLoggerErrorCapturingInstrumentation.java @@ -19,6 +19,7 @@ package co.elastic.apm.agent.loginstr.error; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.impl.error.ErrorCapture; import co.elastic.apm.agent.sdk.state.CallDepth; import net.bytebuddy.asm.Advice; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java index 88baa198dd..22e159d840 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.loginstr.error; -import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.impl.error.ErrorCapture; import co.elastic.apm.agent.sdk.state.CallDepth; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.util.PrivilegedActionUtils; import javax.annotation.Nullable; @@ -46,7 +46,8 @@ public LoggerErrorHelper(Class adviceClass, Tracer tracer) { public Object enter(@Nullable Throwable exception, Class originClass) { if (!callDepth.isNestedCallAndIncrement()) { if (exception != null) { - ErrorCapture error = tracer.captureException(exception, tracer.getActive(), PrivilegedActionUtils.getClassLoader(originClass)); + co.elastic.apm.agent.impl.Tracer required = tracer.require(co.elastic.apm.agent.impl.Tracer.class); + ErrorCapture error = required.captureException(exception, required.getActive(), PrivilegedActionUtils.getClassLoader(originClass)); if (error != null) { error.activate(); } diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/reformatting/AbstractEcsReformattingHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/reformatting/AbstractEcsReformattingHelper.java index 9725559c9c..27028daa6b 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/reformatting/AbstractEcsReformattingHelper.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/reformatting/AbstractEcsReformattingHelper.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.ServerlessConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.metadata.Service; import co.elastic.apm.agent.impl.metadata.ServiceFactory; import co.elastic.apm.agent.logging.LogEcsReformatting; @@ -35,6 +35,7 @@ import co.elastic.apm.agent.sdk.state.GlobalState; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.util.List; @@ -168,7 +169,7 @@ public abstract class AbstractEcsReformattingHelper { private final Reporter reporter; public AbstractEcsReformattingHelper() { - ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + Tracer tracer = GlobalTracer.get(); loggingConfiguration = tracer.getConfig(LoggingConfiguration.class); additionalFields = loggingConfiguration.getLogEcsReformattingAdditionalFields(); Service service = new ServiceFactory().createService( @@ -183,7 +184,7 @@ public AbstractEcsReformattingHelper() { } else { configuredServiceNodeName = null; } - reporter = tracer.getReporter(); + reporter = tracer.require(ElasticApmTracer.class).getReporter(); } /** diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/test/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapterTest.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/test/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapterTest.java index cf43081db3..a456400bac 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/test/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapterTest.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/test/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapterTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.MockTracer; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.tracer.Scope; diff --git a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/AbstractMicrometerInstrumentation.java b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/AbstractMicrometerInstrumentation.java index 80dbe0cac9..442e4da187 100644 --- a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/AbstractMicrometerInstrumentation.java +++ b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/AbstractMicrometerInstrumentation.java @@ -19,14 +19,14 @@ package co.elastic.apm.agent.micrometer; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; import java.util.Collection; import java.util.Collections; public abstract class AbstractMicrometerInstrumentation extends TracerAwareInstrumentation { - static final MicrometerMetricsReporter reporter = new MicrometerMetricsReporter(GlobalTracer.requireTracerImpl()); + static final MicrometerMetricsReporter reporter = new MicrometerMetricsReporter(tracer.require(ElasticApmTracer.class)); public Collection getInstrumentationGroupNames() { return Collections.singletonList("micrometer"); diff --git a/apm-agent-plugins/apm-mongodb/apm-mongodb-common/src/main/java/co/elastic/apm/agent/mongodb/MongoHelper.java b/apm-agent-plugins/apm-mongodb/apm-mongodb-common/src/main/java/co/elastic/apm/agent/mongodb/MongoHelper.java index 5e2fc3dfd7..a8d011f08e 100644 --- a/apm-agent-plugins/apm-mongodb/apm-mongodb-common/src/main/java/co/elastic/apm/agent/mongodb/MongoHelper.java +++ b/apm-agent-plugins/apm-mongodb/apm-mongodb-common/src/main/java/co/elastic/apm/agent/mongodb/MongoHelper.java @@ -18,13 +18,13 @@ */ package co.elastic.apm.agent.mongodb; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.Tracer; import org.bson.BsonDocument; import org.bson.BsonValue; @@ -34,16 +34,16 @@ public class MongoHelper { private static final Logger logger = LoggerFactory.getLogger(MongoHelper.class); - private final ElasticApmTracer tracer; + private final Tracer tracer; private final MongoConfiguration config; public MongoHelper() { - this.tracer = GlobalTracer.getTracerImpl(); + this.tracer = GlobalTracer.get(); this.config = tracer.getConfig(MongoConfiguration.class); } - public Span startSpan(@Nullable String database, @Nullable String collection, @Nullable String command, String host, int port, @Nullable BsonDocument commandDocument) { - Span span = null; + public Span startSpan(@Nullable String database, @Nullable String collection, @Nullable String command, String host, int port, @Nullable BsonDocument commandDocument) { + Span span = null; final AbstractSpan activeSpan = tracer.getActive(); if (activeSpan != null) { span = activeSpan.createExitSpan(); @@ -71,7 +71,7 @@ public Span startSpan(@Nullable String database, @Nullable String collection, @N .withInstance(database) .withStatement(statement); - StringBuilder name = span.getAndOverrideName(AbstractSpan.PRIO_DEFAULT); + StringBuilder name = span.getAndOverrideName(co.elastic.apm.agent.impl.transaction.AbstractSpan.PRIO_DEFAULT); if (name != null) { appendToName(name, database); appendToName(name, collection); diff --git a/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionCommandInstrumentation.java b/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionCommandInstrumentation.java index f0d8aa462d..c95d0927d2 100644 --- a/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionCommandInstrumentation.java +++ b/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionCommandInstrumentation.java @@ -18,8 +18,7 @@ */ package co.elastic.apm.agent.mongodb.v3; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.mongodb.MongoHelper; import com.mongodb.MongoNamespace; import com.mongodb.ServerAddress; @@ -80,8 +79,8 @@ public static Object onEnter(@Advice.This Connection thiz, @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onExit(@Nullable @Advice.Enter Object spanObj, @Advice.Thrown Throwable thrown) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.deactivate() .captureException(thrown) .end(); diff --git a/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionInstrumentation.java b/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionInstrumentation.java index f34bcdfa0c..c95e15e26c 100644 --- a/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionInstrumentation.java +++ b/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/ConnectionInstrumentation.java @@ -18,8 +18,7 @@ */ package co.elastic.apm.agent.mongodb.v3; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.mongodb.MongoHelper; import com.mongodb.MongoNamespace; import com.mongodb.ServerAddress; @@ -93,8 +92,8 @@ public static Object onEnter(@Advice.This Connection thiz, @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onExit(@Nullable @Advice.Enter Object spanObj, @Advice.Thrown Throwable thrown) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.deactivate().captureException(thrown); span.end(); } diff --git a/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/ConnectionCommandInstrumentation.java b/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/ConnectionCommandInstrumentation.java index 4e83bde60e..4f023f186f 100644 --- a/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/ConnectionCommandInstrumentation.java +++ b/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/ConnectionCommandInstrumentation.java @@ -18,8 +18,7 @@ */ package co.elastic.apm.agent.mongodb.v4; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.mongodb.MongoHelper; import com.mongodb.ServerAddress; import com.mongodb.internal.connection.Connection; @@ -75,8 +74,8 @@ public static Object onEnter(@Advice.This Connection thiz, @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onExit(@Nullable @Advice.Enter Object spanObj, @Advice.Thrown Throwable thrown) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.deactivate() .captureException(thrown) .end(); diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java index ceb9ddc06d..f47a94b52d 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.okhttp; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; @@ -80,7 +80,7 @@ public static Object[] onBeforeEnqueue(final @Advice.Origin Class span = HttpClientHelper.startHttpClientSpan(parent, request.method(), url.toString(), url.scheme(), OkHttpClientHelper.computeHostName(url.host()), url.port()); if (span != null) { @@ -103,7 +103,7 @@ public static Object[] onBeforeEnqueue(final @Advice.Origin Class span = enter != null ? (Span) enter[2] : null; if (span != null) { span.deactivate(); } @@ -114,15 +114,15 @@ public static class CallbackWrapperCreator implements WrapperCreator { public static final CallbackWrapperCreator INSTANCE = new CallbackWrapperCreator(); @Override - public Callback wrap(final Callback delegate, Span span) { + public Callback wrap(final Callback delegate, Span span) { return new CallbackWrapper(span, delegate); } private static class CallbackWrapper implements Callback { - private final Span span; + private final Span span; private final Callback delegate; - CallbackWrapper(Span span, Callback delegate) { + CallbackWrapper(Span span, Callback delegate) { this.span = span; this.delegate = delegate; } diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java index fb383abc2b..69922ce1fa 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.okhttp; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToFields.ToField; @@ -63,7 +63,7 @@ public static Object[] onBeforeExecute(final @Advice.FieldValue("originalRequest okhttp3.Request request = (okhttp3.Request) originalRequest; HttpUrl url = request.url(); - Span span = HttpClientHelper.startHttpClientSpan(parent, request.method(), url.toString(), url.scheme(), + Span span = HttpClientHelper.startHttpClientSpan(parent, request.method(), url.toString(), url.scheme(), OkHttpClientHelper.computeHostName(url.host()), url.port()); if (span != null) { @@ -86,9 +86,9 @@ public static Object[] onBeforeExecute(final @Advice.FieldValue("originalRequest public static void onAfterExecute(@Advice.Return @Nullable okhttp3.Response response, @Advice.Thrown @Nullable Throwable t, @Advice.Enter @Nonnull Object[] enter) { - Span span = null; - if (enter[1] instanceof Span) { - span = (Span) enter[1]; + Span span = null; + if (enter[1] instanceof Span) { + span = (Span) enter[1]; } if (span != null) { try { diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java index f4d9c20cbc..e4436c75ec 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.okhttp; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import com.squareup.okhttp.Call; import com.squareup.okhttp.Callback; @@ -76,7 +76,7 @@ public static Object[] onBeforeEnqueue(final @Advice.Origin Class span = HttpClientHelper.startHttpClientSpan(parent, request.method(), url.toString(), url.getProtocol(), OkHttpClientHelper.computeHostName(url.getHost()), url.getPort()); if (span != null) { @@ -99,7 +99,7 @@ public static Object[] onBeforeEnqueue(final @Advice.Origin Class span = enter != null ? (Span) enter[2] : null; if (span != null) { span.deactivate(); } @@ -111,15 +111,15 @@ public static class CallbackWrapperCreator implements WrapperCreator { public static final CallbackWrapperCreator INSTANCE = new CallbackWrapperCreator(); @Override - public Callback wrap(final Callback delegate, Span span) { + public Callback wrap(final Callback delegate, Span span) { return new CallbackWrapper(span, delegate); } private static class CallbackWrapper implements Callback { - private final Span span; + private final Span span; private final Callback delegate; - CallbackWrapper(Span span, Callback delegate) { + CallbackWrapper(Span span, Callback delegate) { this.span = span; this.delegate = delegate; } diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientInstrumentation.java index eab24707c5..a23cc3c808 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientInstrumentation.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.okhttp; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import com.squareup.okhttp.HttpUrl; import com.squareup.okhttp.Request; @@ -60,7 +60,7 @@ public static Object[] onBeforeExecute(@Advice.FieldValue("originalRequest") @Nu com.squareup.okhttp.Request request = (com.squareup.okhttp.Request) originalRequest; HttpUrl httpUrl = request.httpUrl(); - Span span = HttpClientHelper.startHttpClientSpan(parent, request.method(), httpUrl.toString(), httpUrl.scheme(), + Span span = HttpClientHelper.startHttpClientSpan(parent, request.method(), httpUrl.toString(), httpUrl.scheme(), OkHttpClientHelper.computeHostName(httpUrl.host()), httpUrl.port()); if (span != null) { @@ -84,9 +84,9 @@ public static Object[] onBeforeExecute(@Advice.FieldValue("originalRequest") @Nu public static void onAfterExecute(@Advice.Return @Nullable com.squareup.okhttp.Response response, @Advice.Thrown @Nullable Throwable t, @Advice.Enter @Nonnull Object[] enter) { - Span span = null; - if (enter[1] instanceof Span) { - span = (Span) enter[1]; + Span span = null; + if (enter[1] instanceof Span) { + span = (Span) enter[1]; } if (span != null) { try { diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/WrapperCreator.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/WrapperCreator.java index e5ae857f03..e53eb5a8c5 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/WrapperCreator.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/WrapperCreator.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.okhttp; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; /** * Used to create a wrapper for a callback or listener @@ -37,5 +37,5 @@ public interface WrapperCreator { * @param span the currently active span * @return the wrapped callback */ - T wrap(T delegate, Span span); + T wrap(T delegate, Span span); } diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/SdkMeterProviderBuilderInstrumentation.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/SdkMeterProviderBuilderInstrumentation.java index a00542a391..e9d7f8c589 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/SdkMeterProviderBuilderInstrumentation.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/SdkMeterProviderBuilderInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.otelmetricsdk; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -69,7 +69,7 @@ public static class SdkMeterProviderBuilderAdvice { private static final Logger unsupportedVersionLogger = LoggerUtils.logOnce(logger); private static final WeakSet ALREADY_REGISTERED_BUILDERS = WeakConcurrent.buildSet(); - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + private static final ElasticApmTracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter(@Advice.This SdkMeterProviderBuilder thiz) { diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ArrayBasedContextInstrumentation.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ArrayBasedContextInstrumentation.java index eb44b6ff5e..dd65fa69ff 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ArrayBasedContextInstrumentation.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ArrayBasedContextInstrumentation.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.opentelemetry; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.opentelemetry.tracing.OTelBridgeContext; import io.opentelemetry.context.Context; import net.bytebuddy.asm.Advice; @@ -69,7 +70,7 @@ public static Context onExit(@Advice.Return @Nullable Context returnValue) { return null; } - return OTelBridgeContext.bridgeRootContext(GlobalTracer.requireTracerImpl(), returnValue); + return OTelBridgeContext.bridgeRootContext(GlobalTracer.get().require(ElasticApmTracer.class), returnValue); } } } diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ContextStorageInstrumentation.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ContextStorageInstrumentation.java index 5ff64f53a5..e51b7181ba 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ContextStorageInstrumentation.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/ContextStorageInstrumentation.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.opentelemetry; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.opentelemetry.context.OTelContextStorage; import io.opentelemetry.context.ContextStorage; import net.bytebuddy.asm.Advice; @@ -51,7 +52,7 @@ public String getAdviceClassName() { public static class ContextStorageAdvice { - private static final OTelContextStorage CONTEXT_STORAGE = new OTelContextStorage(GlobalTracer.requireTracerImpl()); + private static final OTelContextStorage CONTEXT_STORAGE = new OTelContextStorage(GlobalTracer.get().require(ElasticApmTracer.class)); @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(suppress = Throwable.class, inline = false) diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/GlobalOpenTelemetryInstrumentation.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/GlobalOpenTelemetryInstrumentation.java index 1d41dfa7df..5775fa06b1 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/GlobalOpenTelemetryInstrumentation.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/GlobalOpenTelemetryInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.opentelemetry; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.opentelemetry.global.ElasticOpenTelemetry; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -71,7 +71,7 @@ public static OpenTelemetry onExit(@Advice.Return OpenTelemetry originalOtel) { @Nonnull private static OpenTelemetry buildOpenTelemetry(OpenTelemetry delegate) { - ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + ElasticApmTracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); try { //Check if the provided Otel-API supports metrics OpenTelemetry.class.getMethod("getMeterProvider"); diff --git a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java index 919ccfd330..0648df5021 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java @@ -18,8 +18,9 @@ */ package co.elastic.apm.agent.opentracingimpl; +import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.sampling.ConstantSampler; import co.elastic.apm.agent.impl.sampling.Sampler; import co.elastic.apm.agent.impl.transaction.AbstractSpan; @@ -90,7 +91,7 @@ public static AbstractSpan doCreateTransactionOrSpan(@Nullable AbstractSpan> baggage, ClassLoader applicationClassLoader) { AbstractSpan result = null; - ElasticApmTracer tracer = GlobalTracer.getTracerImpl(); + ElasticApmTracer tracer = TracerAwareInstrumentation.tracer.require(ElasticApmTracer.class); if (tracer != null) { if (parentContext == null) { result = createTransaction(tags, operationName, microseconds, baggage, tracer, applicationClassLoader); diff --git a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ElasticApmTracerInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ElasticApmTracerInstrumentation.java index 81e8f30ff2..fa9e090e80 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ElasticApmTracerInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ElasticApmTracerInstrumentation.java @@ -18,6 +18,7 @@ */ package co.elastic.apm.agent.opentracingimpl; +import co.elastic.apm.agent.impl.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -29,7 +30,7 @@ public class ElasticApmTracerInstrumentation extends OpenTracingBridgeInstrument public static class AdviceClass { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void close() { - tracer.stop(); + tracer.require(Tracer.class).stop(); } } diff --git a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ExternalSpanContextInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ExternalSpanContextInstrumentation.java index 26f245971f..75260e7e82 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ExternalSpanContextInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ExternalSpanContextInstrumentation.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.opentracingimpl; +import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; import co.elastic.apm.agent.impl.transaction.TraceContext; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToFields.ToField; @@ -117,7 +117,7 @@ public static String onExit(@Advice.FieldValue(value = "childTraceContext", typi @Nullable public static TraceContext parseTextMap(Iterable> textMap) { - ElasticApmTracer tracer = GlobalTracer.getTracerImpl(); + ElasticApmTracer tracer = TracerAwareInstrumentation.tracer.require(ElasticApmTracer.class); if (tracer != null) { TraceContext childTraceContext = TraceContext.with64BitId(tracer); if (TraceContext.>>getFromTraceContextTextHeaders().asChildOf(childTraceContext, textMap, OpenTracingTextMapBridge.instance())) { diff --git a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java index d40a28a895..cae224ae09 100644 --- a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java +++ b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.process; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.state.GlobalVariables; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; @@ -34,7 +34,7 @@ */ class ProcessHelper { - private static final ProcessHelper INSTANCE = new ProcessHelper(WeakConcurrentProviderImpl.createWeakSpanMap()); + private static final ProcessHelper INSTANCE = new ProcessHelper(WeakConcurrentProviderImpl.>createWeakSpanMap()); /** * A thread local used to indicate whether the currently invoked instrumented method is invoked by the plugin itself. @@ -44,9 +44,9 @@ class ProcessHelper { */ private static final ThreadLocal inTracingContext = GlobalVariables.get(ProcessHelper.class, "inTracingContext", new ThreadLocal()); - private final WeakMap inFlightSpans; + private final WeakMap> inFlightSpans; - ProcessHelper(WeakMap inFlightSpans) { + ProcessHelper(WeakMap> inFlightSpans) { this.inFlightSpans = inFlightSpans; } @@ -80,7 +80,7 @@ void doStartProcess(@Nonnull AbstractSpan parentContext, @Nonnull Process pro String binaryName = getBinaryName(processName); - Span span = parentContext.createSpan() + Span span = parentContext.createSpan() .withType("process") .withName(binaryName); @@ -104,7 +104,7 @@ private static String getBinaryName(String processName) { */ void doEndProcess(Process process, boolean checkTerminatedProcess) { - Span span = inFlightSpans.get(process); + Span span = inFlightSpans.get(process); if (span == null) { return; } @@ -145,7 +145,7 @@ void doEndProcessSpan(Process process, int exitValue) { } private void removeAndEndSpan(Process process, Outcome outcome) { - Span span = inFlightSpans.remove(process); + Span span = inFlightSpans.remove(process); if (span != null) { span.withOutcome(outcome). end(); diff --git a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessStartInstrumentation.java b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessStartInstrumentation.java index 027526137b..631e9a46db 100644 --- a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessStartInstrumentation.java +++ b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessStartInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.process; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; diff --git a/apm-agent-plugins/apm-process-plugin/src/test/java/co/elastic/apm/agent/process/ProcessHelperTest.java b/apm-agent-plugins/apm-process-plugin/src/test/java/co/elastic/apm/agent/process/ProcessHelperTest.java index aa4a3ee3f3..ad6c06f4c0 100644 --- a/apm-agent-plugins/apm-process-plugin/src/test/java/co/elastic/apm/agent/process/ProcessHelperTest.java +++ b/apm-agent-plugins/apm-process-plugin/src/test/java/co/elastic/apm/agent/process/ProcessHelperTest.java @@ -20,11 +20,11 @@ import co.elastic.apm.agent.AbstractInstrumentationTest; import co.elastic.apm.agent.TransactionUtils; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import co.elastic.apm.agent.tracer.Outcome; import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; -import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -48,7 +48,7 @@ class ProcessHelperTest extends AbstractInstrumentationTest { private Transaction transaction; - private WeakMap storageMap; + private WeakMap> storageMap; private ProcessHelper helper; @BeforeEach @@ -85,7 +85,7 @@ void startTwiceShouldIgnore() { Process process = mock(Process.class); helper.doStartProcess(transaction, process, "hello"); - Span span = storageMap.get(process); + Span span = (Span) storageMap.get(process); helper.doStartProcess(transaction, process, "hello"); assertThat(storageMap.get(process)) diff --git a/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-1-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java b/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-1-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java index 24f212a52f..35cc23a87a 100644 --- a/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-1-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-1-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java @@ -20,6 +20,7 @@ import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -33,7 +34,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; public class Quartz1JobTransactionNameInstrumentation extends AbstractJobTransactionNameInstrumentation { - public Quartz1JobTransactionNameInstrumentation(ElasticApmTracer tracer) { + public Quartz1JobTransactionNameInstrumentation(Tracer tracer) { super(tracer); } diff --git a/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-2-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java b/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-2-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java index 703f2c5a95..37b3bf20cb 100644 --- a/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-2-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-quartz-job-plugin/apm-quartz-2-plugin/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.quartzjob; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -32,7 +32,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; public class Quartz2JobTransactionNameInstrumentation extends AbstractJobTransactionNameInstrumentation { - public Quartz2JobTransactionNameInstrumentation(ElasticApmTracer tracer) { + public Quartz2JobTransactionNameInstrumentation(Tracer tracer) { super(tracer); } diff --git a/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java b/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java index 3ed3558b70..4acc7e2bbd 100644 --- a/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java @@ -19,12 +19,12 @@ package co.elastic.apm.agent.quartzjob; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import co.elastic.apm.agent.util.VersionUtils; import net.bytebuddy.description.NamedElement; @@ -51,7 +51,7 @@ public abstract class AbstractJobTransactionNameInstrumentation extends TracerAw private final Collection applicationPackages; - protected AbstractJobTransactionNameInstrumentation(ElasticApmTracer tracer) { + protected AbstractJobTransactionNameInstrumentation(Tracer tracer) { applicationPackages = tracer.getConfig(StacktraceConfiguration.class).getApplicationPackages(); } @@ -73,9 +73,9 @@ static class BaseAdvice { private static final Logger logger = LoggerFactory.getLogger(BaseAdvice.class); @Nullable - protected static Transaction createAndActivateTransaction(@Nullable T jobExecutionContext, String signature, Class clazz, JobExecutionContextHandler helper) { - Transaction transaction = null; - AbstractSpan active = GlobalTracer.get().getActive(); + protected static Transaction createAndActivateTransaction(@Nullable T jobExecutionContext, String signature, Class clazz, JobExecutionContextHandler helper) { + Transaction transaction = null; + AbstractSpan active = tracer.getActive(); if (active == null) { String transactionName = null; if (jobExecutionContext != null) { @@ -98,7 +98,7 @@ protected static void endTransaction(@Nullable T jobExecutionContext, @Nullable Throwable t, JobExecutionContextHandler helper) { if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + Transaction transaction = (Transaction) transactionObj; if (jobExecutionContext != null) { Object result = helper.getResult(jobExecutionContext); if (result != null) { @@ -113,8 +113,8 @@ protected static void endTransaction(@Nullable T jobExecutionContext, } @Nullable - private static Transaction createAndActivateTransaction(Class originClass, String name) { - Transaction transaction = GlobalTracer.get().startRootTransaction(PrivilegedActionUtils.getClassLoader(originClass)); + private static Transaction createAndActivateTransaction(Class originClass, String name) { + Transaction transaction = GlobalTracer.get().startRootTransaction(PrivilegedActionUtils.getClassLoader(originClass)); if (transaction != null) { transaction.withName(name) .withType(AbstractJobTransactionNameInstrumentation.TRANSACTION_TYPE) diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/AbstractBaseInstrumentation.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/AbstractBaseInstrumentation.java index bc95d43195..8f18fb46b4 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/AbstractBaseInstrumentation.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/AbstractBaseInstrumentation.java @@ -21,10 +21,10 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.context.Message; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.common.util.WildcardMatcher; +import co.elastic.apm.agent.tracer.metadata.Message; import javax.annotation.Nullable; import java.util.Date; @@ -32,8 +32,8 @@ public abstract class AbstractBaseInstrumentation extends TracerAwareInstrumentation { - private static final CoreConfiguration coreConfiguration = GlobalTracer.requireTracerImpl().getConfig(CoreConfiguration.class); - private static final MessagingConfiguration messagingConfiguration = GlobalTracer.requireTracerImpl().getConfig(MessagingConfiguration.class); + private static final CoreConfiguration coreConfiguration = GlobalTracer.get().getConfig(CoreConfiguration.class); + private static final MessagingConfiguration messagingConfiguration = GlobalTracer.get().getConfig(MessagingConfiguration.class); /** * @param name name of the exchange or queue @@ -77,7 +77,7 @@ protected static long getTimestamp(@Nullable Date timestamp) { } protected static void captureHeaders(@Nullable Map headers, Message message) { - if (!isCaptureHeaders() || headers == null || headers.size() <= 0) { + if (!isCaptureHeaders() || headers == null || headers.isEmpty()) { return; } diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ChannelInstrumentation.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ChannelInstrumentation.java index 7d59af8ba0..35b904d28b 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ChannelInstrumentation.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ChannelInstrumentation.java @@ -18,9 +18,8 @@ */ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.TraceContext; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.rabbitmq.header.RabbitMQTextHeaderGetter; import co.elastic.apm.agent.rabbitmq.header.RabbitMQTextHeaderSetter; import co.elastic.apm.agent.sdk.DynamicTransformer; @@ -134,7 +133,7 @@ public static Object[] onBasicPublish(@Advice.This Channel channel, return null; } - Span exitSpan = RabbitMqHelper.createExitSpan(exchange); + Span exitSpan = RabbitMqHelper.createExitSpan(exchange); if (exitSpan == null) { // tracer disabled or ignored exchange or this is nested within another exit span return null; @@ -154,7 +153,7 @@ public static Object[] onBasicPublish(@Advice.This Channel channel, return new Object[]{properties, exitSpan}; } - private static AMQP.BasicProperties propagateTraceContext(Span exitSpan, + private static AMQP.BasicProperties propagateTraceContext(Span exitSpan, @Nullable AMQP.BasicProperties originalBasicProperties) { AMQP.BasicProperties properties = originalBasicProperties; if (properties == null) { @@ -177,7 +176,7 @@ private static AMQP.BasicProperties propagateTraceContext(Span exitSpan, public static void afterBasicPublish(@Advice.Enter @Nullable Object[] enterArray, @Advice.Thrown @Nullable Throwable throwable) { if (enterArray != null && enterArray.length >= 2 && enterArray[1] != null) { - Span span = (Span) enterArray[1]; + Span span = (Span) enterArray[1]; span.captureException(throwable) .deactivate() .end(); @@ -219,10 +218,10 @@ public static void onExit(@Advice.This Channel channel, @Advice.Return @Nullable GetResponse rv, @Advice.Thrown @Nullable Throwable thrown) { - if (!(objSpan instanceof Span)) { + if (!(objSpan instanceof Span)) { return; } - Span span = (Span) objSpan; + Span span = (Span) objSpan; if (isIgnored(queue)) { // allow to ignore on queue name when there is no answer @@ -254,10 +253,7 @@ public static void onExit(@Advice.This Channel channel, RabbitMqHelper.captureDestination(exchange, connection.getAddress(), connection.getPort(), span); if (properties != null) { - span.addSpanLink( - TraceContext.getFromTraceContextTextHeaders(), - RabbitMQTextHeaderGetter.INSTANCE, - properties); + span.addLink(RabbitMQTextHeaderGetter.INSTANCE, properties); } span.captureException(thrown) @@ -275,12 +271,12 @@ public static class RabbitMqHelper { * @return exit span if applicable, {@literal null} otherwise */ @Nullable - public static Span createExitSpan(@Nullable String exchangeOrQueue) { + public static Span createExitSpan(@Nullable String exchangeOrQueue) { AbstractSpan context = tracer.getActive(); if (exchangeOrQueue == null || context == null || isIgnored(exchangeOrQueue)) { return null; } - Span exitSpan = context.createExitSpan(); + Span exitSpan = context.createExitSpan(); if (exitSpan == null) { return null; } @@ -298,7 +294,7 @@ public static Span createExitSpan(@Nullable String exchangeOrQueue) { * @param port broker port * @param span span */ - public static void captureDestination(String exchange, InetAddress brokerAddress, int port, Span span) { + public static void captureDestination(String exchange, InetAddress brokerAddress, int port, Span span) { span.getContext().getDestination() .withInetAddress(brokerAddress) .withPort(port); diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ConsumerInstrumentation.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ConsumerInstrumentation.java index daf7649038..a75b6f8332 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ConsumerInstrumentation.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/main/java/co/elastic/apm/agent/rabbitmq/ConsumerInstrumentation.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.context.Message; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.rabbitmq.header.RabbitMQTextHeaderGetter; +import co.elastic.apm.agent.tracer.metadata.Message; import co.elastic.apm.agent.util.PrivilegedActionUtils; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Consumer; @@ -96,7 +96,7 @@ public static Object onHandleDelivery(@Advice.Origin Class originClazz, return null; } - Transaction transaction = tracer.currentTransaction(); + Transaction transaction = tracer.currentTransaction(); if (transaction != null) { return null; } @@ -122,8 +122,8 @@ public static Object onHandleDelivery(@Advice.Origin Class originClazz, @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class, inline = false) public static void afterHandleDelivery(@Advice.Enter @Nullable final Object transactionObject, @Advice.Thrown @Nullable final Throwable throwable) { - if (transactionObject instanceof Transaction) { - Transaction transaction = (Transaction) transactionObject; + if (transactionObject instanceof Transaction) { + Transaction transaction = (Transaction) transactionObject; transaction.captureException(throwable) .deactivate() .end(); diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java index 80054e29f7..4404fa57af 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.Tracer; import org.springframework.amqp.core.Message; import java.util.List; @@ -29,10 +29,10 @@ public class MessageBatchHelper { public static final Logger logger = LoggerFactory.getLogger(MessageBatchHelper.class); - private final ElasticApmTracer tracer; + private final Tracer tracer; private final SpringAmqpTransactionHelper transactionHelper; - public MessageBatchHelper(ElasticApmTracer tracer, SpringAmqpTransactionHelper transactionHelper) { + public MessageBatchHelper(Tracer tracer, SpringAmqpTransactionHelper transactionHelper) { this.tracer = tracer; this.transactionHelper = transactionHelper; } diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java index 7a5c47e311..c7486c6e56 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java @@ -19,12 +19,11 @@ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.amqp.core.Message; -import org.springframework.amqp.core.MessageProperties; import java.util.Iterator; @@ -33,10 +32,10 @@ public class MessageBatchIteratorWrapper implements Iterator { public static final Logger logger = LoggerFactory.getLogger(MessageBatchIteratorWrapper.class); private final Iterator delegate; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final SpringAmqpTransactionHelper transactionHelper; - public MessageBatchIteratorWrapper(Iterator delegate, ElasticApmTracer tracer, SpringAmqpTransactionHelper transactionHelper) { + public MessageBatchIteratorWrapper(Iterator delegate, Tracer tracer, SpringAmqpTransactionHelper transactionHelper) { this.delegate = delegate; this.tracer = tracer; this.transactionHelper = transactionHelper; @@ -50,7 +49,7 @@ public boolean hasNext() { public void endCurrentTransaction() { try { - Transaction transaction = tracer.currentTransaction(); + Transaction transaction = tracer.currentTransaction(); if (transaction != null && "messaging".equals(transaction.getType())) { transaction.deactivate().end(); } diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchListWrapper.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchListWrapper.java index 836e7d88fe..5424f9c862 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchListWrapper.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchListWrapper.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.Tracer; import org.springframework.amqp.core.Message; import java.util.Collection; @@ -30,10 +30,10 @@ public class MessageBatchListWrapper implements List { private final List delegate; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final SpringAmqpTransactionHelper transactionHelper; - public MessageBatchListWrapper(List delegate, ElasticApmTracer tracer, SpringAmqpTransactionHelper transactionHelper) { + public MessageBatchListWrapper(List delegate, Tracer tracer, SpringAmqpTransactionHelper transactionHelper) { this.delegate = delegate; this.tracer = tracer; this.transactionHelper = transactionHelper; diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpBatchMessageListenerInstrumentation.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpBatchMessageListenerInstrumentation.java index f1c70e981d..71b4ce5189 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpBatchMessageListenerInstrumentation.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpBatchMessageListenerInstrumentation.java @@ -20,11 +20,10 @@ import co.elastic.apm.agent.configuration.MessagingConfiguration; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.TraceContext; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.rabbitmq.header.SpringRabbitMQTextHeaderGetter; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -63,9 +62,9 @@ public static class MessageListenerContainerWrappingAdvice extends BaseAdvice { private static final MessagingConfiguration messagingConfiguration; static { - ElasticApmTracer elasticApmTracer = GlobalTracer.requireTracerImpl(); - messageBatchHelper = new MessageBatchHelper(elasticApmTracer, transactionHelper); - messagingConfiguration = elasticApmTracer.getConfig(MessagingConfiguration.class); + Tracer tracer = GlobalTracer.get(); + messageBatchHelper = new MessageBatchHelper(tracer, transactionHelper); + messagingConfiguration = tracer.getConfig(MessagingConfiguration.class); oneTimeTransactionCreationWarningLogger = LoggerUtils.logOnce(LoggerFactory.getLogger("Spring-AMQP-Batch-Logger")); } @@ -75,7 +74,7 @@ public static Object[] beforeOnBatch(@Advice.This Object thiz, @Advice.Argument(0) @Nullable final List messageBatch) { List processedBatch = messageBatch; - Transaction batchTransaction = null; + Transaction batchTransaction = null; if (tracer.isRunning() && messageBatch != null && !messageBatch.isEmpty()) { AbstractSpan active = tracer.getActive(); @@ -98,11 +97,7 @@ public static Object[] beforeOnBatch(@Advice.This Object thiz, for (Message message : messageBatch) { MessageProperties messageProperties = message.getMessageProperties(); if (messageProperties != null) { - active.addSpanLink( - TraceContext.getFromTraceContextTextHeaders(), - SpringRabbitMQTextHeaderGetter.INSTANCE, - messageProperties - ); + active.addLink(SpringRabbitMQTextHeaderGetter.INSTANCE, messageProperties); } } } else { @@ -115,7 +110,7 @@ public static Object[] beforeOnBatch(@Advice.This Object thiz, @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void afterOnBatch(@Advice.Enter @Nullable Object[] enter, @Advice.Thrown @Nullable Throwable throwable) { - Transaction batchTransaction = enter != null ? (Transaction) enter[1] : null; + Transaction batchTransaction = enter != null ? (Transaction) enter[1] : null; if (batchTransaction != null) { try { batchTransaction diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpMessageListenerInstrumentation.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpMessageListenerInstrumentation.java index db1264012b..eeb51985bc 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpMessageListenerInstrumentation.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpMessageListenerInstrumentation.java @@ -18,14 +18,13 @@ */ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; -import org.springframework.amqp.core.MessageProperties; import javax.annotation.Nullable; @@ -76,8 +75,8 @@ public static Object beforeMessageHandle(@Advice.This MessageListener listener, @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class, inline = false) public static void afterMessageHandle(@Advice.Enter @Nullable final Object transactionObject, @Advice.Thrown @Nullable final Throwable throwable) { - if (transactionObject instanceof Transaction) { - Transaction transaction = (Transaction) transactionObject; + if (transactionObject instanceof Transaction) { + Transaction transaction = (Transaction) transactionObject; transaction.captureException(throwable) .deactivate() .end(); diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpTransactionHelper.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpTransactionHelper.java index 078c77cfd9..cabe65c554 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpTransactionHelper.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringAmqpTransactionHelper.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.rabbitmq.header.SpringRabbitMQTextHeaderGetter; import co.elastic.apm.agent.util.PrivilegedActionUtils; import org.springframework.amqp.core.Message; @@ -29,14 +29,14 @@ public class SpringAmqpTransactionHelper { - private final ElasticApmTracer tracer; + private final Tracer tracer; - public SpringAmqpTransactionHelper(ElasticApmTracer tracer) { + public SpringAmqpTransactionHelper(Tracer tracer) { this.tracer = tracer; } @Nullable - public Transaction createTransaction(Message message, String transactionNamePrefix) { + public Transaction createTransaction(Message message, String transactionNamePrefix) { String exchange = null; MessageProperties messageProperties = message.getMessageProperties(); if (messageProperties != null) { @@ -46,7 +46,7 @@ public Transaction createTransaction(Message message, String transactionNamePref return null; } - Transaction transaction = tracer.currentTransaction(); + Transaction transaction = tracer.currentTransaction(); if (transaction != null) { return null; } diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringBaseInstrumentation.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringBaseInstrumentation.java index 3c41e033aa..f49e7e87b8 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringBaseInstrumentation.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/SpringBaseInstrumentation.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -55,8 +55,8 @@ static class BaseAdvice { protected static final SpringAmqpTransactionHelper transactionHelper; static { - ElasticApmTracer elasticApmTracer = GlobalTracer.requireTracerImpl(); - transactionHelper = new SpringAmqpTransactionHelper(elasticApmTracer); + Tracer tracer = GlobalTracer.get(); + transactionHelper = new SpringAmqpTransactionHelper(tracer); } } } diff --git a/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java b/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java index c0d7a8771a..3b6b64b505 100644 --- a/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java +++ b/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java @@ -19,13 +19,13 @@ package co.elastic.apm.agent.reactor; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.sdk.state.GlobalVariables; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.tracer.Tracer; import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; diff --git a/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4SendCommandAdvice.java b/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4SendCommandAdvice.java index 5d5ec009da..2afb8ea610 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4SendCommandAdvice.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4SendCommandAdvice.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.jedis; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; import net.bytebuddy.asm.Advice; import redis.clients.jedis.CommandArguments; @@ -40,7 +40,7 @@ public static Object sendCommandEntry(@Advice.Argument(0) CommandArguments comma public static void sendCommandExit(@Advice.FieldValue("socketFactory") JedisSocketFactory socketFactory, @Nullable @Advice.Enter Object spanObj, @Nullable @Advice.Thrown Throwable thrown) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { if (socketFactory instanceof DefaultJedisSocketFactory) { HostAndPort hostAndPort = ((DefaultJedisSocketFactory) socketFactory).getHostAndPort(); diff --git a/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/SendCommandAdvice.java b/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/SendCommandAdvice.java index 3fd171d4d5..21aef01c06 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/SendCommandAdvice.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/SendCommandAdvice.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.jedis; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.implementation.bytecode.assign.Assigner; @@ -39,7 +39,7 @@ public static Object sendCommandEntry(@Advice.Argument(0) Object command) { public static void sendCommandExit(@Advice.This(typing = Assigner.Typing.DYNAMIC) Connection thiz, @Nullable @Advice.Enter Object spanObj, @Nullable @Advice.Thrown Throwable thrown) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { span.getContext().getDestination() .withAddress(thiz.getHost()) diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java index 706da4bc46..8dbe9a99e0 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import com.lambdaworks.redis.protocol.RedisCommand; import net.bytebuddy.matcher.ElementMatcher; @@ -32,7 +32,7 @@ public abstract class Lettuce34Instrumentation extends TracerAwareInstrumentation { - static final WeakMap, Span> commandToSpan = WeakConcurrentProviderImpl.createWeakSpanMap(); + static final WeakMap, Span> commandToSpan = WeakConcurrentProviderImpl.createWeakSpanMap(); /** * We don't support Lettuce up to version 3.3, as the {@link RedisCommand#getType()} method is missing diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StartSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StartSpanInstrumentation.java index 6e54c4de85..e1c3e7832d 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StartSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StartSpanInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.lettuce; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; import com.lambdaworks.redis.protocol.RedisCommand; import net.bytebuddy.asm.Advice; @@ -57,7 +57,7 @@ public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object beforeDispatch(@Nullable @Advice.Argument(0) RedisCommand command) { if (command != null) { - Span span = RedisSpanUtils.createRedisSpan(command.getType().toString()); + Span span = RedisSpanUtils.createRedisSpan(command.getType().toString()); if (span != null) { commandToSpan.put(command, span); return span; @@ -68,7 +68,7 @@ public static Object beforeDispatch(@Nullable @Advice.Argument(0) RedisCommand span = (Span) spanObj; if (span != null) { span.deactivate(); } diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java index ddd989a354..f4cd376b42 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.lettuce; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import com.lambdaworks.redis.protocol.RedisCommand; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -72,7 +72,7 @@ public static class OnComplete extends Lettuce34StopSpanInstrumentation { public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void beforeComplete(@Advice.This RedisCommand command) { - Span span = commandToSpan.remove(command); + Span span = commandToSpan.remove(command); if (span != null) { logger.debug("Command#complete"); span.end(); @@ -91,7 +91,7 @@ public static class OnCompleteExceptionally extends Lettuce34StopSpanInstrumenta public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void beforeComplete(@Advice.This RedisCommand command, @Advice.Argument(0) Throwable throwable) { - Span span = commandToSpan.remove(command); + Span span = commandToSpan.remove(command); if (span != null) { logger.debug("Command#completeExceptionally"); span.captureException(throwable).end(); @@ -110,7 +110,7 @@ public static class OnCancel extends Lettuce34StopSpanInstrumentation { public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void beforeComplete(@Advice.This RedisCommand command) { - Span span = commandToSpan.remove(command); + Span span = commandToSpan.remove(command); if (span != null) { logger.debug("Command#cancel"); span.end(); diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java index ad23a44fdc..6a32641b89 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import io.lettuce.core.protocol.RedisCommand; @@ -71,7 +71,7 @@ public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object beforeDispatch(@Nullable @Advice.Argument(0) RedisCommand command) { if (command != null) { - Span span = RedisSpanUtils.createRedisSpan(command.getType().name()); + Span span = RedisSpanUtils.createRedisSpan(command.getType().name()); if (span != null) { commandToSpan.put(command, span); return span; @@ -82,7 +82,7 @@ public static Object beforeDispatch(@Nullable @Advice.Argument(0) RedisCommand span = (Span) spanObj; if (span != null) { span.deactivate(); } diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java index e2a49eb10c..8d21f39a25 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.lettuce; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import io.lettuce.core.protocol.RedisCommand; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -72,7 +72,7 @@ public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void beforeComplete(@Advice.This RedisCommand command) { if (!command.isDone() && !command.isCancelled()) { - Span span = Lettuce5StartSpanInstrumentation.commandToSpan.remove(command); + Span span = Lettuce5StartSpanInstrumentation.commandToSpan.remove(command); if (span != null) { logger.debug("Command#complete"); span.end(); @@ -93,7 +93,7 @@ public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void beforeComplete(@Advice.This RedisCommand command, @Advice.Argument(0) Throwable throwable) { if (!command.isDone() && !command.isCancelled()) { - Span span = Lettuce5StartSpanInstrumentation.commandToSpan.remove(command); + Span span = Lettuce5StartSpanInstrumentation.commandToSpan.remove(command); if (span != null) { logger.debug("Command#completeExceptionally"); span.captureException(throwable).end(); @@ -114,7 +114,7 @@ public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void beforeComplete(@Advice.This RedisCommand command) { if (!command.isDone() && !command.isCancelled()) { - Span span = commandToSpan.remove(command); + Span span = commandToSpan.remove(command); if (span != null) { logger.debug("Command#cancel"); span.end(); diff --git a/apm-agent-plugins/apm-redis-plugin/apm-redis-common/src/main/java/co/elastic/apm/agent/redis/RedisSpanUtils.java b/apm-agent-plugins/apm-redis-plugin/apm-redis-common/src/main/java/co/elastic/apm/agent/redis/RedisSpanUtils.java index a6ad14f360..a24bc5a362 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-redis-common/src/main/java/co/elastic/apm/agent/redis/RedisSpanUtils.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-redis-common/src/main/java/co/elastic/apm/agent/redis/RedisSpanUtils.java @@ -18,21 +18,21 @@ */ package co.elastic.apm.agent.redis; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import javax.annotation.Nullable; public class RedisSpanUtils { @Nullable - public static Span createRedisSpan(String command) { + public static Span createRedisSpan(String command) { AbstractSpan activeSpan = GlobalTracer.get().getActive(); if (activeSpan == null) { return null; } - Span span = activeSpan.createExitSpan(); + Span span = activeSpan.createExitSpan(); if (span == null) { return null; } diff --git a/apm-agent-plugins/apm-redis-plugin/apm-redisson-plugin/src/main/java/co/elastic/apm/agent/redisson/RedisConnectionInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-redisson-plugin/src/main/java/co/elastic/apm/agent/redisson/RedisConnectionInstrumentation.java index fe0575e7ff..f5d8a9eb67 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-redisson-plugin/src/main/java/co/elastic/apm/agent/redisson/RedisConnectionInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-redisson-plugin/src/main/java/co/elastic/apm/agent/redisson/RedisConnectionInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.redisson; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; import io.netty.channel.Channel; import net.bytebuddy.asm.Advice; @@ -47,7 +47,7 @@ public static class AdviceClass { @Advice.OnMethodEnter(inline = false) public static Object beforeSend(@Advice.This RedisConnection connection, @Advice.Argument(0) Object args) { - Span span = RedisSpanUtils.createRedisSpan(""); + Span span = RedisSpanUtils.createRedisSpan(""); if (span != null) { // get command if (args instanceof CommandsData) { @@ -72,7 +72,7 @@ public static Object beforeSend(@Advice.This RedisConnection connection, @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class, inline = false) public static void afterSend(@Nullable @Advice.Enter Object spanObj, @Nullable @Advice.Thrown Throwable thrown) { - Span span = (Span) spanObj; + Span span = (Span) spanObj; if (span != null) { span.captureException(thrown) .deactivate() diff --git a/apm-agent-plugins/apm-scala-concurrent-plugin/src/main/java/co/elastic/apm/agent/scalaconcurrent/FutureInstrumentation.java b/apm-agent-plugins/apm-scala-concurrent-plugin/src/main/java/co/elastic/apm/agent/scalaconcurrent/FutureInstrumentation.java index 2e4660a040..5fa4cd7bc5 100644 --- a/apm-agent-plugins/apm-scala-concurrent-plugin/src/main/java/co/elastic/apm/agent/scalaconcurrent/FutureInstrumentation.java +++ b/apm-agent-plugins/apm-scala-concurrent-plugin/src/main/java/co/elastic/apm/agent/scalaconcurrent/FutureInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; diff --git a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java index dfba2dd3bc..bfecd7640e 100644 --- a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java @@ -20,11 +20,11 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; -import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -52,7 +52,7 @@ public class ScheduledTransactionNameInstrumentation extends TracerAwareInstrume private final Collection applicationPackages; - public ScheduledTransactionNameInstrumentation(ElasticApmTracer tracer) { + public ScheduledTransactionNameInstrumentation(Tracer tracer) { applicationPackages = tracer.getConfig(StacktraceConfiguration.class).getApplicationPackages(); } @@ -63,7 +63,7 @@ public static Object setTransactionName(@SimpleMethodSignature String signature, @Advice.Origin Class clazz) { AbstractSpan active = tracer.getActive(); if (active == null) { - Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); + Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); if (transaction != null) { transaction.withName(signature) .withType("scheduled") @@ -79,8 +79,8 @@ public static Object setTransactionName(@SimpleMethodSignature String signature, @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onMethodExit(@Advice.Enter @Nullable Object transactionObj, @Advice.Thrown @Nullable Throwable t) { - if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + if (transactionObj instanceof Transaction) { + Transaction transaction = (Transaction) transactionObj; transaction.captureException(t) .withOutcome(t != null ? Outcome.FAILURE : Outcome.SUCCESS) .deactivate() diff --git a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java index 5435b521fa..2d98ea146a 100644 --- a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java +++ b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java @@ -20,10 +20,10 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; -import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -51,7 +51,7 @@ public class TimerTaskInstrumentation extends TracerAwareInstrumentation { private final Collection applicationPackages; - public TimerTaskInstrumentation(ElasticApmTracer tracer) { + public TimerTaskInstrumentation(Tracer tracer) { applicationPackages = tracer.getConfig(StacktraceConfiguration.class).getApplicationPackages(); } @@ -62,7 +62,7 @@ public static Object setTransactionName(@SimpleMethodSignatureOffsetMappingFacto @Advice.Origin Class clazz) { AbstractSpan active = tracer.getActive(); if (active == null) { - Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); + Transaction transaction = tracer.startRootTransaction(PrivilegedActionUtils.getClassLoader(clazz)); if (transaction != null) { transaction.withName(signature) .withType("scheduled") @@ -79,8 +79,8 @@ public static Object setTransactionName(@SimpleMethodSignatureOffsetMappingFacto @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void onMethodExit(@Advice.Enter @Nullable Object transactionObj, @Advice.Thrown Throwable t) { - if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + if (transactionObj instanceof Transaction) { + Transaction transaction = (Transaction) transactionObj; transaction.captureException(t) .deactivate() .end(); diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaAsyncInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaAsyncInstrumentation.java index f7d3aba243..2723234dcc 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaAsyncInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.servlet.helper.AsyncContextAdviceHelper; import co.elastic.apm.agent.servlet.helper.JakartaAsyncContextAdviceHelper; import jakarta.servlet.AsyncContext; @@ -50,7 +50,7 @@ public String getAdviceClassName() { } public static class JakartaStartAsyncAdvice { - private static final AsyncContextAdviceHelper asyncHelper = new JakartaAsyncContextAdviceHelper(GlobalTracer.requireTracerImpl()); + private static final AsyncContextAdviceHelper asyncHelper = new JakartaAsyncContextAdviceHelper(GlobalTracer.get()); @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExitStartAsync(@Advice.Return @Nullable AsyncContext asyncContext) { diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaRequestStreamRecordingInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaRequestStreamRecordingInstrumentation.java index 4eab1884f8..8b8ee400c9 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaRequestStreamRecordingInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JakartaRequestStreamRecordingInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.state.CallDepth; import co.elastic.apm.agent.servlet.helper.JakartaRecordingServletInputStreamWrapper; import jakarta.servlet.ServletInputStream; @@ -54,7 +54,7 @@ public static ServletInputStream afterGetInputStream(@Advice.Return @Nullable Se if (callDepth.isNestedCallAndDecrement() || inputStream == null) { return inputStream; } - final Transaction transaction = tracer.currentTransaction(); + final Transaction transaction = tracer.currentTransaction(); // only wrap if the body buffer has been initialized via ServletTransactionHelper.startCaptureBody if (transaction != null && transaction.getContext().getRequest().getBodyBuffer() != null) { return new JakartaRecordingServletInputStreamWrapper(transaction.getContext().getRequest(), inputStream); diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxAsyncInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxAsyncInstrumentation.java index dfe2c4cf9d..ff64011e62 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxAsyncInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.servlet.helper.AsyncContextAdviceHelper; import co.elastic.apm.agent.servlet.helper.JavaxAsyncContextAdviceHelper; import javax.servlet.ServletRequest; @@ -51,7 +51,7 @@ public String getAdviceClassName() { } public static class StartAsyncAdvice { - private static final AsyncContextAdviceHelper asyncHelper = new JavaxAsyncContextAdviceHelper(GlobalTracer.requireTracerImpl());; + private static final AsyncContextAdviceHelper asyncHelper = new JavaxAsyncContextAdviceHelper(GlobalTracer.get()); @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExitStartAsync(@Advice.Return @Nullable AsyncContext asyncContext) { diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxRequestStreamRecordingInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxRequestStreamRecordingInstrumentation.java index 2b85480420..3e2c44748c 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxRequestStreamRecordingInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/JavaxRequestStreamRecordingInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.state.CallDepth; import co.elastic.apm.agent.servlet.helper.JavaxRecordingServletInputStreamWrapper; import net.bytebuddy.asm.Advice; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletApiAdvice.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletApiAdvice.java index 9938d64624..468055c225 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletApiAdvice.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletApiAdvice.java @@ -20,17 +20,18 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.context.Request; -import co.elastic.apm.agent.impl.context.Response; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.state.GlobalVariables; import co.elastic.apm.agent.sdk.weakconcurrent.DetachedThreadLocal; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.servlet.adapter.ServletApiAdapter; +import co.elastic.apm.agent.tracer.metadata.Request; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.util.TransactionNameUtils; import co.elastic.apm.agent.tracer.Scope; @@ -48,7 +49,7 @@ public abstract class ServletApiAdvice { private static final String FRAMEWORK_NAME = "Servlet API"; static final String SPAN_TYPE = "servlet"; static final String SPAN_SUBTYPE = "request-dispatcher"; - private static final ServletTransactionHelper servletTransactionHelper = new ServletTransactionHelper(GlobalTracer.requireTracerImpl()); + private static final ServletTransactionHelper servletTransactionHelper = new ServletTransactionHelper(GlobalTracer.get()); private static final DetachedThreadLocal excluded = GlobalVariables.get(ServletApiAdvice.class, "excluded", WeakConcurrent.buildThreadLocal()); private static final DetachedThreadLocal servletPathTL = GlobalVariables.get(ServletApiAdvice.class, "servletPath", WeakConcurrent.buildThreadLocal()); @@ -61,7 +62,7 @@ public static adapter, Object servletRequest) { - ElasticApmTracer tracer = GlobalTracer.getTracerImpl(); + Tracer tracer = GlobalTracer.get().require(Tracer.class); if (tracer == null) { return null; } @@ -72,7 +73,7 @@ public static ret = null; // re-activate transactions for async requests - final Transaction transactionAttr = (Transaction) adapter.getAttribute(httpServletRequest, TRANSACTION_ATTRIBUTE); + final Transaction transactionAttr = (Transaction) adapter.getAttribute(httpServletRequest, TRANSACTION_ATTRIBUTE); if (tracer.currentTransaction() == null && transactionAttr != null) { return transactionAttr.activateInScope(); } @@ -90,7 +91,7 @@ public static transaction = servletTransactionHelper.createAndActivateTransaction(adapter, adapter, httpServletRequest); if (transaction == null) { // if the httpServletRequest is excluded, avoid matching all exclude patterns again on each filter invocation @@ -166,19 +167,17 @@ public static transaction = null; Scope scope = null; - Span span = null; - if (transactionOrScopeOrSpan instanceof Transaction) { - transaction = (Transaction) transactionOrScopeOrSpan; + Span span = null; + if (transactionOrScopeOrSpan instanceof Transaction) { + transaction = (Transaction) transactionOrScopeOrSpan; } else if (transactionOrScopeOrSpan instanceof Scope) { scope = (Scope) transactionOrScopeOrSpan; - } else if (transactionOrScopeOrSpan instanceof Span) { - span = (Span) transactionOrScopeOrSpan; + } else if (transactionOrScopeOrSpan instanceof Span) { + span = (Span) transactionOrScopeOrSpan; } excluded.remove(); @@ -188,7 +187,7 @@ public static currentTransaction = tracer.currentTransaction(); if (currentTransaction != null) { TransactionNameUtils.setTransactionNameByServletClass(adapter.getMethod(httpServletRequest), thiz.getClass(), currentTransaction.getAndOverrideName(PRIO_LOW_LEVEL_FRAMEWORK)); diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletServiceNameHelper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletServiceNameHelper.java index 463ec832cb..b507bb5aa9 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletServiceNameHelper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletServiceNameHelper.java @@ -19,13 +19,14 @@ package co.elastic.apm.agent.servlet; import co.elastic.apm.agent.configuration.ServiceInfo; -import co.elastic.apm.agent.impl.Tracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.sdk.state.GlobalState; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import co.elastic.apm.agent.servlet.adapter.ServletContextAdapter; +import co.elastic.apm.agent.tracer.Tracer; import javax.annotation.Nullable; import java.io.InputStream; @@ -43,6 +44,11 @@ public static void determineServiceName(ServletContextAdapter void determineServiceName(ServletContextAdapter ServiceInfo detectServiceInfo(ServletContextAdapter adapter, ServletContext servletContext, ClassLoader servletContextClassLoader) { diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java index bda3f6e7fd..fe2e40010b 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java @@ -20,18 +20,18 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.httpserver.HttpServerHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.context.Request; -import co.elastic.apm.agent.impl.context.Response; -import co.elastic.apm.agent.impl.context.TransactionContext; import co.elastic.apm.agent.impl.context.web.ResultUtil; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.servlet.adapter.ServletContextAdapter; import co.elastic.apm.agent.servlet.adapter.ServletRequestAdapter; +import co.elastic.apm.agent.tracer.TransactionContext; +import co.elastic.apm.agent.tracer.metadata.Request; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.util.TransactionNameUtils; import javax.annotation.Nullable; @@ -60,10 +60,10 @@ public class ServletTransactionHelper { private final Set METHODS_WITH_BODY = new HashSet<>(Arrays.asList("POST", "PUT", "PATCH", "DELETE")); private final CoreConfiguration coreConfiguration; private final WebConfiguration webConfiguration; - private final ElasticApmTracer tracer; + private final Tracer tracer; private final HttpServerHelper serverHelper; - public ServletTransactionHelper(ElasticApmTracer tracer) { + public ServletTransactionHelper(Tracer tracer) { this.coreConfiguration = tracer.getConfig(CoreConfiguration.class); this.webConfiguration = tracer.getConfig(WebConfiguration.class); this.tracer = tracer; @@ -71,7 +71,7 @@ public ServletTransactionHelper(ElasticApmTracer tracer) { } @Nullable - public Transaction createAndActivateTransaction( + public Transaction createAndActivateTransaction( ServletRequestAdapter requestAdapter, ServletContextAdapter contextAdapter, HttpServletRequest request) { @@ -83,14 +83,14 @@ public Transaction createAndActivateTransac return null; } ClassLoader cl = contextAdapter.getClassLoader(requestAdapter.getServletContext(request)); - Transaction transaction = tracer.startChildTransaction(request, requestAdapter.getRequestHeaderGetter(), cl); + Transaction transaction = tracer.startChildTransaction(request, requestAdapter.getRequestHeaderGetter(), cl); if (transaction != null) { transaction.activate(); } return transaction; } - public void fillRequestContext(Transaction transaction, String protocol, String method, boolean secure, + public void fillRequestContext(Transaction transaction, String protocol, String method, boolean secure, String scheme, String serverName, int serverPort, String requestURI, String queryString, String remoteAddr, @Nullable String contentTypeHeader) { @@ -114,7 +114,7 @@ public void fillRequestContext(Transaction transaction, String protocol, String } - private void startCaptureBody(Transaction transaction, String method, @Nullable String contentTypeHeader) { + private void startCaptureBody(Transaction transaction, String method, @Nullable String contentTypeHeader) { Request request = transaction.getContext().getRequest(); if (hasBody(contentTypeHeader, method)) { if (coreConfiguration.getCaptureBody() != OFF @@ -223,7 +223,7 @@ public String normalizeServletPath(String requestURI, @Nullable String contextPa return path; } - public void onAfter(Transaction transaction, @Nullable Throwable exception, boolean committed, int status, + public void onAfter(Transaction transaction, @Nullable Throwable exception, boolean committed, int status, boolean overrideStatusCodeOnThrowable, String method, @Nullable Map parameterMap, @Nullable String servletPath, @Nullable String pathInfo, @Nullable String contentTypeHeader, boolean deactivate) { try { @@ -244,7 +244,7 @@ public void onAfter(Transaction transaction, @Nullable Throwable exception, bool transaction.end(); } - private void doOnAfter(Transaction transaction, @Nullable Throwable exception, boolean committed, int status, + private void doOnAfter(Transaction transaction, @Nullable Throwable exception, boolean committed, int status, boolean overrideStatusCodeOnThrowable, String method, @Nullable Map parameterMap, String servletPath, @Nullable String pathInfo, @Nullable String contentTypeHeader) { fillRequestParameters(transaction, method, parameterMap, contentTypeHeader); @@ -259,7 +259,7 @@ private void doOnAfter(Transaction transaction, @Nullable Throwable exception, b applyDefaultTransactionName(method, servletPath, pathInfo, transaction); } - void applyDefaultTransactionName(String method, String servletPath, @Nullable String pathInfo, Transaction transaction) { + void applyDefaultTransactionName(String method, String servletPath, @Nullable String pathInfo, Transaction transaction) { // JSPs don't contain path params and the name is more telling than the generated servlet class if (webConfiguration.isUsePathAsName() || ENDS_WITH_JSP.matches(servletPath, pathInfo)) { // should override ServletName#doGet @@ -276,7 +276,7 @@ void applyDefaultTransactionName(String method, String servletPath, @Nullable St * for example when the amount of query parameters is longer than the application server allows. * In that case, we rather not want that the agent looks like the cause for this. */ - private void fillRequestParameters(Transaction transaction, String method, @Nullable Map parameterMap, @Nullable String contentTypeHeader) { + private void fillRequestParameters(Transaction transaction, String method, @Nullable Map parameterMap, @Nullable String contentTypeHeader) { Request request = transaction.getContext().getRequest(); if (hasBody(contentTypeHeader, method)) { if (coreConfiguration.getCaptureBody() != OFF && parameterMap != null) { diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JakartaServletApiAdapter.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JakartaServletApiAdapter.java index 64c4aab47f..60670de1d6 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JakartaServletApiAdapter.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JakartaServletApiAdapter.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.servlet.adapter; -import co.elastic.apm.agent.impl.context.Request; import co.elastic.apm.agent.servlet.helper.JakartaServletRequestHeaderGetter; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; +import co.elastic.apm.agent.tracer.metadata.Request; import jakarta.servlet.DispatcherType; import jakarta.servlet.FilterConfig; import jakarta.servlet.RequestDispatcher; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JavaxServletApiAdapter.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JavaxServletApiAdapter.java index 4911660b2f..2f020788a0 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JavaxServletApiAdapter.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/JavaxServletApiAdapter.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.servlet.adapter; -import co.elastic.apm.agent.impl.context.Request; import co.elastic.apm.agent.servlet.helper.JavaxServletRequestHeaderGetter; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; +import co.elastic.apm.agent.tracer.metadata.Request; import javax.annotation.Nullable; import javax.servlet.DispatcherType; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/ServletRequestAdapter.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/ServletRequestAdapter.java index 5a4b3040ec..ca1470e7a6 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/ServletRequestAdapter.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/adapter/ServletRequestAdapter.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.servlet.adapter; -import co.elastic.apm.agent.impl.context.Request; import co.elastic.apm.agent.sdk.state.GlobalState; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; +import co.elastic.apm.agent.tracer.metadata.Request; import javax.annotation.Nullable; import java.security.Principal; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaApmAsyncListener.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaApmAsyncListener.java index 2e0947ba2e..41996f1c26 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaApmAsyncListener.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaApmAsyncListener.java @@ -18,12 +18,12 @@ */ package co.elastic.apm.agent.servlet.helper; -import co.elastic.apm.agent.impl.context.Response; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.servlet.ServletTransactionHelper; import javax.annotation.Nullable; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.tracer.pooling.Recyclable; import jakarta.servlet.AsyncContext; import jakarta.servlet.AsyncEvent; @@ -58,7 +58,7 @@ public class JakartaApmAsyncListener implements AsyncListener, Recyclable { private final JakartaAsyncContextAdviceHelper asyncContextAdviceHelperImpl; private final ServletTransactionHelper servletTransactionHelper; @Nullable - private volatile Transaction transaction; + private volatile Transaction transaction; @Nullable private volatile Throwable throwable; @@ -67,7 +67,7 @@ public class JakartaApmAsyncListener implements AsyncListener, Recyclable { this.servletTransactionHelper = asyncContextAdviceHelperImpl.getServletTransactionHelper(); } - JakartaApmAsyncListener withTransaction(Transaction transaction) { + JakartaApmAsyncListener withTransaction(Transaction transaction) { this.transaction = transaction; return this; } diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaAsyncContextAdviceHelper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaAsyncContextAdviceHelper.java index 7b3d07ab31..28efcfa191 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaAsyncContextAdviceHelper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaAsyncContextAdviceHelper.java @@ -18,12 +18,11 @@ */ package co.elastic.apm.agent.servlet.helper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.objectpool.ObjectPool; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.servlet.ServletTransactionHelper; import co.elastic.apm.agent.tracer.pooling.Allocator; +import co.elastic.apm.agent.tracer.pooling.ObjectPool; import jakarta.servlet.AsyncContext; import jakarta.servlet.ServletRequest; @@ -38,7 +37,7 @@ public class JakartaAsyncContextAdviceHelper implements AsyncContextAdviceHelper private final ServletTransactionHelper servletTransactionHelper; private final Tracer tracer; - public JakartaAsyncContextAdviceHelper(ElasticApmTracer tracer) { + public JakartaAsyncContextAdviceHelper(Tracer tracer) { this.tracer = tracer; this.servletTransactionHelper = new ServletTransactionHelper(tracer); this.asyncListenerObjectPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(MAX_POOLED_ELEMENTS, @@ -63,7 +62,7 @@ public void onExitStartAsync(AsyncContext asyncContext) { if (request.getAttribute(ASYNC_LISTENER_ADDED) != null) { return; } - final Transaction transaction = tracer.currentTransaction(); + final Transaction transaction = tracer.currentTransaction(); if (transaction != null && transaction.isSampled() && request.getAttribute(ASYNC_LISTENER_ADDED) == null) { // makes sure that the listener is only added once, even if the request is wrapped // which leads to multiple invocations of startAsync for the same underlying request diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaRecordingServletInputStreamWrapper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaRecordingServletInputStreamWrapper.java index cde1c51de9..d5c452d3c0 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaRecordingServletInputStreamWrapper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaRecordingServletInputStreamWrapper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet.helper; -import co.elastic.apm.agent.impl.context.Request; +import co.elastic.apm.agent.tracer.metadata.Request; import co.elastic.apm.agent.util.IOUtils; import jakarta.servlet.ReadListener; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxApmAsyncListener.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxApmAsyncListener.java index 0a86b6ff83..32fb3bac4e 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxApmAsyncListener.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxApmAsyncListener.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.servlet.helper; -import co.elastic.apm.agent.impl.context.Response; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.servlet.ServletTransactionHelper; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.tracer.pooling.Recyclable; import javax.annotation.Nullable; @@ -57,7 +57,7 @@ public class JavaxApmAsyncListener implements AsyncListener, Recyclable { private final JavaxAsyncContextAdviceHelper asyncContextAdviceHelperImpl; private final ServletTransactionHelper servletTransactionHelper; @Nullable - private volatile Transaction transaction; + private volatile Transaction transaction; @Nullable private volatile Throwable throwable; @@ -66,7 +66,7 @@ public class JavaxApmAsyncListener implements AsyncListener, Recyclable { this.servletTransactionHelper = asyncContextAdviceHelperImpl.getServletTransactionHelper(); } - JavaxApmAsyncListener withTransaction(Transaction transaction) { + JavaxApmAsyncListener withTransaction(Transaction transaction) { this.transaction = transaction; return this; } diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxAsyncContextAdviceHelper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxAsyncContextAdviceHelper.java index 7384f2a0a3..4809a726df 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxAsyncContextAdviceHelper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxAsyncContextAdviceHelper.java @@ -18,12 +18,11 @@ */ package co.elastic.apm.agent.servlet.helper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.objectpool.ObjectPool; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.servlet.ServletTransactionHelper; import co.elastic.apm.agent.tracer.pooling.Allocator; +import co.elastic.apm.agent.tracer.pooling.ObjectPool; import javax.servlet.AsyncContext; import javax.servlet.ServletRequest; @@ -39,7 +38,7 @@ public class JavaxAsyncContextAdviceHelper implements AsyncContextAdviceHelper transaction = tracer.currentTransaction(); if (transaction != null && transaction.isSampled() && request.getAttribute(ASYNC_LISTENER_ADDED) == null) { // makes sure that the listener is only added once, even if the request is wrapped // which leads to multiple invocations of startAsync for the same underlying request diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxRecordingServletInputStreamWrapper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxRecordingServletInputStreamWrapper.java index e949f97558..721019e497 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxRecordingServletInputStreamWrapper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxRecordingServletInputStreamWrapper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet.helper; -import co.elastic.apm.agent.impl.context.Request; +import co.elastic.apm.agent.tracer.metadata.Request; import co.elastic.apm.agent.util.IOUtils; import javax.servlet.ReadListener; diff --git a/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesAdvice.java b/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesAdvice.java index b1fbf3da1d..0725430bb7 100644 --- a/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesAdvice.java +++ b/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesAdvice.java @@ -18,10 +18,10 @@ */ package co.elastic.apm.agent.sparkjava; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import co.elastic.apm.agent.util.VersionUtils; import net.bytebuddy.asm.Advice; @@ -32,11 +32,11 @@ public class RoutesAdvice { - private static final ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + private static final Tracer tracer = GlobalTracer.get(); @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExitFind(@Advice.Return RouteMatch routeMatch) { - Transaction transaction = tracer.currentTransaction(); + Transaction transaction = tracer.currentTransaction(); if (transaction == null || routeMatch == null) { return; } diff --git a/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java b/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java index 0dd5e5a673..f3a5687ecc 100644 --- a/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java +++ b/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java @@ -20,9 +20,9 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -48,7 +48,7 @@ public static Object beforeExecute(@Advice.This ClientHttpRequest request) { return null; } URI uri = request.getURI(); - Span span = HttpClientHelper.startHttpClientSpan(parent, Objects.toString(request.getMethod()), uri, uri.getHost()); + Span span = HttpClientHelper.startHttpClientSpan(parent, Objects.toString(request.getMethod()), uri, uri.getHost()); if (span != null) { span.activate(); span.propagateTraceContext(request, SpringRestRequestHeaderSetter.INSTANCE); @@ -63,8 +63,8 @@ public static void afterExecute(@Advice.Return @Nullable ClientHttpResponse clie @Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) throws IOException { logger.trace("Exit advice for RestTemplate client execute() method, span object: {}", spanObj); - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; try { if (clientHttpResponse != null) { // getRawStatusCode has been introduced in 3.1.1 diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientExchangeFunctionInstrumentation.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientExchangeFunctionInstrumentation.java index caea36a19f..9759b04547 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientExchangeFunctionInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientExchangeFunctionInstrumentation.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.NamedElement; @@ -80,7 +80,7 @@ public static Object[] onBefore(@Advice.Argument(0) ClientRequest clientRequest) } ClientRequest.Builder builder = ClientRequest.from(clientRequest); URI uri = clientRequest.url(); - Span span = HttpClientHelper.startHttpClientSpan(parent, clientRequest.method().name(), uri, uri.getHost()); + Span span = HttpClientHelper.startHttpClientSpan(parent, clientRequest.method().name(), uri, uri.getHost()); if (span != null) { span.activate(); span.propagateTraceContext(builder, WebClientRequestHeaderSetter.INSTANCE); @@ -101,10 +101,10 @@ public static Object afterExecute(@Advice.Return @Nullable Publisher returnVa return returnValue; } Object spanObj = spanRequestObj[1]; - if (!(spanObj instanceof Span)) { + if (!(spanObj instanceof Span)) { return returnValue; } - Span span = (Span) spanObj; + Span span = (Span) spanObj; span = span.captureException(t).deactivate(); if (t != null || returnValue == null) { return returnValue; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientHelper.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientHelper.java index edc81b9cf6..d2beeec9f0 100755 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientHelper.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientHelper.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.springwebclient; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import org.reactivestreams.Publisher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +35,7 @@ public class WebClientHelper { private static final Logger log = LoggerFactory.getLogger(WebClientHelper.class); - public static Publisher wrapSubscriber(Publisher publisher, final Span span, final Tracer tracer) { + public static Publisher wrapSubscriber(Publisher publisher, final Span span, final Tracer tracer) { Function, ? extends Publisher> lift = Operators.liftPublisher( new BiFunction, CoreSubscriber>() { diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientSubscriber.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientSubscriber.java index 23f29c86a7..53d9a90529 100755 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientSubscriber.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webclient-plugin/src/main/java/co/elastic/apm/agent/springwebclient/WebClientSubscriber.java @@ -19,10 +19,10 @@ package co.elastic.apm.agent.springwebclient; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.impl.context.web.ResultUtil; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.tracer.Tracer; import org.reactivestreams.Subscription; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,13 +35,13 @@ public class WebClientSubscriber implements CoreSubscriber, Subscription { private static final Logger logger = LoggerFactory.getLogger(WebClientSubscriber.class); - private static final WeakMap, Span> spanMap = WeakConcurrentProviderImpl.createWeakSpanMap(); + private static final WeakMap, Span> spanMap = WeakConcurrentProviderImpl.createWeakSpanMap(); private final Tracer tracer; private final CoreSubscriber subscriber; private Subscription subscription; - public WebClientSubscriber(CoreSubscriber subscriber, Span span, Tracer tracer) { + public WebClientSubscriber(CoreSubscriber subscriber, Span span, Tracer tracer) { this.subscriber = subscriber; this.tracer = tracer; @@ -51,7 +51,7 @@ public WebClientSubscriber(CoreSubscriber subscriber, Span span, Trac @Override public void onSubscribe(Subscription s) { this.subscription = s; - Span span = getSpan(); + Span span = getSpan(); boolean hasActivated = doEnter("onSubscribe", span); Throwable thrown = null; @@ -68,7 +68,7 @@ public void onSubscribe(Subscription s) { @Override public void onNext(T t) { - final Span span = getSpan(); + final Span span = getSpan(); boolean hasActivated = doEnter("onNext", span); Throwable thrown = null; try { @@ -90,7 +90,7 @@ public void onNext(T t) { @Override public void onError(Throwable throwable) { - Span span = getSpan(); + Span span = getSpan(); boolean hasActivated = doEnter("onError", span); try { subscriber.onError(throwable); @@ -103,7 +103,7 @@ public void onError(Throwable throwable) { @Override public void onComplete() { - final Span span = getSpan(); + final Span span = getSpan(); boolean hasActivated = doEnter("onComplete", span); try { subscriber.onComplete(); @@ -126,7 +126,7 @@ public void cancel() { } @Nullable - private Span getSpan() { + private Span getSpan() { return spanMap.get(this); } @@ -138,7 +138,7 @@ private void discardIf(boolean condition) { spanMap.remove(this); } - private boolean doEnter(String method, @Nullable Span span) { + private boolean doEnter(String method, @Nullable Span span) { debugTrace(true, method, span); if (span == null || tracer.getActive() == span) { @@ -150,7 +150,7 @@ private boolean doEnter(String method, @Nullable Span span) { return true; } - private void doExit(boolean deactivate, String method, @Nullable Span span) { + private void doExit(boolean deactivate, String method, @Nullable Span span) { debugTrace(false, method, span); if (span == null || !deactivate) { @@ -165,14 +165,14 @@ private void doExit(boolean deactivate, String method, @Nullable Span span) { span.deactivate(); } - private void debugTrace(boolean isEnter, String method, @Nullable Span span) { + private void debugTrace(boolean isEnter, String method, @Nullable Span span) { if (!logger.isTraceEnabled()) { return; } logger.trace("{} webclient {} {}", isEnter ? ">>" : "<<", method, span); } - private void endSpan(@Nullable Throwable thrown, @Nullable Span span) { + private void endSpan(@Nullable Throwable thrown, @Nullable Span span) { if (span == null) { // already discarded return; @@ -181,7 +181,7 @@ private void endSpan(@Nullable Throwable thrown, @Nullable Span span) { } private void cancelSpan() { - Span span = getSpan(); + Span span = getSpan(); debugTrace(true, "cancelSpan", span); try { if (span != null) { diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/BodyInsertersInstrumentation.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/BodyInsertersInstrumentation.java index 8aaef23baf..a3c54c1563 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/BodyInsertersInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/BodyInsertersInstrumentation.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.springwebflux; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -87,7 +87,7 @@ public static void onEnter(@Advice.Argument(1) @Nullable Object arg) { } if (type.getType().getTypeName().equals(WebfluxHelper.SSE_EVENT_CLASS)) { - Transaction transaction = GlobalTracer.get().currentTransaction(); + Transaction transaction = GlobalTracer.get().currentTransaction(); if (transaction != null) { // mark the transaction to be ignored and later discarded transaction.ignoreTransaction(); diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/DispatcherHandlerInstrumentation.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/DispatcherHandlerInstrumentation.java index 15edbfa17c..8db425e475 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/DispatcherHandlerInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/DispatcherHandlerInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.springwebflux; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -80,7 +80,7 @@ public static Object onExit(@Advice.Enter @Nullable Object enterTransaction, if (!(enterTransaction instanceof Transaction)) { return returnValue; } - Transaction transaction = (Transaction) enterTransaction; + Transaction transaction = (Transaction) enterTransaction; transaction.deactivate(); if (thrown != null || returnValue == null) { diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java index dc0fd27100..d5e03e2c00 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.springwebflux; import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -82,7 +82,7 @@ public static Object onEnter(@Advice.Argument(0) ServerWebExchange exchange, TransactionNameUtils.setNameFromClassAndMethod( handlerMethod.getBeanType().getSimpleName(), handlerMethod.getMethod().getName(), - ((Transaction) exchangeTransaction).getAndOverrideName(AbstractSpan.PRIO_HIGH_LEVEL_FRAMEWORK, false)); + ((Transaction) exchangeTransaction).getAndOverrideName(AbstractSpan.PRIO_HIGH_LEVEL_FRAMEWORK, false)); } @@ -101,7 +101,7 @@ public static Mono onExit(@Advice.Argument(0) ServerWebExchange e return resultMono; } - Transaction transaction = (Transaction) enterTransaction; + Transaction transaction = (Transaction) enterTransaction; transaction.captureException(thrown); if (transaction.isNoop()) { diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java index bbe25568d1..12b9cac98d 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.springwebflux; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; @@ -41,7 +41,7 @@ class TransactionAwareSubscriber implements CoreSubscriber, Subscription { private static final Logger log = LoggerFactory.getLogger(TransactionAwareSubscriber.class); - private static final WeakMap, Transaction> transactionMap = WeakConcurrentProviderImpl.createWeakSpanMap(); + private static final WeakMap, Transaction> transactionMap = WeakConcurrentProviderImpl.createWeakSpanMap(); private final CoreSubscriber subscriber; @@ -60,7 +60,7 @@ class TransactionAwareSubscriber implements CoreSubscriber, Subscription { * @param description human-readable description to make debugging easier */ TransactionAwareSubscriber(CoreSubscriber subscriber, - Transaction transaction, + Transaction transaction, ServerWebExchange exchange, String description) { @@ -99,7 +99,7 @@ public void cancel() { @Override public void onSubscribe(Subscription s) { this.subscription = s; - Transaction transaction = getTransaction(); + Transaction transaction = getTransaction(); doEnter("onSubscribe", transaction); Throwable thrown = null; try { @@ -120,7 +120,7 @@ public void onSubscribe(Subscription s) { */ @Override public void onNext(T next) { - Transaction transaction = getTransaction(); + Transaction transaction = getTransaction(); doEnter("onNext", transaction); Throwable thrown = null; try { @@ -142,7 +142,7 @@ public void onNext(T next) { */ @Override public void onError(Throwable t) { - Transaction transaction = getTransaction(); + Transaction transaction = getTransaction(); doEnter("onError", transaction); try { @@ -164,7 +164,7 @@ public void onError(Throwable t) { */ @Override public void onComplete() { - Transaction transaction = getTransaction(); + Transaction transaction = getTransaction(); doEnter("onComplete", transaction); try { @@ -179,7 +179,7 @@ public void onComplete() { } } - private void doEnter(String method, @Nullable Transaction transaction) { + private void doEnter(String method, @Nullable Transaction transaction) { debugTrace(true, method, transaction); if (transaction == null) { @@ -189,7 +189,7 @@ private void doEnter(String method, @Nullable Transaction transaction) { transaction.activate(); } - private void doExit(boolean discard, String method, @Nullable Transaction transaction) { + private void doExit(boolean discard, String method, @Nullable Transaction transaction) { debugTrace(false, method, transaction); if (transaction == null) { @@ -203,7 +203,7 @@ private void doExit(boolean discard, String method, @Nullable Transaction transa } private void cancelTransaction() { - Transaction transaction = getTransaction(); + Transaction transaction = getTransaction(); debugTrace(true, "cancelTransaction", transaction); try { if (transaction == null) { @@ -220,11 +220,11 @@ private void cancelTransaction() { } @Nullable - private Transaction getTransaction() { + private Transaction getTransaction() { return transactionMap.get(this); } - private void debugTrace(boolean isEnter, String method, @Nullable Transaction transaction) { + private void debugTrace(boolean isEnter, String method, @Nullable Transaction transaction) { if (!log.isTraceEnabled()) { return; } diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java index aaeba84ea1..e91665d144 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java @@ -20,19 +20,19 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.httpserver.HttpServerHelper; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.context.Request; -import co.elastic.apm.agent.impl.context.Response; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.web.ResultUtil; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.Request; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.util.LoggerUtils; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; import co.elastic.apm.agent.util.PrivilegedActionUtils; import co.elastic.apm.agent.util.TransactionNameUtils; import org.reactivestreams.Publisher; @@ -82,16 +82,16 @@ public class WebfluxHelper { static { - coreConfig = GlobalTracer.requireTracerImpl().getConfig(CoreConfiguration.class); - webConfig = GlobalTracer.requireTracerImpl().getConfig(WebConfiguration.class); + coreConfig = GlobalTracer.get().getConfig(CoreConfiguration.class); + webConfig = GlobalTracer.get().getConfig(WebConfiguration.class); serverHelper = new HttpServerHelper(webConfig); } @Nullable - public static Transaction getOrCreateTransaction(Tracer tracer, ServerWebExchange exchange) { + public static Transaction getOrCreateTransaction(Tracer tracer, ServerWebExchange exchange) { - Transaction transaction = WebfluxServletHelper.getServletTransaction(exchange); + Transaction transaction = WebfluxServletHelper.getServletTransaction(exchange); boolean fromServlet = transaction != null; String path = exchange.getRequest().getPath().value(); @@ -118,11 +118,11 @@ public static boolean isServletTransaction(ServerWebExchange exchange) { return Boolean.TRUE == exchange.getAttributes().get(SERVLET_TRANSACTION); } - public static Mono wrapDispatcher(Mono mono, Transaction transaction, ServerWebExchange exchange) { + public static Mono wrapDispatcher(Mono mono, Transaction transaction, ServerWebExchange exchange) { return doWrap(mono, transaction, exchange, "webflux-dispatcher"); } - private static Mono doWrap(Mono mono, final Transaction transaction, final ServerWebExchange exchange, final String description) { + private static Mono doWrap(Mono mono, final Transaction transaction, final ServerWebExchange exchange, final String description) { //noinspection Convert2Lambda,rawtypes,Convert2Diamond mono = mono.transform(Operators.liftPublisher(new BiFunction, CoreSubscriber>() { @Override // liftPublisher too (or whole transform param) @@ -146,7 +146,7 @@ public CoreSubscriber apply(Publisher publisher, CoreSubscriber transaction, ServerWebExchange exchange) { if (transaction == null) { // already discarded return; @@ -180,7 +180,7 @@ public static void endTransaction(@Nullable Throwable thrown, @Nullable Transact } } - public static void setTransactionName(@Nullable Transaction transaction, ServerWebExchange exchange) { + public static void setTransactionName(@Nullable Transaction transaction, ServerWebExchange exchange) { if (transaction == null) { return; } @@ -248,7 +248,7 @@ private static boolean ignoreTransaction(ServerWebExchange exchange) { return false; } - private static void fillRequest(Transaction transaction, ServerWebExchange exchange) { + private static void fillRequest(Transaction transaction, ServerWebExchange exchange) { ServerHttpRequest serverRequest = exchange.getRequest(); Request request = transaction.getContext().getRequest(); @@ -269,7 +269,7 @@ private static void fillRequest(Transaction transaction, ServerWebExchange excha } - private static void fillResponse(Transaction transaction, ServerWebExchange exchange) { + private static void fillResponse(Transaction transaction, ServerWebExchange exchange) { ServerHttpResponse serverResponse = exchange.getResponse(); int status = 0; try { diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java index e114262d70..9326b0b7be 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.springwebflux; import co.elastic.apm.agent.cache.WeakKeySoftValueLoadingCache; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.http.server.reactive.AbstractServerHttpRequest; @@ -55,20 +55,20 @@ public MethodHandle get(Class klass) { }); @Nullable - public static Transaction getServletTransaction(ServerWebExchange exchange) { + public static Transaction getServletTransaction(ServerWebExchange exchange) { // see ServletHttpHandlerAdapter and sub-classes for implementation details // While the active transaction is the one created by Servlet, it would rely on the fact that we are on the // same thread as the one that created the transaction, which is an implementation detail. - Transaction transaction = null; + Transaction transaction = null; ServerHttpRequest exchangeRequest = exchange.getRequest(); if (exchangeRequest instanceof AbstractServerHttpRequest) { Object nativeRequest = ((AbstractServerHttpRequest) exchangeRequest).getNativeRequest(); // note: attribute name is defined in Servlet plugin and should be kept in sync - transaction = (Transaction) getServletAttribute(nativeRequest, "co.elastic.apm.agent.servlet.ServletApiAdvice.transaction"); + transaction = (Transaction) getServletAttribute(nativeRequest, "co.elastic.apm.agent.servlet.ServletApiAdvice.transaction"); } diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java index 785941cbd9..4a3bd4633e 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.springwebflux.testapp; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -171,7 +171,7 @@ public Mono customTransactionName() { // Transaction should be active, even if we are outside of Mono/Flux execution // In practice, it's called after onSubscribe and before onNext, thus the active context is not provided // by reactor plugin, but only by the webflux plugin that keeps the transaction active. - ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + ElasticApmTracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); Transaction transaction = Objects.requireNonNull(tracer.currentTransaction(), "active transaction is required"); // This mimics setting the name through the public API. We cannot use the public API if we want to test span recycling transaction.withName("user-provided-name", AbstractSpan.PRIO_USER_SUPPLIED); diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingFunctional.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingFunctional.java index 8c3a70aadb..9962c5b7c8 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingFunctional.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingFunctional.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.springwebflux.testapp; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -81,7 +81,7 @@ public RouterFunction route(GreetingHandler greetingHandler) { .GET("/functional/duration", accept(MediaType.TEXT_PLAIN), request -> response(greetingHandler.duration(getDuration(request)))) // custom transaction name set through API .GET("/functional/custom-transaction-name", accept(MediaType.TEXT_PLAIN), request -> { - ElasticApmTracer tracer = GlobalTracer.requireTracerImpl(); + ElasticApmTracer tracer = GlobalTracer.get().require(ElasticApmTracer.class); Transaction transaction = Objects.requireNonNull(tracer.currentTransaction(), "active transaction is required"); // This mimics setting the name through the public API. We cannot use the public API if we want to test span recycling transaction.withName("user-provided-name", AbstractSpan.PRIO_USER_SUPPLIED); diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingHandler.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingHandler.java index e27fdf3874..b919b9d82d 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingHandler.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingHandler.java @@ -18,8 +18,9 @@ */ package co.elastic.apm.agent.springwebflux.testapp; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; import org.springframework.http.codec.ServerSentEvent; import org.springframework.security.core.context.ReactiveSecurityContextHolder; import org.springframework.stereotype.Component; @@ -73,7 +74,7 @@ public Flux childSpans(int count, long delayMillis, long durationMillis) .delayElements(Duration.ofMillis(delayMillis)) .map(i -> String.format("child %d", i)) .doOnNext(name -> { - Span span = Objects.requireNonNull(GlobalTracer.requireTracerImpl().currentTransaction()).createSpan(); + Span span = Objects.requireNonNull(GlobalTracer.get().require(ElasticApmTracer.class).currentTransaction()).createSpan(); span.withName(String.format("%s id=%s", name, span.getTraceContext().getId())); try { fakeWork(durationMillis); diff --git a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ServletWrappingControllerTransactionNameInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ServletWrappingControllerTransactionNameInstrumentation.java index 013a45ced3..29e77188ea 100644 --- a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ServletWrappingControllerTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ServletWrappingControllerTransactionNameInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.springwebmvc; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -57,7 +57,7 @@ public Collection getInstrumentationGroupNames() { public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter(@Advice.FieldValue("servletClass") Class servletClass, @Advice.Argument(0) HttpServletRequest request) { - final Transaction transaction = tracer.currentTransaction(); + final Transaction transaction = tracer.currentTransaction(); if (transaction == null) { return; } diff --git a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java index f2e01c2887..88981d2647 100644 --- a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java @@ -20,9 +20,9 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.configuration.ServiceInfo; +import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.servlet.ServletServiceNameHelper; import co.elastic.apm.agent.servlet.adapter.JavaxServletApiAdapter; -import co.elastic.apm.agent.servlet.adapter.ServletApiAdapter; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -72,6 +72,11 @@ public static class SpringServiceNameAdvice { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void afterInitPropertySources(@Advice.This WebApplicationContext applicationContext) { + ElasticApmTracer elasticApmTracer = tracer.probe(ElasticApmTracer.class); + if (elasticApmTracer == null) { + return; + } + // avoid having two service names for a standalone jar // one based on Implementation-Title and one based on spring.application.name if (!ServiceInfo.autoDetected().isMultiServiceContainer()) { @@ -97,7 +102,7 @@ public static void afterInitPropertySources(@Advice.This WebApplicationContext a ServiceInfo fromSpringApplicationNameProperty = ServiceInfo.of(applicationContext.getEnvironment().getProperty("spring.application.name", "")); ServiceInfo fromApplicationContextApplicationName = ServiceInfo.of(removeLeadingSlash(applicationContext.getApplicationName())); - tracer.setServiceInfoForClassLoader(classLoader, fromSpringApplicationNameProperty + elasticApmTracer.setServiceInfoForClassLoader(classLoader, fromSpringApplicationNameProperty .withFallback(fromServletContext) .withFallback(fromApplicationContextApplicationName)); } diff --git a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringTransactionNameInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringTransactionNameInstrumentation.java index 4765effbd9..a5dbbd918d 100644 --- a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringTransactionNameInstrumentation.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.springwebmvc; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import co.elastic.apm.agent.util.VersionUtils; import net.bytebuddy.asm.Advice; @@ -46,9 +46,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; /** - * This instrumentation sets the {@link Transaction#name} according to the handler responsible for this request. + * This instrumentation sets the transaction name according to the handler responsible for this request. *

- * If the handler is a {@link org.springframework.stereotype.Controller}, the {@link Transaction#name} is set to + * If the handler is a {@link org.springframework.stereotype.Controller}, the transaction name is set to * {@code ControllerName#methodName}. * If it is a different kind of handler, * like a {@link org.springframework.web.servlet.resource.ResourceHttpRequestHandler}, @@ -102,12 +102,12 @@ public Collection getInstrumentationGroupNames() { public static class HandlerAdapterAdvice { - private static final WebConfiguration webConfig = GlobalTracer.requireTracerImpl().getConfig(WebConfiguration.class);; + private static final WebConfiguration webConfig = GlobalTracer.get().getConfig(WebConfiguration.class);; @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void setTransactionName(@Advice.Argument(0) HttpServletRequest request, @Advice.Argument(2) Object handler) { - final Transaction transaction = tracer.currentTransaction(); + final Transaction transaction = tracer.currentTransaction(); if (transaction == null) { return; } diff --git a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java index 63d11decfa..091b258289 100644 --- a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.springwebmvc; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -63,7 +63,7 @@ public static Object beforeExecute(@Advice.This Object thiz) { final AbstractSpan parent = tracer.getActive(); String className = thiz.getClass().getName(); - Span span = parent.createSpan() + Span span = parent.createSpan() .withType(SPAN_TYPE) .withSubtype(getSubtype(className)) .withAction(SPAN_ACTION) @@ -83,8 +83,8 @@ public static Object beforeExecute(@Advice.This Object thiz) { @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class, inline = false) public static void afterExecute(@Advice.Enter @Nullable Object spanObj, @Advice.Thrown @Nullable Throwable t) { - if (spanObj instanceof Span) { - Span span = (Span) spanObj; + if (spanObj instanceof Span) { + Span span = (Span) spanObj; span.captureException(t) .deactivate() .end(); diff --git a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ActionProxyAdvice.java b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ActionProxyAdvice.java index c1517309d1..c322bfd763 100644 --- a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ActionProxyAdvice.java +++ b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ActionProxyAdvice.java @@ -18,10 +18,10 @@ */ package co.elastic.apm.agent.struts; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionProxy; @@ -35,7 +35,7 @@ public class ActionProxyAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object onEnterExecute(@Advice.This ActionProxy actionProxy) { - Transaction transaction = GlobalTracer.get().currentTransaction(); + Transaction transaction = GlobalTracer.get().currentTransaction(); if (transaction == null) { return null; } @@ -43,7 +43,7 @@ public static Object onEnterExecute(@Advice.This ActionProxy actionProxy) { String className = actionProxy.getAction().getClass().getSimpleName(); String methodName = actionProxy.getMethod(); if (ActionContext.getContext().get("CHAIN_HISTORY") != null) { - Span span = transaction.createSpan().withType("app").withSubtype("internal"); + Span span = transaction.createSpan().withType("app").withSubtype("internal"); TransactionNameUtils.setNameFromClassAndMethod(className, methodName, span.getAndOverrideName(PRIO_HIGH_LEVEL_FRAMEWORK)); return span.activate(); } else { @@ -60,7 +60,7 @@ public static void onExitExecute(@Advice.Enter @Nullable Object spanOrNull, return; } - Span span = (Span) spanOrNull; + Span span = (Span) spanOrNull; try { if (t != null) { span.captureException(t).withOutcome(Outcome.FAILURE); diff --git a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ExecuteOperationsAdvice.java b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ExecuteOperationsAdvice.java index 304b39237e..eb9f53a727 100644 --- a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ExecuteOperationsAdvice.java +++ b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/ExecuteOperationsAdvice.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.struts; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.TransactionNameUtils; import net.bytebuddy.asm.Advice; @@ -30,11 +30,11 @@ public class ExecuteOperationsAdvice { - private static final WebConfiguration webConfig = GlobalTracer.requireTracerImpl().getConfig(WebConfiguration.class); + private static final WebConfiguration webConfig = GlobalTracer.get().getConfig(WebConfiguration.class); @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void setTransactionName(@Advice.Argument(0) HttpServletRequest request, @Advice.Return boolean handled) { - Transaction transaction = GlobalTracer.get().currentTransaction(); + Transaction transaction = GlobalTracer.get().currentTransaction(); if (!handled || transaction == null) { return; } diff --git a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsFrameworkUtils.java b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsFrameworkUtils.java index 12ee4223fb..59c00300a5 100644 --- a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsFrameworkUtils.java +++ b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsFrameworkUtils.java @@ -18,13 +18,13 @@ */ package co.elastic.apm.agent.struts; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.util.VersionUtils; import com.opensymphony.xwork2.ActionProxy; public class StrutsFrameworkUtils { - public static void setFrameworkNameAndVersion(Transaction transaction) { + public static void setFrameworkNameAndVersion(Transaction transaction) { transaction.setFrameworkName("Struts"); transaction.setFrameworkVersion(VersionUtils.getVersion(ActionProxy.class, "org.apache.struts", "struts2-core")); } diff --git a/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/HttpUrlConnectionInstrumentation.java b/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/HttpUrlConnectionInstrumentation.java index da142eaa9d..dfcc125770 100644 --- a/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/HttpUrlConnectionInstrumentation.java +++ b/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/HttpUrlConnectionInstrumentation.java @@ -21,9 +21,9 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.sdk.state.CallDepth; import co.elastic.apm.agent.sdk.state.GlobalState; @@ -82,7 +82,7 @@ public static Object enter(@Advice.This HttpURLConnection thiz, if (parent == null) { return null; } - Span span = inFlightSpans.get(thiz); + Span span = inFlightSpans.get(thiz); if (span == null && !connected) { final URL url = thiz.getURL(); span = HttpClientHelper.startHttpClientSpan(parent, thiz.getRequestMethod(), url.toString(), url.getProtocol(), url.getHost(), url.getPort()); @@ -109,7 +109,7 @@ public static void exit(@Advice.This HttpURLConnection thiz, @Advice.Origin String signature) { callDepth.decrement(); - Span span = (Span) spanObject; + Span span = (Span) spanObject; if (span == null) { return; } @@ -165,7 +165,7 @@ public static class AdviceClass { public static void afterDisconnect(@Advice.This HttpURLConnection thiz, @Advice.Thrown @Nullable Throwable t, @Advice.FieldValue("responseCode") int responseCode) { - Span span = inFlightSpans.remove(thiz); + Span span = inFlightSpans.remove(thiz); if (span != null) { span.captureException(t) .withOutcome(t != null ? Outcome.FAILURE : Outcome.SUCCESS) diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java index e11ed41424..064713c9e4 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java @@ -20,13 +20,12 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.httpserver.HttpServerHelper; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.impl.context.Request; -import co.elastic.apm.agent.impl.context.Response; import co.elastic.apm.agent.impl.context.web.WebConfiguration; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; +import co.elastic.apm.agent.tracer.metadata.Request; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.util.TransactionNameUtils; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -58,14 +57,14 @@ public abstract class AbstractHttpTransactionHelper { protected final HttpServerHelper serverHelper; - protected AbstractHttpTransactionHelper(ElasticApmTracer tracer) { + protected AbstractHttpTransactionHelper(Tracer tracer) { this.tracer = tracer; this.webConfiguration = tracer.getConfig(WebConfiguration.class); this.coreConfiguration = tracer.getConfig(CoreConfiguration.class); this.serverHelper = new HttpServerHelper(webConfiguration); } - protected void startCaptureBody(Transaction transaction, String method, @Nullable String contentTypeHeader) { + protected void startCaptureBody(Transaction transaction, String method, @Nullable String contentTypeHeader) { Request request = transaction.getContext().getRequest(); if (hasBody(contentTypeHeader, method)) { if (coreConfiguration.getCaptureBody() != OFF @@ -94,7 +93,7 @@ protected boolean hasBody(@Nullable String contentTypeHeader, String method) { return METHODS_WITH_BODY.contains(method) && contentTypeHeader != null; } - public void applyDefaultTransactionName(String method, String pathFirstPart, @Nullable String pathSecondPart, Transaction transaction, int priorityOffset) { + public void applyDefaultTransactionName(String method, String pathFirstPart, @Nullable String pathSecondPart, Transaction transaction, int priorityOffset) { // JSPs don't contain path params and the name is more telling than the generated servlet class if (webConfiguration.isUsePathAsName() || ENDS_WITH_JSP.matches(pathFirstPart, pathSecondPart)) { // should override ServletName#doGet @@ -116,7 +115,7 @@ public void applyDefaultTransactionName(String method, String pathFirstPart, @Nu * for example when the amount of query parameters is longer than the application server allows. * In that case, we rather not want that the agent looks like the cause for this. */ - protected void fillRequestParameters(Transaction transaction, String method, @Nullable Map parameterMap, @Nullable String contentTypeHeader) { + protected void fillRequestParameters(Transaction transaction, String method, @Nullable Map parameterMap, @Nullable String contentTypeHeader) { Request request = transaction.getContext().getRequest(); if (hasBody(contentTypeHeader, method)) { if (coreConfiguration.getCaptureBody() != OFF && parameterMap != null) { @@ -165,13 +164,11 @@ protected void fillRequest(Request request, String protocol, String method, @Nul } protected void fillUrlRelatedFields(Request request, @Nullable String scheme, @Nullable String serverName, int serverPort, String requestURI, @Nullable String queryString) { - request.getUrl().resetState(); - request.getUrl() - .withProtocol(scheme) - .withHostname(serverName) - .withPort(serverPort) - .withPathname(requestURI) - .withSearch(queryString); + request.getUrl().fillFrom(scheme, + serverName, + serverPort, + requestURI, + queryString); } public boolean isCaptureHeaders() { diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebClientHelper.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebClientHelper.java index d311732dd2..d8e704a679 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebClientHelper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebClientHelper.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.vertx; import co.elastic.apm.agent.httpclient.HttpClientHelper; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.impl.transaction.Span; +import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.tracer.dispatch.TextHeaderSetter; import io.vertx.core.http.HttpClientRequest; import io.vertx.ext.web.client.HttpResponse; @@ -50,10 +50,10 @@ public void startSpan(AbstractSpan parent, HttpContext httpContext, HttpCl if (existingSpanObj != null) { // there is already an active span for this HTTP request, // don't create a new span but propagate tracing headers - ((Span) existingSpanObj).propagateTraceContext(httpRequest, HeaderSetter.INSTANCE); + ((Span) existingSpanObj).propagateTraceContext(httpRequest, HeaderSetter.INSTANCE); } else { URI requestUri = URI.create(httpRequest.absoluteURI()); - Span span = HttpClientHelper.startHttpClientSpan(parent, getMethod(httpRequest), requestUri, null); + Span span = HttpClientHelper.startHttpClientSpan(parent, getMethod(httpRequest), requestUri, null); if (span != null) { span.propagateTraceContext(httpRequest, HeaderSetter.INSTANCE); @@ -68,7 +68,7 @@ public void startSpan(AbstractSpan parent, HttpContext httpContext, HttpCl public void followRedirect(HttpContext httpContext, HttpClientRequest httpRequest) { Object existingSpanObj = httpContext.get(WEB_CLIENT_SPAN_KEY); if (existingSpanObj != null) { - Span existingSpan = (Span) existingSpanObj; + Span existingSpan = (Span) existingSpanObj; existingSpan.propagateTraceContext(httpRequest, HeaderSetter.INSTANCE); } } @@ -88,7 +88,7 @@ private void finalizeSpan(HttpContext httpContext, int statusCode, @Nullable // Setting to null removes from the attributes map httpContext.set(WEB_CLIENT_SPAN_KEY, null); - Span span = (Span) spanObj; + Span span = (Span) spanObj; span.decrementReferences(); if (thrown != null) { diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java index 0fcebf7e06..d7fa427e94 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java @@ -18,12 +18,12 @@ */ package co.elastic.apm.agent.vertx; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.context.Request; -import co.elastic.apm.agent.impl.context.Response; import co.elastic.apm.agent.impl.context.web.ResultUtil; import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; +import co.elastic.apm.agent.tracer.metadata.Request; +import co.elastic.apm.agent.tracer.metadata.Response; import co.elastic.apm.agent.util.PrivilegedActionUtils; import co.elastic.apm.agent.util.VersionUtils; import io.netty.buffer.ByteBuf; @@ -56,13 +56,13 @@ public abstract class AbstractVertxWebHelper extends AbstractHttpTransactionHelp private final MultiMapHeadersGetterSetter headerGetter = new MultiMapHeadersGetterSetter(); - protected AbstractVertxWebHelper(ElasticApmTracer tracer) { + protected AbstractVertxWebHelper(Tracer tracer) { super(tracer); } @Nullable - protected Transaction startOrGetTransaction(HttpServerRequest httpServerRequest) { - Transaction transaction = tracer.currentTransaction(); + protected Transaction startOrGetTransaction(HttpServerRequest httpServerRequest) { + Transaction transaction = tracer.currentTransaction(); if (transaction != null) { return transaction; } else if (!serverHelper.isRequestExcluded(httpServerRequest.uri(), httpServerRequest.headers().get(USER_AGENT_HEADER))) { @@ -72,9 +72,9 @@ protected Transaction startOrGetTransaction(HttpServerRequest httpServerRequest) } @Nullable - public abstract Transaction setRouteBasedNameForCurrentTransaction(RoutingContext routingContext); + public abstract Transaction setRouteBasedNameForCurrentTransaction(RoutingContext routingContext); - protected void setRouteBasedTransactionName(Transaction transaction, RoutingContext routingContext) { + protected void setRouteBasedTransactionName(Transaction transaction, RoutingContext routingContext) { if (!webConfiguration.isUsePathAsName()) { String path = routingContext.currentRoute().getPath(); if (path != null) { @@ -87,7 +87,7 @@ protected void setRouteBasedTransactionName(Transaction transaction, RoutingCont } } - public void finalizeTransaction(@Nullable HttpServerResponse httpServerResponse, Transaction transaction) { + public void finalizeTransaction(@Nullable HttpServerResponse httpServerResponse, Transaction transaction) { try { if (httpServerResponse != null) { final Response response = transaction.getContext().getResponse(); @@ -104,7 +104,7 @@ public void finalizeTransaction(@Nullable HttpServerResponse httpServerResponse, } } - public void captureBody(@Nullable Transaction transaction, Buffer requestDataBuffer) { + public void captureBody(@Nullable Transaction transaction, Buffer requestDataBuffer) { if (transaction == null || transaction.getContext().getRequest().getBodyBuffer() == null) { return; } @@ -123,7 +123,7 @@ public void captureBody(@Nullable Transaction transaction, Buffer requestDataBuf } } - protected void enrichRequest(HttpServerRequest httpServerRequest, Transaction transaction) { + protected void enrichRequest(HttpServerRequest httpServerRequest, Transaction transaction) { transaction.setFrameworkName(FRAMEWORK_NAME); transaction.setFrameworkVersion(VersionUtils.getVersion(HttpServerRequest.class, "io.vertx", "vertx-web")); transaction.withType(SPAN_TYPE); @@ -148,7 +148,7 @@ protected void enrichRequest(HttpServerRequest httpServerRequest, Transaction tr } - private void setResponseHeaders(Transaction transaction, HttpServerResponse httpServerResponse, Response response) { + private void setResponseHeaders(Transaction transaction, HttpServerResponse httpServerResponse, Response response) { if (transaction.isSampled() && isCaptureHeaders()) { final Set headerNames = httpServerResponse.headers().names(); if (headerNames != null) { @@ -160,7 +160,7 @@ private void setResponseHeaders(Transaction transaction, HttpServerResponse http } - private void setRequestParameters(Transaction transaction, HttpServerRequest httpServerRequest, String method, String contentType) { + private void setRequestParameters(Transaction transaction, HttpServerRequest httpServerRequest, String method, String contentType) { if (transaction.isSampled() && captureParameters(method, contentType)) { final Map parameterMap = new HashMap<>(); for (String name : httpServerRequest.params().names()) { @@ -173,7 +173,7 @@ private void setRequestParameters(Transaction transaction, HttpServerRequest htt } } - private void setRequestHeaders(Transaction transaction, HttpServerRequest httpServerRequest) { + private void setRequestHeaders(Transaction transaction, HttpServerRequest httpServerRequest) { final Request req = transaction.getContext().getRequest(); if (transaction.isSampled() && isCaptureHeaders()) { setCookies(httpServerRequest, req); diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/GenericHandlerWrapper.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/GenericHandlerWrapper.java index bff1d5c6b2..e81bce8b8d 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/GenericHandlerWrapper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/GenericHandlerWrapper.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.vertx; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; import io.vertx.core.Handler; public class GenericHandlerWrapper implements Handler { diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/SetTimerWrapper.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/SetTimerWrapper.java index 44af7ab1f2..0510b365b6 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/SetTimerWrapper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/SetTimerWrapper.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.vertx; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.AbstractSpan; import io.vertx.core.Handler; public class SetTimerWrapper extends GenericHandlerWrapper { diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/HandlerWithCustomNamedSpan.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/HandlerWithCustomNamedSpan.java index 39433d905c..846158c9ca 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/HandlerWithCustomNamedSpan.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/HandlerWithCustomNamedSpan.java @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.vertx.helper; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Span; import io.vertx.core.Handler; @@ -38,7 +39,7 @@ public HandlerWithCustomNamedSpan(Handler handler, RoutingContex @Override public void handle(Void v) { - AbstractSpan active = GlobalTracer.requireTracerImpl().getActive(); + AbstractSpan active = GlobalTracer.get().require(ElasticApmTracer.class).getActive(); if (active == null) { return; } diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebHelper.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebHelper.java index b1ae5d22e2..a7f787a44c 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebHelper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebHelper.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.vertx.v3.web; import co.elastic.apm.agent.collections.WeakConcurrentProviderImpl; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; @@ -36,9 +36,9 @@ public class WebHelper extends AbstractVertxWebHelper { private static final Logger log = LoggerFactory.getLogger(WebHelper.class); - private static final WebHelper INSTANCE = new WebHelper(GlobalTracer.requireTracerImpl()); + private static final WebHelper INSTANCE = new WebHelper(GlobalTracer.get()); - static final WeakMap transactionMap = WeakConcurrentProviderImpl.createWeakSpanMap(); + static final WeakMap> transactionMap = WeakConcurrentProviderImpl.createWeakSpanMap(); public static WebHelper getInstance() { return INSTANCE; @@ -48,13 +48,13 @@ public static WebHelper getInstance() { // that should do nothing other than returning the wrapped delegate instance of type HttpServerRequestImpl. private final NoopHandler noopHandler = new NoopHandler(); - WebHelper(ElasticApmTracer tracer) { + WebHelper(Tracer tracer) { super(tracer); } @Nullable - public Transaction startOrGetTransaction(HttpServerRequest httpServerRequest) { - Transaction transaction = super.startOrGetTransaction(httpServerRequest); + public Transaction startOrGetTransaction(HttpServerRequest httpServerRequest) { + Transaction transaction = super.startOrGetTransaction(httpServerRequest); if (transaction != null) { mapTransaction(httpServerRequest, transaction); @@ -65,9 +65,9 @@ public Transaction startOrGetTransaction(HttpServerRequest httpServerRequest) { } @Override - public Transaction setRouteBasedNameForCurrentTransaction(RoutingContext routingContext) { + public Transaction setRouteBasedNameForCurrentTransaction(RoutingContext routingContext) { HttpServerRequest request = routingContext.request(); - Transaction transaction = getTransactionForRequest(request); + Transaction transaction = getTransactionForRequest(request); if (transaction != null) { setRouteBasedTransactionName(transaction, routingContext); @@ -76,27 +76,27 @@ public Transaction setRouteBasedNameForCurrentTransaction(RoutingContext routing return transaction; } - public void mapTransaction(Object key, Transaction transaction) { + public void mapTransaction(Object key, Transaction transaction) { transactionMap.put(key, transaction); } @Nullable - public Transaction lookupTransaction(Object key) { + public Transaction lookupTransaction(Object key) { return transactionMap.get(key); } @Nullable - public Transaction removeTransactionMapping(Object key) { + public Transaction removeTransactionMapping(Object key) { return transactionMap.remove(key); } @Nullable - public Transaction getTransactionForRequest(HttpServerRequest request) { + public Transaction getTransactionForRequest(HttpServerRequest request) { if (request.getClass().getName().equals("io.vertx.ext.web.impl.HttpServerRequestWrapper")) { request = request.endHandler(noopHandler); log.debug("VERTX-DEBUG: Vert.x request obtained through endHandler instrumentation: {}", request); } - Transaction transaction = lookupTransaction(request); + Transaction transaction = lookupTransaction(request); if (transaction != null) { log.debug("VERTX-DEBUG: transaction {} is mapped to the Vert.x request: {}", transaction, request); } else { diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebInstrumentation.java index 5f712d2377..b120847520 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/WebInstrumentation.java @@ -18,14 +18,12 @@ */ package co.elastic.apm.agent.vertx.v3.web; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.vertx.v3.Vertx3Instrumentation; -import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpServerRequest; import io.vertx.ext.web.RoutingContext; import net.bytebuddy.asm.Advice; -import net.bytebuddy.asm.Advice.AssignReturned.ToFields.ToField; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -35,7 +33,6 @@ import java.util.Arrays; import java.util.Collection; -import static net.bytebuddy.matcher.ElementMatchers.declaresField; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; @@ -79,7 +76,7 @@ public static class RouteImplAdvice { @Nullable @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object nextEnter(@Advice.Argument(value = 0) RoutingContext routingContext) { - Transaction transaction = WebHelper.getInstance().setRouteBasedNameForCurrentTransaction(routingContext); + Transaction transaction = WebHelper.getInstance().setRouteBasedNameForCurrentTransaction(routingContext); if (transaction != null) { transaction.activate(); @@ -92,7 +89,7 @@ public static Object nextEnter(@Advice.Argument(value = 0) RoutingContext routin public static void nextExit(@Advice.Argument(value = 0) RoutingContext routingContext, @Nullable @Advice.Enter Object transactionObj, @Nullable @Advice.Thrown Throwable thrown) { if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + Transaction transaction = (Transaction) transactionObj; transaction.captureException(thrown).deactivate(); } } @@ -138,7 +135,7 @@ public static class HandleDataAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void captureBody(@Advice.This HttpServerRequest request, @Advice.Argument(value = 0) Buffer requestDataBuffer) { - Transaction transaction = WebHelper.getInstance().getTransactionForRequest(request); + Transaction transaction = WebHelper.getInstance().getTransactionForRequest(request); helper.captureBody(transaction, requestDataBuffer); } } diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1EndTransactionInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1EndTransactionInstrumentation.java index ae1932b768..0a7bb58025 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1EndTransactionInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1EndTransactionInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v3.web.http1; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.vertx.v3.web.WebHelper; @@ -62,7 +62,7 @@ public static class ResponseCompleteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void exit(@Advice.FieldValue("responseInProgress") HttpServerRequestImpl responseInProgress) { - Transaction transaction = helper.removeTransactionMapping(responseInProgress); + Transaction transaction = helper.removeTransactionMapping(responseInProgress); if (transaction != null) { HttpServerResponseImpl response = responseInProgress.response(); if (response != null) { diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1StartTransactionInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1StartTransactionInstrumentation.java index 84510a47fb..50829911c6 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1StartTransactionInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http1/Http1StartTransactionInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v3.web.http1; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.vertx.v3.web.WebHelper; @@ -58,7 +58,7 @@ public static class AdviceClass { @Nullable @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object enter(@Advice.This HttpServerRequestImpl request) { - Transaction transaction = helper.startOrGetTransaction(request); + Transaction transaction = helper.startOrGetTransaction(request); if (transaction != null) { transaction.activate(); } @@ -69,8 +69,8 @@ public static Object enter(@Advice.This HttpServerRequestImpl request) { @Advice.OnMethodExit(suppress = Throwable.class, inline = false, onThrowable = Throwable.class) public static void exit(@Advice.Enter Object transactionObj, @Advice.Thrown @Nullable Throwable thrown) { - if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + if (transactionObj instanceof Transaction) { + Transaction transaction = (Transaction) transactionObj; transaction.captureException(thrown).deactivate(); } } diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerRequestImplEndInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerRequestImplEndInstrumentation.java index 92a0624d55..ca2709b43f 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerRequestImplEndInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerRequestImplEndInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v3.web.http2; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.vertx.v3.web.WebHelper; @@ -64,7 +64,7 @@ public static class HttpRequestEndAdvice { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void exit(@Advice.This Http2ServerRequestImpl request, @Advice.FieldValue("response") @Nullable Http2ServerResponseImpl response) { - Transaction transaction = helper.removeTransactionMapping(request); + Transaction transaction = helper.removeTransactionMapping(request); if (transaction != null) { helper.finalizeTransaction(response, transaction); log.debug("VERTX-DEBUG: ended Vert.x HTTP 2 transaction {} with details from this response: {}", transaction, response); diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerResponseImplEndInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerResponseImplEndInstrumentation.java index 7ccdb0c6fd..6a8cb60e90 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerResponseImplEndInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2ServerResponseImplEndInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v3.web.http2; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.vertx.v3.web.WebHelper; @@ -62,7 +62,7 @@ public static class WriteAdvice { public static void writeExit(@Advice.This Http2ServerResponseImpl response, @Advice.Argument(1) boolean end) { if (end) { - Transaction transaction = WebHelper.getInstance().removeTransactionMapping(response); + Transaction transaction = WebHelper.getInstance().removeTransactionMapping(response); log.debug("VERTX-DEBUG: removing transaction {} mapping to response {}", transaction, response); } } @@ -89,7 +89,7 @@ public static class CloseAdvice { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void closeExit(@Advice.This Http2ServerResponseImpl response) { - Transaction transaction = WebHelper.getInstance().removeTransactionMapping(response); + Transaction transaction = WebHelper.getInstance().removeTransactionMapping(response); log.debug("VERTX-DEBUG: removing transaction {} mapping to response {}", transaction, response); } } diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2StartTransactionInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2StartTransactionInstrumentation.java index 67b81b3273..7ed483be5e 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2StartTransactionInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/web/http2/Http2StartTransactionInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v3.web.http2; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.vertx.v3.web.WebHelper; @@ -53,7 +53,7 @@ public static class AdviceClass { @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void exit(@Advice.Return Http2ServerRequestImpl request) { - Transaction transaction = WebHelper.getInstance().startOrGetTransaction(request); + Transaction transaction = WebHelper.getInstance().startOrGetTransaction(request); if (transaction != null) { // In HTTP 2, there may still be response processing after request end has ended the transaction WebHelper.getInstance().mapTransaction(request.response(), transaction); diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/webclient/WebClientInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/webclient/WebClientInstrumentation.java index 65d68e0257..9dd43eaa64 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/webclient/WebClientInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/webclient/WebClientInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v3.webclient; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.vertx.AbstractVertxWebClientHelper; import co.elastic.apm.agent.vertx.v3.Vertx3Instrumentation; import io.vertx.core.Context; diff --git a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebHelper.java b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebHelper.java index fc62c2c522..2e07d4e289 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebHelper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebHelper.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.vertx.v4.web; -import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.vertx.AbstractVertxWebHelper; import io.vertx.core.Context; import io.vertx.core.http.HttpServerRequest; @@ -30,19 +30,19 @@ public class WebHelper extends AbstractVertxWebHelper { - private static final WebHelper INSTANCE = new WebHelper(GlobalTracer.requireTracerImpl()); + private static final WebHelper INSTANCE = new WebHelper(GlobalTracer.get()); public static WebHelper getInstance() { return INSTANCE; } - private WebHelper(ElasticApmTracer tracer) { + private WebHelper(Tracer tracer) { super(tracer); } @Nullable - public Transaction startOrGetTransaction(Context context, HttpServerRequest httpServerRequest) { - Transaction transaction = super.startOrGetTransaction(httpServerRequest); + public Transaction startOrGetTransaction(Context context, HttpServerRequest httpServerRequest) { + Transaction transaction = super.startOrGetTransaction(httpServerRequest); if (transaction != null) { enrichRequest(httpServerRequest, transaction); @@ -54,9 +54,9 @@ public Transaction startOrGetTransaction(Context context, HttpServerRequest http @Nullable @Override - public Transaction setRouteBasedNameForCurrentTransaction(RoutingContext routingContext) { + public Transaction setRouteBasedNameForCurrentTransaction(RoutingContext routingContext) { Context context = routingContext.vertx().getOrCreateContext(); - Transaction transaction = context.getLocal(CONTEXT_TRANSACTION_KEY); + Transaction transaction = context.getLocal(CONTEXT_TRANSACTION_KEY); if (transaction != null) { setRouteBasedTransactionName(transaction, routingContext); } diff --git a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebInstrumentation.java index e90bab63a6..7bae64b72f 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/web/WebInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v4.web; -import co.elastic.apm.agent.impl.transaction.Transaction; +import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.vertx.v4.Vertx4Instrumentation; import io.vertx.core.Context; import io.vertx.core.buffer.Buffer; @@ -155,8 +155,8 @@ public static void receiveRequest(@Advice.Argument(value = 0) Context context, @ @Nullable @Advice.Argument(value = 3) Throwable failure) { Object transactionObj = context.getLocal(WebHelper.CONTEXT_TRANSACTION_KEY); - if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + if (transactionObj instanceof Transaction) { + Transaction transaction = (Transaction) transactionObj; if (failure != null) { transaction.captureException(failure); } @@ -199,7 +199,7 @@ public static class RouteImplAdvice { @Nullable @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object nextEnter(@Advice.Argument(value = 0) RoutingContext routingContext) { - Transaction transaction = helper.setRouteBasedNameForCurrentTransaction(routingContext); + Transaction transaction = helper.setRouteBasedNameForCurrentTransaction(routingContext); if (transaction != null) { transaction.activate(); @@ -211,8 +211,8 @@ public static Object nextEnter(@Advice.Argument(value = 0) RoutingContext routin @Advice.OnMethodExit(suppress = Throwable.class, inline = false, onThrowable = Throwable.class) public static void nextExit(@Advice.Argument(value = 0) RoutingContext routingContext, @Nullable @Advice.Enter Object transactionObj, @Nullable @Advice.Thrown Throwable thrown) { - if (transactionObj instanceof Transaction) { - Transaction transaction = (Transaction) transactionObj; + if (transactionObj instanceof Transaction) { + Transaction transaction = (Transaction) transactionObj; transaction.captureException(thrown).deactivate(); } } @@ -261,7 +261,7 @@ public static class HandleDataAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void wrapHandler(@Advice.Argument(value = 0) Buffer requestDataBuffer, @Advice.FieldValue(value = "context") Context context) { - Transaction transaction = context.getLocal(WebHelper.CONTEXT_TRANSACTION_KEY); + Transaction transaction = context.getLocal(WebHelper.CONTEXT_TRANSACTION_KEY); helper.captureBody(transaction, requestDataBuffer); } } diff --git a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/webclient/HttpContextInstrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/webclient/HttpContextInstrumentation.java index 0eb51dfeb8..266fd8bce3 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/webclient/HttpContextInstrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/webclient/HttpContextInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx.v4.webclient; -import co.elastic.apm.agent.impl.transaction.AbstractSpan; +import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.vertx.AbstractVertxWebClientHelper; import co.elastic.apm.agent.vertx.AbstractVertxWebHelper; import co.elastic.apm.agent.vertx.v4.Vertx4Instrumentation; diff --git a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/GlobalTracer.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/GlobalTracer.java new file mode 100644 index 0000000000..0c96307ffd --- /dev/null +++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/GlobalTracer.java @@ -0,0 +1,113 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.tracer; + +import co.elastic.apm.agent.tracer.dispatch.BinaryHeaderGetter; +import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; +import co.elastic.apm.agent.tracer.pooling.ObjectPoolFactory; + +import javax.annotation.Nullable; + +public class GlobalTracer implements Tracer { + + private static final GlobalTracer INSTANCE = new GlobalTracer(); + private volatile Tracer tracer = NoopTracer.INSTANCE; + + private GlobalTracer() { + } + + public static Tracer get() { + return INSTANCE; + } + + public static synchronized void setNoop() { + boolean running = INSTANCE.tracer.isRunning(); + if (running) { + throw new IllegalStateException("Can't override tracer as current tracer is already running"); + } + INSTANCE.tracer = NoopTracer.INSTANCE; + } + + public static synchronized void init(Tracer tracer) { + if (!isNoop()) { + throw new IllegalStateException("Tracer is already initialized"); + } + INSTANCE.tracer = tracer; + } + + public static boolean isNoop() { + return INSTANCE.tracer == NoopTracer.INSTANCE; + } + + @Override + public boolean isRunning() { + return tracer.isRunning(); + } + + @Nullable + @Override + public T probe(Class type) { + return tracer.probe(type); + } + + @Override + public T require(Class type) { + return tracer.require(type); + } + + @Override + public T getConfig(Class configuration) { + return tracer.getConfig(configuration); + } + + @Override + public ObjectPoolFactory getObjectPoolFactory() { + return tracer.getObjectPoolFactory(); + } + + @Nullable + @Override + public AbstractSpan getActive() { + return tracer.getActive(); + } + + @Nullable + @Override + public Transaction currentTransaction() { + return tracer.currentTransaction(); + } + + @Nullable + @Override + public Transaction startRootTransaction(@Nullable ClassLoader initiatingClassLoader) { + return tracer.startRootTransaction(initiatingClassLoader); + } + + @Nullable + @Override + public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { + return tracer.startChildTransaction(headerCarrier, textHeadersGetter, initiatingClassLoader); + } + + @Nullable + @Override + public Transaction startChildTransaction(@Nullable C headerCarrier, BinaryHeaderGetter binaryHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { + return tracer.startChildTransaction(headerCarrier, binaryHeadersGetter, initiatingClassLoader); + } +} diff --git a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/NoopTracer.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/NoopTracer.java new file mode 100644 index 0000000000..3e9c980ec4 --- /dev/null +++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/NoopTracer.java @@ -0,0 +1,89 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.tracer; + +import co.elastic.apm.agent.tracer.dispatch.BinaryHeaderGetter; +import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; +import co.elastic.apm.agent.tracer.pooling.ObjectPoolFactory; + +import javax.annotation.Nullable; + +class NoopTracer implements Tracer { + + static final Tracer INSTANCE = new NoopTracer(); + + private NoopTracer() { + } + + @Override + public boolean isRunning() { + return false; + } + + @Nullable + @Override + public T probe(Class type) { + return null; + } + + @Override + public T require(Class type) { + throw new IllegalStateException(); + } + + @Override + public T getConfig(Class configuration) { + throw new IllegalStateException(); + } + + @Override + public ObjectPoolFactory getObjectPoolFactory() { + throw new IllegalStateException(); + } + + @Nullable + @Override + public AbstractSpan getActive() { + return null; + } + + @Nullable + @Override + public Transaction currentTransaction() { + return null; + } + + @Nullable + @Override + public Transaction startRootTransaction(@Nullable ClassLoader initiatingClassLoader) { + return null; + } + + @Nullable + @Override + public Transaction startChildTransaction(@Nullable C headerCarrier, TextHeaderGetter textHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { + return null; + } + + @Nullable + @Override + public Transaction startChildTransaction(@Nullable C headerCarrier, BinaryHeaderGetter binaryHeadersGetter, @Nullable ClassLoader initiatingClassLoader) { + return null; + } +} diff --git a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/Url.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/Url.java index 6092833fd2..490ef80bd3 100644 --- a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/Url.java +++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/Url.java @@ -33,7 +33,7 @@ public interface Url { */ void fillFrom(URI uri); - void fillFrom(@Nullable String scheme, @Nullable String serverName, int serverPort, @Nullable String requestURI, @Nullable String queryString); + void fillFrom(@Nullable String protocol, @Nullable String hostname, int port, @Nullable String pathname, @Nullable String search); /** * The protocol of the request, e.g. 'https:'. diff --git a/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporter.java b/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporter.java index 36f21a7fe9..811054c294 100644 --- a/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporter.java +++ b/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporter.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.configuration; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.Tracer; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.configuration.ConfigurationRegistry; @@ -38,6 +38,7 @@ public class ConfigurationExporter { public static void main(String[] args) throws Exception { ElasticApmTracer tracer = mock(ElasticApmTracer.class); + doReturn(tracer).when(tracer).require(ElasticApmTracer.class); doReturn(Tracer.TracerState.UNINITIALIZED).when(tracer).getState(); GlobalTracer.init(tracer); try { diff --git a/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporterTest.java b/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporterTest.java index 2335436166..dd6b4e3fe0 100644 --- a/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporterTest.java +++ b/apm-agent/src/test/java/co/elastic/apm/agent/configuration/ConfigurationExporterTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.MockTracer; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.impl.GlobalTracer; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.Tracer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.util.DependencyInjectingServiceLoader; @@ -88,6 +88,7 @@ class ConfigurationExporterTest { void setUp() { renderedDocumentationPath = Paths.get("../docs/configuration.asciidoc"); ElasticApmTracer tracer = mock(ElasticApmTracer.class); + doReturn(tracer).when(tracer).require(ElasticApmTracer.class); doReturn(Tracer.TracerState.UNINITIALIZED).when(tracer).getState(); GlobalTracer.init(tracer); configurationRegistry = ConfigurationRegistry.builder()