diff --git a/.ci/updatecli.d/update-json-specs.yml b/.ci/updatecli.d/update-json-specs.yml index c706d5e64f..e31e7f3206 100644 --- a/.ci/updatecli.d/update-json-specs.yml +++ b/.ci/updatecli.d/update-json-specs.yml @@ -97,14 +97,14 @@ targets: sourceid: sql_signature_examples.json kind: file spec: - file: apm-agent-core/src/test/resources/json-specs/sql_signature_examples.json + file: apm-agent-plugin-sdk/src/test/resources/json-specs/sql_signature_examples.json sql_token_examples.json: name: sql_token_examples.json scmid: default sourceid: sql_token_examples.json kind: file spec: - file: apm-agent-core/src/test/resources/json-specs/sql_token_examples.json + file: apm-agent-plugin-sdk/src/test/resources/json-specs/sql_token_examples.json w3c_distributed_tracing.json: name: w3c_distributed_tracing.json scmid: default diff --git a/apm-agent-benchmarks/src/main/java/co/elastic/apm/agent/benchmark/sql/SignatureParserBenchmark.java b/apm-agent-benchmarks/src/main/java/co/elastic/apm/agent/benchmark/sql/SignatureParserBenchmark.java index 8c775019c0..c6f4172d5e 100644 --- a/apm-agent-benchmarks/src/main/java/co/elastic/apm/agent/benchmark/sql/SignatureParserBenchmark.java +++ b/apm-agent-benchmarks/src/main/java/co/elastic/apm/agent/benchmark/sql/SignatureParserBenchmark.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.benchmark.sql; import co.elastic.apm.agent.benchmark.AbstractBenchmark; -import co.elastic.apm.agent.db.signature.SignatureParser; +import co.elastic.apm.agent.sdk.internal.db.signature.SignatureParser; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Mode; diff --git a/apm-agent-builds/apm-agent/src/test/java/co/elastic/apm/agent/PackagingTest.java b/apm-agent-builds/apm-agent/src/test/java/co/elastic/apm/agent/PackagingTest.java index 371e26bae1..5d409359ea 100644 --- a/apm-agent-builds/apm-agent/src/test/java/co/elastic/apm/agent/PackagingTest.java +++ b/apm-agent-builds/apm-agent/src/test/java/co/elastic/apm/agent/PackagingTest.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent; -import co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer; +import co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bbwarmup/WarmupInstrumentation.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bbwarmup/WarmupInstrumentation.java index 39c76e0d49..341d186d22 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bbwarmup/WarmupInstrumentation.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bbwarmup/WarmupInstrumentation.java @@ -18,10 +18,11 @@ */ package co.elastic.apm.agent.bbwarmup; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -31,13 +32,20 @@ import java.util.Collection; import java.util.Collections; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isSameClassLoader; import static net.bytebuddy.matcher.ElementMatchers.isStatic; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; -public class WarmupInstrumentation extends TracerAwareInstrumentation { +public class WarmupInstrumentation extends ElasticApmInstrumentation { + + static { + // assure initialization of tracer + @SuppressWarnings("unused") + Tracer tracer = GlobalTracer.get(); + } @Override public ElementMatcher.Junction getClassLoaderMatcher() { @@ -46,7 +54,7 @@ public ElementMatcher.Junction getClassLoaderMatcher() { // (caused by java.lang.ClassFormatError) on OpenJDK 7. // By allowing instrumentation only when the test class is loaded by the same class loader that loads this // instrumentation class, we avoid this problem and still allow it to work both on production and unit tests - return CustomElementMatchers.isSameClassLoader(PrivilegedActionUtils.getClassLoader(getClass())); + return isSameClassLoader(PrivilegedActionUtils.getClassLoader(getClass())); } @Override 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 a6f2d9e98c..05e092c94e 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 @@ -18,7 +18,8 @@ */ package co.elastic.apm.agent.bci; -import co.elastic.apm.agent.bci.bytebuddy.AnnotationValueOffsetMappingFactory; +import co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer; +import co.elastic.apm.agent.sdk.bytebuddy.AnnotationValueOffsetMappingFactory; import co.elastic.apm.agent.bci.bytebuddy.ErrorLoggingListener; import co.elastic.apm.agent.bci.bytebuddy.FailSafeDeclaredMethodsCompiler; import co.elastic.apm.agent.bci.bytebuddy.InstallationListenerImpl; @@ -28,7 +29,7 @@ import co.elastic.apm.agent.bci.bytebuddy.NonInstrumented; import co.elastic.apm.agent.bci.bytebuddy.PatchBytecodeVersionTo51Transformer; import co.elastic.apm.agent.bci.bytebuddy.RootPackageCustomLocator; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.bci.classloading.ExternalPluginClassLoader; import co.elastic.apm.agent.bci.modules.ModuleOpener; import co.elastic.apm.agent.common.ThreadUtils; @@ -48,7 +49,7 @@ import co.elastic.apm.agent.tracemethods.TraceMethodInstrumentation; import co.elastic.apm.agent.util.DependencyInjectingServiceLoader; import co.elastic.apm.agent.util.ExecutorUtils; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.ByteBuddy; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.agent.builder.AgentBuilder.RedefinitionStrategy; @@ -309,7 +310,7 @@ public void onChange(ConfigurationOption configurationOption, Object oldValue, O } public static synchronized Future reInitInstrumentation() { - final Tracer tracer = TracerAwareInstrumentation.tracer.require(Tracer.class); + final Tracer tracer = GlobalTracer.get().require(Tracer.class); if (instrumentation == null) { throw new IllegalStateException("Can't re-init agent before it has been initialized"); } diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java index c087cd2f7d..659a5b8c23 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java @@ -22,6 +22,7 @@ import co.elastic.apm.agent.bci.classloading.IndyPluginClassLoader; import co.elastic.apm.agent.bci.classloading.LookupExposer; import co.elastic.apm.agent.common.JvmRuntimeInfo; +import co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.sdk.state.CallDepth; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java index 5e95dd807d..c5b4acb347 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java @@ -18,267 +18,16 @@ */ package co.elastic.apm.agent.bci.bytebuddy; -import co.elastic.apm.agent.matcher.AnnotationMatcher; import co.elastic.apm.agent.common.util.WildcardMatcher; -import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; -import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; -import co.elastic.apm.agent.util.ClassLoaderUtils; -import co.elastic.apm.agent.common.util.Version; +import co.elastic.apm.agent.matcher.AnnotationMatcher; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.annotation.AnnotationSource; -import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; -import co.elastic.apm.agent.sdk.logging.Logger; -import co.elastic.apm.agent.sdk.logging.LoggerFactory; -import javax.annotation.Nullable; -import java.io.File; -import java.io.IOException; -import java.net.JarURLConnection; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.security.CodeSource; -import java.security.ProtectionDomain; -import java.util.Collection; import java.util.List; -import java.util.jar.Attributes; -import java.util.jar.JarFile; -import java.util.jar.Manifest; - -import static net.bytebuddy.matcher.ElementMatchers.nameContains; -import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; -import static net.bytebuddy.matcher.ElementMatchers.none; public class CustomElementMatchers { - private static final Logger logger = LoggerFactory.getLogger(CustomElementMatchers.class); - - private static final ElementMatcher.Junction.AbstractBase AGENT_CLASS_LOADER_MATCHER = new ElementMatcher.Junction.AbstractBase() { - @Override - public boolean matches(@Nullable ClassLoader classLoader) { - return ClassLoaderUtils.isAgentClassLoader(classLoader); - } - }; - - private static final ElementMatcher.Junction.AbstractBase INTERNAL_PLUGIN_CLASS_LOADER_MATCHER = new ElementMatcher.Junction.AbstractBase() { - @Override - public boolean matches(@Nullable ClassLoader classLoader) { - - boolean result = ClassLoaderUtils.isInternalPluginClassLoader(classLoader); - return result; - } - }; - - public static ElementMatcher.Junction isInAnyPackage(Collection includedPackages, - ElementMatcher.Junction defaultIfEmpty) { - if (includedPackages.isEmpty()) { - return defaultIfEmpty; - } - ElementMatcher.Junction matcher = none(); - for (String applicationPackage : includedPackages) { - matcher = matcher.or(nameStartsWith(applicationPackage)); - } - return matcher; - } - - /** - * Matches the target class loader to a given class loader by instance comparison - * - * @param other the class loader to match to - * @return {@code true} if {@code other} is the same class loader instance as the target class loader - */ - public static ElementMatcher.Junction isSameClassLoader(final ClassLoader other) { - return new ElementMatcher.Junction.AbstractBase() { - @Override - public boolean matches(@Nullable ClassLoader target) { - return target == other; - } - }; - } - - /** - * Matches only class loaders which can load a certain class. - *

- * Warning: the class will be tried to load by each class loader. - * You should choose a class which does not have optional dependencies (imports classes which are not on the class path). - * Ideally, choose an interface or annotation without dependencies. - *

- * - * @param className the name of the class to check - * @return a matcher which only matches class loaders which can load a certain class. - */ - public static ElementMatcher.Junction classLoaderCanLoadClass(final String className) { - return new ElementMatcher.Junction.AbstractBase() { - - private final boolean loadableByBootstrapClassLoader = canLoadClass(null, className); - private final WeakMap cache = WeakConcurrent.buildMap(); - - @Override - public boolean matches(@Nullable ClassLoader target) { - if (target == null) { - return loadableByBootstrapClassLoader; - } - - Boolean result = cache.get(target); - if (result == null) { - result = canLoadClass(target, className); - cache.put(target, result); - } - return result; - } - }; - } - - private static boolean canLoadClass(@Nullable ClassLoader target, String className) { - try { - final URL resource; - final String classResource = className.replace('.', '/') + ".class"; - if (target == null) { - resource = Object.class.getResource("/" + classResource); - } else { - resource = target.getResource(classResource); - } - return resource != null; - } catch (Exception ignore) { - return false; - } - } - - /** - * A matcher that checks whether the implementation version read from the MANIFEST.MF related for a given {@link ProtectionDomain} is - * lower than or equals to the limit version. Assumes a SemVer version format. - * - * @param version the version to check against - * @return an LTE SemVer matcher - */ - public static ElementMatcher.Junction implementationVersionLte(final String version) { - return implementationVersion(version, Matcher.LTE); - } - - public static ElementMatcher.Junction implementationVersionGte(final String version) { - return implementationVersion(version, Matcher.GTE); - } - - private static ElementMatcher.Junction implementationVersion(final String version, final Matcher matcher) { - return new ElementMatcher.Junction.AbstractBase() { - /** - * Returns true if the implementation version read from the manifest file referenced by the given - * {@link ProtectionDomain} is lower than or equal to the version set to this matcher - * - * @param protectionDomain a {@link ProtectionDomain} from which to look for the manifest file - * @return true if version parsed from the manifest file is lower than or equals to the matcher's version - * - * NOTE: MAY RETURN FALSE POSITIVES - returns true if matching fails, logging a warning message - */ - @Override - public boolean matches(@Nullable ProtectionDomain protectionDomain) { - try { - Version pdVersion = readImplementationVersionFromManifest(protectionDomain); - Version limitVersion = Version.of(version).withoutSuffix(); - if (pdVersion != null) { - pdVersion = pdVersion - // ignore suffixes to ensure that 4.5.13.redhat = 4.5.13 - // however, this implies that we'll match 4.5.13-SNAPSHOT = 4.5.13 - // which is not entirely correct as the snapshot may not have all the changes that are in the final version - .withoutSuffix(); - return matcher.match(pdVersion, limitVersion); - } - } catch (Exception e) { - logger.info("Cannot read implementation version based on ProtectionDomain. This should not affect " + - "your agent's functionality. Failed with message: " + e.getMessage()); - logger.debug("Implementation version parsing error: " + protectionDomain, e); - } - return true; - } - }; - } - - public static ElementMatcher.Junction isAgentClassLoader() { - return AGENT_CLASS_LOADER_MATCHER; - } - - public static ElementMatcher.Junction isInternalPluginClassLoader() { - return INTERNAL_PLUGIN_CLASS_LOADER_MATCHER; - } - - private enum Matcher { - LTE { - @Override - > boolean match(T c1, T c2) { - return c1.compareTo(c2) <= 0; - } - }, - GTE { - @Override - > boolean match(T c1, T c2) { - return c1.compareTo(c2) >= 0; - - } - }; - - abstract > boolean match(T c1, T c2); - } - - @Nullable - private static Version readImplementationVersionFromManifest(@Nullable ProtectionDomain protectionDomain) throws IOException, URISyntaxException { - Version version = null; - JarFile jarFile = null; - try { - if (protectionDomain != null) { - CodeSource codeSource = protectionDomain.getCodeSource(); - if (codeSource != null) { - URL jarUrl = codeSource.getLocation(); - if (jarUrl != null) { - // does not yet establish an actual connection - URLConnection urlConnection = jarUrl.openConnection(); - if (urlConnection instanceof JarURLConnection) { - jarFile = ((JarURLConnection) urlConnection).getJarFile(); - } else { - jarFile = new JarFile(new File(jarUrl.toURI())); - } - Manifest manifest = jarFile.getManifest(); - if (manifest != null) { - Attributes attributes = manifest.getMainAttributes(); - String manifestVersion = attributes.getValue("Implementation-Version"); - if (manifestVersion == null) { - // fallback on OSGI bundle version when impl. version not available - manifestVersion = attributes.getValue("Bundle-Version"); - } - if (manifestVersion != null) { - version = Version.of(manifestVersion); - } - - } - } - } - } else { - logger.info("Cannot read implementation version - got null ProtectionDomain"); - } - } finally { - if (jarFile != null) { - try { - jarFile.close(); - } catch (IOException e) { - logger.error("Error closing JarFile", e); - } - } - } - return version; - } - - /** - * Matches overridden methods of a super class or implemented methods of an interface. - * Recursively traverses the superclasses and interfaces. - * The the superclasses and interfaces to examine can be limited via {@link MethodHierarchyMatcher#onSuperClassesThat(ElementMatcher)}. - * - * @param methodElementMatcher The matcher which is applied on the method hierarchy - * @return a matcher which is applied on the method hierarchy - */ - public static MethodHierarchyMatcher overridesOrImplementsMethodThat(ElementMatcher methodElementMatcher) { - return new MethodHierarchyMatcher(methodElementMatcher); - } - public static ElementMatcher.Junction matches(final WildcardMatcher matcher) { return new ElementMatcher.Junction.AbstractBase() { @Override @@ -310,12 +59,4 @@ public String toString() { public static ElementMatcher.Junction annotationMatches(final String annotationWildcard) { return AnnotationMatcher.annotationMatcher(annotationWildcard); } - - public static ElementMatcher.Junction isProxy() { - return nameContains("$Proxy") - .or(nameContains("$$")) - .or(nameContains("$JaxbAccessor")) - .or(nameContains("CGLIB")) - .or(nameContains("EnhancerBy")); - } } diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java index 3fdbc018b7..7d402a17da 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.bci.classloading; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.dynamic.loading.ByteArrayClassLoader; import net.bytebuddy.dynamic.loading.PackageDefinitionStrategy; import net.bytebuddy.matcher.ElementMatcher; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bytebuddy/CustomElementMatchersProviderImpl.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bytebuddy/CustomElementMatchersProviderImpl.java new file mode 100644 index 0000000000..662a7d3294 --- /dev/null +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bytebuddy/CustomElementMatchersProviderImpl.java @@ -0,0 +1,37 @@ +/* + * 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.bytebuddy; + +import co.elastic.apm.agent.bci.classloading.IndyPluginClassLoader; +import co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers; + +import javax.annotation.Nullable; + +public class CustomElementMatchersProviderImpl implements CustomElementMatchers.CustomElementMatchersProvider { + + @Override + public boolean isAgentClassLoader(@Nullable ClassLoader classLoader) { + return classLoader != null && classLoader.getClass().getName().startsWith("co.elastic.apm."); + } + + @Override + public boolean isInternalPluginClassLoader(@Nullable ClassLoader classLoader) { + return classLoader instanceof IndyPluginClassLoader; + } +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/package-info.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bytebuddy/package-info.java similarity index 95% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/cache/package-info.java rename to apm-agent-core/src/main/java/co/elastic/apm/agent/bytebuddy/package-info.java index 887e6675be..0231dc5d86 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/package-info.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bytebuddy/package-info.java @@ -17,6 +17,6 @@ * under the License. */ @NonnullApi -package co.elastic.apm.agent.cache; +package co.elastic.apm.agent.bytebuddy; import co.elastic.apm.agent.sdk.NonnullApi; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServerlessConfiguration.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServerlessConfiguration.java index ee7ee259a4..36875fbf04 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServerlessConfiguration.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServerlessConfiguration.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.configuration; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationOptionProvider; @@ -31,7 +31,7 @@ public ServerlessConfiguration() { String lambdaName = PrivilegedActionUtils.getEnv("AWS_LAMBDA_FUNCTION_NAME"); this.runsOnAwsLambda = null != lambdaName && !lambdaName.isEmpty(); } - + private final ConfigurationOption awsLambdaHandler = ConfigurationOption.stringOption() .key("aws_lambda_handler") .tags("added[1.28.0]") diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServiceInfo.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServiceInfo.java index 7d6e36b769..b003a2256f 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServiceInfo.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ServiceInfo.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.configuration; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import java.util.Map; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/source/ConfigSources.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/source/ConfigSources.java index 1c3af4e040..cf56cfb2de 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/source/ConfigSources.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/source/ConfigSources.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.configuration.source; import co.elastic.apm.agent.common.util.SystemStandardOutputLogger; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import org.stagemonitor.configuration.source.SimpleSource; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java index efe3f01439..0a4f09b84c 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java @@ -58,8 +58,8 @@ import co.elastic.apm.agent.tracer.Scope; import co.elastic.apm.agent.tracer.dispatch.BinaryHeaderGetter; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; -import co.elastic.apm.agent.util.PrivilegedActionUtils; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.configuration.ConfigurationRegistry; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Request.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Request.java index 1cc79d026c..028882f4e6 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Request.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Request.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.objectpool.Resetter; import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool; import co.elastic.apm.agent.report.serialize.SerializationConstants; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import co.elastic.apm.agent.tracer.pooling.Allocator; import co.elastic.apm.agent.tracer.pooling.Recyclable; import org.jctools.queues.atomic.MpmcAtomicArrayQueue; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Response.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Response.java index b5809c6257..811f89293a 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Response.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/Response.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.impl.context; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import co.elastic.apm.agent.tracer.pooling.Recyclable; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/SanitizingWebProcessor.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/SanitizingWebProcessor.java index 85c2793790..45f30d5ab1 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/SanitizingWebProcessor.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/SanitizingWebProcessor.java @@ -23,7 +23,7 @@ import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.report.processor.Processor; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import org.stagemonitor.configuration.ConfigurationRegistry; import static co.elastic.apm.agent.impl.context.AbstractContext.REDACTED_CONTEXT_STRING; 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 ced67db9bb..4c66219266 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 @@ -22,7 +22,7 @@ import co.elastic.apm.agent.configuration.ActivationMethod; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import java.lang.management.ManagementFactory; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java index b1a13e551a..cf2f39cab8 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java @@ -21,7 +21,7 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.ServerlessConfiguration; import co.elastic.apm.agent.util.ExecutorUtils; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import co.elastic.apm.agent.util.UrlConnectionUtils; import com.dslplatform.json.DslJson; import com.dslplatform.json.JsonReader; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/ServiceFactory.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/ServiceFactory.java index 11c5c81023..2a75c6b188 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/ServiceFactory.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/ServiceFactory.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.impl.metadata; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import co.elastic.apm.agent.util.VersionUtils; public class ServiceFactory { diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java index 2f7b46ef36..d80a3dba88 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java @@ -18,14 +18,15 @@ */ package co.elastic.apm.agent.impl.transaction; -import co.elastic.apm.agent.collections.LongList; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.context.AbstractContext; import co.elastic.apm.agent.report.ReporterConfiguration; +import co.elastic.apm.agent.sdk.internal.collections.LongList; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; import co.elastic.apm.agent.tracer.Outcome; import co.elastic.apm.agent.tracer.Scope; import co.elastic.apm.agent.tracer.dispatch.BinaryHeaderGetter; @@ -34,7 +35,6 @@ import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; import co.elastic.apm.agent.tracer.dispatch.TextHeaderSetter; import co.elastic.apm.agent.tracer.pooling.Recyclable; -import co.elastic.apm.agent.util.LoggerUtils; import javax.annotation.Nullable; import java.util.HashMap; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/MultiValueMapAccessor.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/MultiValueMapAccessor.java index bbe4743375..cb87b651b0 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/MultiValueMapAccessor.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/MultiValueMapAccessor.java @@ -18,11 +18,11 @@ */ package co.elastic.apm.agent.impl.transaction; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; import co.elastic.apm.agent.tracer.dispatch.AbstractHeaderGetter; import co.elastic.apm.agent.tracer.dispatch.HeaderRemover; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; import co.elastic.apm.agent.tracer.dispatch.TextHeaderSetter; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java index 4622daac3c..b230253ace 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java @@ -25,7 +25,7 @@ import co.elastic.apm.agent.impl.context.ServiceTarget; import co.elastic.apm.agent.impl.context.SpanContext; import co.elastic.apm.agent.impl.context.Url; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.tracer.Outcome; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Transaction.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Transaction.java index 92edcf056d..7a65c13033 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Transaction.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Transaction.java @@ -24,7 +24,7 @@ import co.elastic.apm.agent.impl.ElasticApmTracer; 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.tracer.util.ResultUtil; import co.elastic.apm.agent.impl.sampling.Sampler; import co.elastic.apm.agent.metrics.Labels; import co.elastic.apm.agent.metrics.MetricRegistry; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java index 123a6c5c99..72ea93cb44 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java @@ -23,7 +23,7 @@ import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.util.ExecutorUtils; -import co.elastic.apm.agent.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; import com.dslplatform.json.DslJson; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java index 8fbbee0328..14f339f9bf 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.report.serialize; -import co.elastic.apm.agent.collections.LongList; +import co.elastic.apm.agent.sdk.internal.collections.LongList; import co.elastic.apm.agent.impl.context.AbstractContext; import co.elastic.apm.agent.impl.context.CloudOrigin; import co.elastic.apm.agent.impl.context.Db; @@ -64,9 +64,9 @@ import co.elastic.apm.agent.report.ApmServerClient; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import co.elastic.apm.agent.tracer.pooling.Recyclable; import co.elastic.apm.agent.util.HexUtils; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; import com.dslplatform.json.BoolConverter; import com.dslplatform.json.DslJson; import com.dslplatform.json.JsonWriter; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java index f29131a83b..18d62c95d8 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import javax.net.ssl.HostnameVerifier; 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 d644377097..82178d708d 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 @@ -18,19 +18,19 @@ */ package co.elastic.apm.agent.tracemethods; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.configuration.CoreConfiguration; 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.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.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.tracer.GlobalTracer; 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; import net.bytebuddy.description.type.TypeDescription; @@ -43,7 +43,7 @@ import java.util.Collections; import java.util.List; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.matches; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; @@ -55,7 +55,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -public class TraceMethodInstrumentation extends TracerAwareInstrumentation { +public class TraceMethodInstrumentation extends ElasticApmInstrumentation { private final MethodMatcher methodMatcher; private final CoreConfiguration config; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java index 70596a7303..854287b7ca 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java @@ -22,6 +22,7 @@ import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.tracer.pooling.Recyclable; +import co.elastic.apm.agent.sdk.internal.util.IOUtils; import javax.annotation.Nullable; import java.nio.Buffer; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ClassLoaderUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ClassLoaderUtils.java deleted file mode 100644 index 37df1d8b8d..0000000000 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ClassLoaderUtils.java +++ /dev/null @@ -1,43 +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.util; - -import co.elastic.apm.agent.bci.classloading.IndyPluginClassLoader; - -import javax.annotation.Nullable; - -public class ClassLoaderUtils { - - public static boolean isAgentClassLoader(@Nullable ClassLoader classLoader) { - return (classLoader != null && classLoader.getClass().getName().startsWith("co.elastic.apm")) || - // This one also covers unit tests, where the app class loader loads the agent - PrivilegedActionUtils.getClassLoader(ClassLoaderUtils.class).equals(classLoader); - } - - public static boolean isBootstrapClassLoader(@Nullable ClassLoader classLoader) { - return classLoader == null; - } - - public static boolean isInternalPluginClassLoader(@Nullable ClassLoader classLoader) { - if (classLoader == null) { - return false; - } - return IndyPluginClassLoader.class.getName().equals(classLoader.getClass().getName()); - } -} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java index 1362a79213..9b70afb1a3 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java @@ -20,6 +20,7 @@ import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import java.io.BufferedReader; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java index c2b038b040..cf138980d8 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java @@ -23,6 +23,7 @@ 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.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import java.util.concurrent.CancellationException; @@ -47,7 +48,6 @@ public final class ExecutorUtils { private static volatile ElasticThreadStateListener threadStateListener = null; private ExecutorUtils() { - // don't instantiate } public static ScheduledThreadPoolExecutor createSingleThreadSchedulingDaemonPool(final String threadPurpose) { diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtilsProviderImpl.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtilsProviderImpl.java new file mode 100644 index 0000000000..8c736468e8 --- /dev/null +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtilsProviderImpl.java @@ -0,0 +1,43 @@ +/* + * 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.util; + +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; + +import static co.elastic.apm.agent.sdk.internal.util.ExecutorUtils.*; + +public class ExecutorUtilsProviderImpl implements ExecutorUtilsProvider { + + @Override + public boolean isAgentExecutor(Executor executor) { + return ExecutorUtils.isAgentExecutor(executor); + } + + @Override + public ScheduledExecutorService createSingleThreadSchedulingDaemonPool(String threadPurpose) { + return ExecutorUtils.createSingleThreadSchedulingDaemonPool(threadPurpose); + } + + @Override + public void shutdownAndWaitTermination(ExecutorService executor) { + ExecutorUtils.shutdownAndWaitTermination(executor); + } +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/PotentiallyMultiValuedMap.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/PotentiallyMultiValuedMap.java deleted file mode 100644 index 279a3f7f30..0000000000 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/PotentiallyMultiValuedMap.java +++ /dev/null @@ -1,205 +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.util; - -import co.elastic.apm.agent.tracer.pooling.Recyclable; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * This map is a mixture of a map with a single value and a map with multiple values. - *

- * When there is only one value associated with a key, this map just the key as-is when calling {@link #get(String)}. - * But when {@link #add(String, String)} has been called multiple times for a given key, - * {@link #get(String)} will return a collection of values. - *

- */ -public class PotentiallyMultiValuedMap implements Recyclable, co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap { - - private final List keys; - private final List values; - - public PotentiallyMultiValuedMap() { - this(10); - } - - public PotentiallyMultiValuedMap(int initialSize) { - keys = new ArrayList<>(initialSize); - values = new ArrayList<>(initialSize); - } - - /** - * Adds a value to this map. - *

- * If the given key already exists, - * the current value and the given value are added to a collection, - * which is set as the new value. - *

- * - * @param key The key. - * @param value The value. - */ - @Override - public void add(String key, String value) { - final int index = indexOfIgnoreCase(key); - if (index >= 0) { - Object previousValue = values.get(index); - if (previousValue instanceof List) { - addValueToValueList(value, (List) previousValue); - } else { - convertValueToMultiValue(index, (String) previousValue, value); - } - } else { - keys.add(key); - values.add(value); - } - } - - - public void set(String key, String[] values) { - if (values.length > 0) { - if (values.length == 1) { - keys.add(key); - this.values.add(values[0]); - } else { - keys.add(key); - this.values.add(Arrays.asList(values)); - } - } - } - - private int indexOfIgnoreCase(String key) { - for (int i = 0; i < keys.size(); i++) { - if (keys.get(i).equalsIgnoreCase(key)) { - return i; - } - } - return -1; - } - - /** - * Gets the first value which is associated with a given key. - * - * @param key The key you want to get the associated value for. - * @return The first value which is associated with a given key. - */ - @Override - @Nullable - public String getFirst(String key) { - Object valueOrValueList = get(key); - if (valueOrValueList instanceof List) { - return (String) ((List) valueOrValueList).get(0); - } else { - return (String) valueOrValueList; - } - } - - @Override - @Nullable - public Object get(String key) { - final int index = indexOfIgnoreCase(key); - if (index == -1) { - return null; - } - return values.get(index); - } - - /** - * Gets all the values which age associated with a given key. - *

- * If there is only one value associated with the given key, - * the value is wrapped inside a collection. - *

- * - * @param key The key you want to get the associated value for. - * @return All the values which age associated with a given key. - */ - public List getAll(String key) { - final int index = indexOfIgnoreCase(key); - if (index == -1) { - return Collections.emptyList(); - } - Object valueOrValueList = values.get(index); - if (valueOrValueList instanceof List) { - return (List) valueOrValueList; - } else { - return Collections.singletonList((String) valueOrValueList); - } - } - - private void addValueToValueList(String value, List valueList) { - valueList.add(value); - } - - private void convertValueToMultiValue(int index, String previousValue, String value) { - List valueList = new ArrayList<>(4); - valueList.add(previousValue); - valueList.add(value); - values.set(index, valueList); - } - - @Override - public boolean isEmpty() { - return keys.isEmpty(); - } - - @Override - public void resetState() { - keys.clear(); - values.clear(); - } - - public String getKey(int i) { - return keys.get(i); - } - - public Object getValue(int i) { - return values.get(i); - } - - public int size() { - return keys.size(); - } - - public void copyFrom(PotentiallyMultiValuedMap other) { - this.keys.addAll(other.keys); - this.values.addAll(other.values); - } - - public void removeIgnoreCase(String key) { - final int index = indexOfIgnoreCase(key); - if (index != -1) { - keys.remove(index); - values.remove(index); - } - } - - public void set(int index, String value) { - values.set(index, value); - } - - @Override - public boolean containsIgnoreCase(String key) { - return indexOfIgnoreCase(key) != -1; - } -} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/UrlConnectionUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/UrlConnectionUtils.java index d66abe7473..631e1f18d1 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/UrlConnectionUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/UrlConnectionUtils.java @@ -18,6 +18,8 @@ */ package co.elastic.apm.agent.util; +import co.elastic.apm.agent.tracer.GlobalLocks; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/VersionUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/VersionUtils.java index f357ab7b26..64424028d0 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/VersionUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/VersionUtils.java @@ -21,6 +21,7 @@ import co.elastic.apm.agent.bci.ElasticApmAgent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import java.io.File; diff --git a/apm-agent-core/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers$CustomElementMatchersProvider b/apm-agent-core/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers$CustomElementMatchersProvider new file mode 100644 index 0000000000..b35c1aabbc --- /dev/null +++ b/apm-agent-core/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers$CustomElementMatchersProvider @@ -0,0 +1 @@ +co.elastic.apm.agent.bytebuddy.CustomElementMatchersProviderImpl diff --git a/apm-agent-core/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.util.ExecutorUtils$ExecutorUtilsProvider b/apm-agent-core/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.util.ExecutorUtils$ExecutorUtilsProvider new file mode 100644 index 0000000000..8be7d4b366 --- /dev/null +++ b/apm-agent-core/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.util.ExecutorUtils$ExecutorUtilsProvider @@ -0,0 +1 @@ +co.elastic.apm.agent.util.ExecutorUtilsProviderImpl diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/InstrumentationTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/InstrumentationTest.java index 6001ffe984..f564dc6d22 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/InstrumentationTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/InstrumentationTest.java @@ -491,7 +491,7 @@ private String interceptMe() { return ""; } - public static class TestInstrumentation extends TracerAwareInstrumentation { + public static class TestInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(inline = false) @@ -541,7 +541,7 @@ public static int getCounter() { } } - public static class MathInstrumentation extends TracerAwareInstrumentation { + public static class MathInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(inline = false) @@ -567,7 +567,7 @@ public Collection getInstrumentationGroupNames() { } - public static class ExceptionInstrumentation extends TracerAwareInstrumentation { + public static class ExceptionInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.OnMethodExit(inline = false) public static void onMethodExit() { @@ -592,7 +592,7 @@ public Collection getInstrumentationGroupNames() { } - public static class SuppressExceptionInstrumentation extends TracerAwareInstrumentation { + public static class SuppressExceptionInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static String onMethodEnter() { @@ -623,7 +623,7 @@ public Collection getInstrumentationGroupNames() { } - public static class FieldAccessInstrumentation extends TracerAwareInstrumentation { + public static class FieldAccessInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToFields(@ToField(value = "privateString", typing = DYNAMIC)) @@ -650,7 +650,7 @@ public Collection getInstrumentationGroupNames() { } - public static class FieldAccessArrayInstrumentation extends TracerAwareInstrumentation { + public static class FieldAccessArrayInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToFields(@ToField(index = 0, value = "privateString", typing = DYNAMIC)) @@ -677,7 +677,7 @@ public Collection getInstrumentationGroupNames() { } - public static class AssignToArgumentInstrumentation extends TracerAwareInstrumentation { + public static class AssignToArgumentInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToArguments(@ToArgument(0)) @@ -704,7 +704,7 @@ public Collection getInstrumentationGroupNames() { } - public static class AssignToArgumentsInstrumentation extends TracerAwareInstrumentation { + public static class AssignToArgumentsInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToArguments({ @@ -734,7 +734,7 @@ public Collection getInstrumentationGroupNames() { } - public static class AssignToReturnArrayInstrumentation extends TracerAwareInstrumentation { + public static class AssignToReturnArrayInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToReturned(index = 0, typing = DYNAMIC) @@ -761,7 +761,7 @@ public Collection getInstrumentationGroupNames() { } - public static class CommonsLangInstrumentation extends TracerAwareInstrumentation { + public static class CommonsLangInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { public static AtomicInteger enterCount = GlobalVariables.get(CommonsLangInstrumentation.class, "enterCount", new AtomicInteger()); @@ -795,7 +795,7 @@ public Collection getInstrumentationGroupNames() { } - public static class LoggerFactoryInstrumentation extends TracerAwareInstrumentation { + public static class LoggerFactoryInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { public static AtomicInteger enterCount = GlobalVariables.get(LoggerFactoryInstrumentation.class, "enterCount", new AtomicInteger()); @@ -829,7 +829,7 @@ public Collection getInstrumentationGroupNames() { } - public static class StatUtilsInstrumentation extends TracerAwareInstrumentation { + public static class StatUtilsInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { public static AtomicInteger enterCount = GlobalVariables.get(StatUtilsInstrumentation.class, "enterCount", new AtomicInteger()); @@ -863,7 +863,7 @@ public Collection getInstrumentationGroupNames() { } - public static class LogManagerInstrumentation extends TracerAwareInstrumentation { + public static class LogManagerInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { public static AtomicInteger enterCount = GlobalVariables.get(LogManagerInstrumentation.class, "enterCount", new AtomicInteger()); @@ -897,7 +897,7 @@ public Collection getInstrumentationGroupNames() { } - public static class CallStackUtilsInstrumentation extends TracerAwareInstrumentation { + public static class CallStackUtilsInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { public static AtomicInteger enterCount = GlobalVariables.get(CallStackUtilsInstrumentation.class, "enterCount", new AtomicInteger()); @@ -931,7 +931,7 @@ public Collection getInstrumentationGroupNames() { } - public static class ClassLoadingTestInstrumentation extends TracerAwareInstrumentation { + public static class ClassLoadingTestInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToReturned @@ -958,7 +958,7 @@ public Collection getInstrumentationGroupNames() { } - public static class InlinedIndyAdviceInstrumentation extends TracerAwareInstrumentation { + public static class InlinedIndyAdviceInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.OnMethodEnter @@ -983,7 +983,7 @@ public Collection getInstrumentationGroupNames() { } - public static class AgentTypeReturnInstrumentation extends TracerAwareInstrumentation { + public static class AgentTypeReturnInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.OnMethodEnter(inline = false) @@ -1009,7 +1009,7 @@ public Collection getInstrumentationGroupNames() { } - public static class AgentTypeParameterInstrumentation extends TracerAwareInstrumentation { + public static class AgentTypeParameterInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.OnMethodEnter(inline = false) @@ -1039,7 +1039,7 @@ public Collection getInstrumentationGroupNames() { } - public static class GetClassLoaderInstrumentation extends TracerAwareInstrumentation { + public static class GetClassLoaderInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToReturned diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextTest.java index 8de27f8ff2..2c75ccc6bc 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextTest.java @@ -29,8 +29,8 @@ import co.elastic.apm.agent.impl.sampling.ConstantSampler; import co.elastic.apm.agent.impl.sampling.Sampler; import co.elastic.apm.agent.objectpool.TestObjectPoolFactory; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import co.elastic.apm.agent.util.HexUtils; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; import co.elastic.apm.agent.tracer.dispatch.BinaryHeaderSetter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -39,7 +39,6 @@ import org.stagemonitor.configuration.ConfigurationRegistry; import javax.annotation.Nullable; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.Random; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextW3CTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextW3CTest.java index 4e0273f288..914ff65aae 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextW3CTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/transaction/TraceContextW3CTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.MockTracer; import co.elastic.apm.agent.impl.ElasticApmTracer; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import com.fasterxml.jackson.databind.JsonNode; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java index 1ddb5c9a3d..d40c1498cf 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.logging.instr; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; import net.bytebuddy.asm.Advice; @@ -36,7 +36,7 @@ * Instruments {@link LoggingConfigurationTest.LoggerTest#getLogger()} */ @SuppressWarnings("JavadocReference") -public class LoggerTestInstrumentation extends TracerAwareInstrumentation { +public class LoggerTestInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/QueueBasedObjectPoolTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/QueueBasedObjectPoolTest.java index 49cdba10cf..4edae48c03 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/QueueBasedObjectPoolTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/QueueBasedObjectPoolTest.java @@ -21,9 +21,18 @@ import co.elastic.apm.agent.objectpool.ObjectPool; import co.elastic.apm.agent.objectpool.ObjectPoolTest; import co.elastic.apm.agent.objectpool.TestRecyclable; +import co.elastic.apm.agent.sdk.internal.util.IOUtils; import org.jctools.queues.atomic.MpmcAtomicArrayQueue; import org.junit.jupiter.api.Test; +import javax.annotation.Nonnull; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.CharBuffer; +import java.nio.charset.Charset; +import java.util.concurrent.ArrayBlockingQueue; + +import static java.nio.charset.StandardCharsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; class QueueBasedObjectPoolTest extends ObjectPoolTest> { @@ -43,4 +52,26 @@ void preAllocationShouldCreateObjectsInPool() { assertThat(pool.getGarbageCreated()).isEqualTo(0); assertThat(pool.getObjectsInPool()).isEqualTo(capacity); } + + @Test + void testReusedBuffer() throws IOException { + final QueueBasedObjectPool charBuffers = QueueBasedObjectPool.of(new ArrayBlockingQueue<>(1), true, + () -> CharBuffer.allocate(8), CharBuffer::clear); + + final CharBuffer charBuffer1 = charBuffers.createInstance(); + assertThat(IOUtils.readUtf8Stream(toInputStream("foo", UTF_8), charBuffer1)).isTrue(); + assertThat(charBuffer1.toString()).isEqualTo("foo"); + + charBuffers.recycle(charBuffer1); + + final CharBuffer charBuffer2 = charBuffers.createInstance(); + assertThat(IOUtils.readUtf8Stream(toInputStream("barbaz", UTF_8), charBuffer2)).isTrue(); + assertThat(charBuffer2.toString()).isEqualTo("barbaz"); + assertThat((Object) charBuffer1).isSameAs(charBuffer2); + } + + @Nonnull + private ByteArrayInputStream toInputStream(String s, Charset charset) { + return new ByteArrayInputStream(s.getBytes(charset)); + } } diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/report/serialize/DslJsonSerializerTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/report/serialize/DslJsonSerializerTest.java index 3b6260afa0..ccfd0882db 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/report/serialize/DslJsonSerializerTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/report/serialize/DslJsonSerializerTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.MockReporter; import co.elastic.apm.agent.MockTracer; -import co.elastic.apm.agent.collections.LongList; +import co.elastic.apm.agent.sdk.internal.collections.LongList; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.configuration.ServerlessConfiguration; import co.elastic.apm.agent.configuration.SpyConfiguration; @@ -56,7 +56,7 @@ import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.report.ApmServerClient; -import co.elastic.apm.agent.util.IOUtils; +import co.elastic.apm.agent.sdk.internal.util.IOUtils; import com.dslplatform.json.JsonWriter; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/testinstr/SystemEnvVariableInstrumentation.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/testinstr/SystemEnvVariableInstrumentation.java index 5d263dc6d3..0bf2a26e10 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/testinstr/SystemEnvVariableInstrumentation.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/testinstr/SystemEnvVariableInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.testinstr; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.state.GlobalVariables; import co.elastic.apm.agent.sdk.weakconcurrent.DetachedThreadLocal; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; @@ -34,7 +34,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; -public abstract class SystemEnvVariableInstrumentation extends TracerAwareInstrumentation { +public abstract class SystemEnvVariableInstrumentation extends ElasticApmInstrumentation { private static final DetachedThreadLocal> customEnvVariablesTL = GlobalVariables .get(SystemEnvVariableInstrumentation.class, "customEnvVariables", WeakConcurrent.>buildThreadLocal()); diff --git a/apm-agent-core/src/test/java/co/elastic/test/ChildFirstURLClassLoader.java b/apm-agent-core/src/test/java/co/elastic/test/ChildFirstURLClassLoader.java index 978a015b16..9a273d17e5 100644 --- a/apm-agent-core/src/test/java/co/elastic/test/ChildFirstURLClassLoader.java +++ b/apm-agent-core/src/test/java/co/elastic/test/ChildFirstURLClassLoader.java @@ -18,7 +18,6 @@ */ package co.elastic.test; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; import co.elastic.apm.agent.testutils.JUnit4TestClassWithDependencyRunner; import java.io.IOException; @@ -34,7 +33,7 @@ * Specifically, used within {@link JUnit4TestClassWithDependencyRunner} for tests that require encapsulated * test classpath, for example - for testing specific library versions. * In order for classes that are loaded by this class loader to be instrumented, it must be outside of the {@code co.elastic.apm} - * package, otherwise it may be excluded if tested through {@link CustomElementMatchers#isAgentClassLoader()}. + * package, otherwise it may be excluded if tested through {@link co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers#isAgentClassLoader()}. */ public class ChildFirstURLClassLoader extends URLClassLoader { diff --git a/apm-agent-core/src/test/java/specs/OutcomeStepsDefinitions.java b/apm-agent-core/src/test/java/specs/OutcomeStepsDefinitions.java index 90069d652f..7ba00b5f35 100644 --- a/apm-agent-core/src/test/java/specs/OutcomeStepsDefinitions.java +++ b/apm-agent-core/src/test/java/specs/OutcomeStepsDefinitions.java @@ -18,7 +18,7 @@ */ package specs; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.tracer.Outcome; import co.elastic.apm.agent.impl.transaction.Span; diff --git a/apm-agent-plugin-sdk/pom.xml b/apm-agent-plugin-sdk/pom.xml index ffa2983d25..01e61362be 100644 --- a/apm-agent-plugin-sdk/pom.xml +++ b/apm-agent-plugin-sdk/pom.xml @@ -25,6 +25,12 @@ net.bytebuddy byte-buddy-dep + + org.apache.httpcomponents + httpclient + 4.5.6 + test + @@ -50,6 +56,14 @@ + + + test-jar + + test-jar + + + diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/AnnotationValueOffsetMappingFactory.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/AnnotationValueOffsetMappingFactory.java similarity index 99% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/AnnotationValueOffsetMappingFactory.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/AnnotationValueOffsetMappingFactory.java index e5b7d670f6..98e1d433c8 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/AnnotationValueOffsetMappingFactory.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/AnnotationValueOffsetMappingFactory.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.bci.bytebuddy; +package co.elastic.apm.agent.sdk.bytebuddy; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchers.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchers.java new file mode 100644 index 0000000000..f7af74d8a0 --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchers.java @@ -0,0 +1,294 @@ +/* + * 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.sdk.bytebuddy; + +import co.elastic.apm.agent.sdk.internal.InternalUtil; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import net.bytebuddy.description.NamedElement; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; + +import javax.annotation.Nullable; +import java.io.File; +import java.io.IOException; +import java.net.JarURLConnection; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; +import java.security.CodeSource; +import java.security.ProtectionDomain; +import java.util.Collection; +import java.util.jar.Attributes; +import java.util.jar.JarFile; +import java.util.jar.Manifest; + +import static net.bytebuddy.matcher.ElementMatchers.nameContains; +import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; +import static net.bytebuddy.matcher.ElementMatchers.none; + +public class CustomElementMatchers { + + private static final Logger logger = LoggerFactory.getLogger(CustomElementMatchers.class); + + @Nullable + private static final ClassLoader SELF_CLASS_LOADER = PrivilegedActionUtils.getClassLoader(CustomElementMatchers.class); + + private static final CustomElementMatchersProvider supplier = InternalUtil.getServiceProvider(CustomElementMatchersProvider.class); + + private static final ElementMatcher.Junction.AbstractBase AGENT_CLASS_LOADER_MATCHER = new ElementMatcher.Junction.AbstractBase() { + @Override + public boolean matches(@Nullable ClassLoader classLoader) { + if (classLoader == SELF_CLASS_LOADER) { + // This one also covers unit tests, where the app class loader loads the agent + return true; + } + return supplier.isAgentClassLoader(classLoader); + } + }; + + private static final ElementMatcher.Junction.AbstractBase INTERNAL_PLUGIN_CLASS_LOADER_MATCHER = new ElementMatcher.Junction.AbstractBase() { + @Override + public boolean matches(@Nullable ClassLoader classLoader) { + return supplier.isInternalPluginClassLoader(classLoader); + } + }; + + /** + * Matches the target class loader to a given class loader by instance comparison + * + * @param other the class loader to match to + * @return {@code true} if {@code other} is the same class loader instance as the target class loader + */ + public static ElementMatcher.Junction isSameClassLoader(final ClassLoader other) { + return new ElementMatcher.Junction.AbstractBase() { + @Override + public boolean matches(@Nullable ClassLoader target) { + return target == other; + } + }; + } + + public static ElementMatcher.Junction isAgentClassLoader() { + return AGENT_CLASS_LOADER_MATCHER; + } + + public static ElementMatcher.Junction isInternalPluginClassLoader() { + return INTERNAL_PLUGIN_CLASS_LOADER_MATCHER; + } + + public static ElementMatcher.Junction isInAnyPackage(Collection includedPackages, + ElementMatcher.Junction defaultIfEmpty) { + if (includedPackages.isEmpty()) { + return defaultIfEmpty; + } + ElementMatcher.Junction matcher = none(); + for (String applicationPackage : includedPackages) { + matcher = matcher.or(nameStartsWith(applicationPackage)); + } + return matcher; + } + + /** + * Matches only class loaders which can load a certain class. + *

+ * Warning: the class will be tried to load by each class loader. + * You should choose a class which does not have optional dependencies (imports classes which are not on the class path). + * Ideally, choose an interface or annotation without dependencies. + *

+ * + * @param className the name of the class to check + * @return a matcher which only matches class loaders which can load a certain class. + */ + public static ElementMatcher.Junction classLoaderCanLoadClass(final String className) { + return new ElementMatcher.Junction.AbstractBase() { + + private final boolean loadableByBootstrapClassLoader = canLoadClass(null, className); + private final WeakMap cache = WeakConcurrent.buildMap(); + + @Override + public boolean matches(@Nullable ClassLoader target) { + if (target == null) { + return loadableByBootstrapClassLoader; + } + + Boolean result = cache.get(target); + if (result == null) { + result = canLoadClass(target, className); + cache.put(target, result); + } + return result; + } + }; + } + + private static boolean canLoadClass(@Nullable ClassLoader target, String className) { + try { + final URL resource; + final String classResource = className.replace('.', '/') + ".class"; + if (target == null) { + resource = Object.class.getResource("/" + classResource); + } else { + resource = target.getResource(classResource); + } + return resource != null; + } catch (Exception ignore) { + return false; + } + } + + /** + * Matches overridden methods of a super class or implemented methods of an interface. + * Recursively traverses the superclasses and interfaces. + * The the superclasses and interfaces to examine can be limited via {@link MethodHierarchyMatcher#onSuperClassesThat(ElementMatcher)}. + * + * @param methodElementMatcher The matcher which is applied on the method hierarchy + * @return a matcher which is applied on the method hierarchy + */ + public static MethodHierarchyMatcher overridesOrImplementsMethodThat(ElementMatcher methodElementMatcher) { + return new MethodHierarchyMatcher(methodElementMatcher); + } + + public static ElementMatcher.Junction isProxy() { + return nameContains("$Proxy") + .or(nameContains("$$")) + .or(nameContains("$JaxbAccessor")) + .or(nameContains("CGLIB")) + .or(nameContains("EnhancerBy")); + } + + /** + * A matcher that checks whether the implementation version read from the MANIFEST.MF related for a given {@link ProtectionDomain} is + * lower than or equals to the limit version. Assumes a SemVer version format. + * + * @param version the version to check against + * @return an LTE SemVer matcher + */ + public static ElementMatcher.Junction implementationVersionLte(final String version) { + return implementationVersion(version, Matcher.LTE); + } + + public static ElementMatcher.Junction implementationVersionGte(final String version) { + return implementationVersion(version, Matcher.GTE); + } + + private static ElementMatcher.Junction implementationVersion(final String version, final Matcher matcher) { + return new ElementMatcher.Junction.AbstractBase() { + /** + * Returns true if the implementation version read from the manifest file referenced by the given + * {@link ProtectionDomain} is lower than or equal to the version set to this matcher + * + * @param protectionDomain a {@link ProtectionDomain} from which to look for the manifest file + * @return true if version parsed from the manifest file is lower than or equals to the matcher's version + * + * NOTE: MAY RETURN FALSE POSITIVES - returns true if matching fails, logging a warning message + */ + @Override + public boolean matches(@Nullable ProtectionDomain protectionDomain) { + try { + Version pdVersion = readImplementationVersionFromManifest(protectionDomain); + if (pdVersion != null) { + Version limitVersion = Version.of(version); + return matcher.match(pdVersion, limitVersion); + } + } catch (Exception e) { + logger.info("Cannot read implementation version based on ProtectionDomain. This should not affect " + + "your agent's functionality. Failed with message: " + e.getMessage()); + logger.debug("Implementation version parsing error: " + protectionDomain, e); + } + return true; + } + }; + } + + @Nullable + private static Version readImplementationVersionFromManifest(@Nullable ProtectionDomain protectionDomain) throws IOException, URISyntaxException { + Version version = null; + JarFile jarFile = null; + try { + if (protectionDomain != null) { + CodeSource codeSource = protectionDomain.getCodeSource(); + if (codeSource != null) { + URL jarUrl = codeSource.getLocation(); + if (jarUrl != null) { + // does not yet establish an actual connection + URLConnection urlConnection = jarUrl.openConnection(); + if (urlConnection instanceof JarURLConnection) { + jarFile = ((JarURLConnection) urlConnection).getJarFile(); + } else { + jarFile = new JarFile(new File(jarUrl.toURI())); + } + Manifest manifest = jarFile.getManifest(); + if (manifest != null) { + Attributes attributes = manifest.getMainAttributes(); + String manifestVersion = attributes.getValue("Implementation-Version"); + if (manifestVersion == null) { + // fallback on OSGI bundle version when impl. version not available + manifestVersion = attributes.getValue("Bundle-Version"); + } + if (manifestVersion != null) { + version = Version.of(manifestVersion); + } + + } + } + } + } else { + logger.info("Cannot read implementation version - got null ProtectionDomain"); + } + } finally { + if (jarFile != null) { + try { + jarFile.close(); + } catch (IOException e) { + logger.error("Error closing JarFile", e); + } + } + } + return version; + } + + private enum Matcher { + LTE { + @Override + > boolean match(T c1, T c2) { + return c1.compareTo(c2) <= 0; + } + }, + GTE { + @Override + > boolean match(T c1, T c2) { + return c1.compareTo(c2) >= 0; + + } + }; + + abstract > boolean match(T c1, T c2); + } + + public interface CustomElementMatchersProvider { + + boolean isAgentClassLoader(@Nullable ClassLoader classLoader); + + boolean isInternalPluginClassLoader(@Nullable ClassLoader classLoader); + } +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/MethodHierarchyMatcher.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/MethodHierarchyMatcher.java similarity index 99% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/MethodHierarchyMatcher.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/MethodHierarchyMatcher.java index 3d4955c995..84ec59657c 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/MethodHierarchyMatcher.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/MethodHierarchyMatcher.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.bci.bytebuddy; +package co.elastic.apm.agent.sdk.bytebuddy; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/SimpleMethodSignatureOffsetMappingFactory.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/SimpleMethodSignatureOffsetMappingFactory.java similarity index 98% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/SimpleMethodSignatureOffsetMappingFactory.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/SimpleMethodSignatureOffsetMappingFactory.java index dc3098a95b..d0bc841cd6 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/SimpleMethodSignatureOffsetMappingFactory.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/SimpleMethodSignatureOffsetMappingFactory.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.bci.bytebuddy; +package co.elastic.apm.agent.sdk.bytebuddy; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.annotation.AnnotationDescription; diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/Version.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/Version.java new file mode 100644 index 0000000000..b8e698f4c1 --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/Version.java @@ -0,0 +1,69 @@ +/* + * 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.sdk.bytebuddy; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Based on https://gist.github.com/brianguertin. + * This code was released into the public domain by Brian Guertin on July 8, 2016 citing, verbatim the unlicense. + */ +class Version implements Comparable { + + private static final Version INVALID = new Version(new int[0]); + + private static final Pattern VERSION_REGEX = Pattern.compile("^" + + "(?.*?)" + + "(?(\\d+)(\\.\\d+)*)" + + "(?.*?)" + + "$"); + + private final int[] numbers; + + static Version of(String version) { + Matcher matcher = VERSION_REGEX.matcher(version); + if (!matcher.find()) { + return INVALID; + } + final String[] parts = matcher.group("version").split("\\."); + int[] numbers = new int[parts.length]; + for (int i = 0; i < parts.length; i++) { + numbers[i] = Integer.parseInt(parts[i]); + } + return new Version(numbers); + } + + private Version(int[] numbers) { + this.numbers = numbers; + } + + @Override + public int compareTo(Version another) { + final int maxLength = Math.max(numbers.length, another.numbers.length); + for (int i = 0; i < maxLength; i++) { + final int left = i < numbers.length ? numbers[i] : 0; + final int right = i < another.numbers.length ? another.numbers[i] : 0; + if (left != right) { + return left < right ? -1 : 1; + } + } + return 0; + } +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/annotation/package-info.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/package-info.java similarity index 95% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/annotation/package-info.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/package-info.java index c4bd7c26aa..44fe9c0459 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/annotation/package-info.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/bytebuddy/package-info.java @@ -17,6 +17,6 @@ * under the License. */ @NonnullApi -package co.elastic.apm.agent.annotation; +package co.elastic.apm.agent.sdk.bytebuddy; import co.elastic.apm.agent.sdk.NonnullApi; diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/InternalUtil.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/InternalUtil.java index 157e851352..eaf79cdf07 100644 --- a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/InternalUtil.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/InternalUtil.java @@ -25,20 +25,6 @@ public class InternalUtil { - @Nullable - public static ClassLoader getClassLoader(final Class type) { - if (System.getSecurityManager() == null) { - return type.getClassLoader(); - } - return AccessController.doPrivileged(new PrivilegedAction() { - @Nullable - @Override - public ClassLoader run() { - return type.getClassLoader(); - } - }); - } - /** * Loads a service provider based on the service interface, assuming that a provider (implementation) is available to the class * loader that loads the service (interface). This allows to separate interface and implementation without introducing a diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/PluginClassLoaderRootPackageCustomizer.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/PluginClassLoaderRootPackageCustomizer.java similarity index 95% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/bci/PluginClassLoaderRootPackageCustomizer.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/PluginClassLoaderRootPackageCustomizer.java index 14ddc05ae3..c364ea60d7 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/PluginClassLoaderRootPackageCustomizer.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/PluginClassLoaderRootPackageCustomizer.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.bci; +package co.elastic.apm.agent.sdk.internal; import java.lang.instrument.Instrumentation; import java.util.Collection; @@ -54,7 +54,7 @@ public final String getPluginPackage() { /** * All classes in the provided packages except for the ones annotated with {@link co.elastic.apm.agent.sdk.state.GlobalState} - * and classes extending {@link org.stagemonitor.configuration.ConfigurationOptionProvider} + * and classes extending {@code org.stagemonitor.configuration.ConfigurationOptionProvider} * will be loaded from a dedicated plugin class loader that has access to both the instrumented classes and the agent classes. * If the {@linkplain #getPluginPackage() plugin package} should be part of the root packages, implementations need to explicitly add it. */ @@ -67,7 +67,7 @@ public final String getPluginPackage() { *

* Instrumentation plugins are loaded in an isolated classloader and therefore in an unnamed module. * This module by default cannot access anything "private" within other modules, including - * the module containing the instrumented class. If such an access is required for the plugin, + * the module containing the instrumented class. If such access is required for the plugin, * access can be granted using this method. Before anything from the plugin is invoked, * {@link Instrumentation#redefineModule(Module, Set, Map, Map, Set, Map) will be used to give the classloader * full access ("open") to the target module.} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/LongList.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/collections/LongList.java similarity index 98% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/collections/LongList.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/collections/LongList.java index 59bdb110e8..032b886c39 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/LongList.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/collections/LongList.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.collections; +package co.elastic.apm.agent.sdk.internal.collections; import java.util.Arrays; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/TracerAwareInstrumentation.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/collections/package-info.java similarity index 66% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/bci/TracerAwareInstrumentation.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/collections/package-info.java index 12eba10d21..b6ee660d0c 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/TracerAwareInstrumentation.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/collections/package-info.java @@ -16,17 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.bci; +@NonnullApi +package co.elastic.apm.agent.sdk.internal.collections; -import co.elastic.apm.agent.tracer.GlobalTracer; -import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; -import co.elastic.apm.agent.tracer.Tracer; - -/** - * The constructor can optionally have a {@link Tracer} parameter. - */ -public abstract class TracerAwareInstrumentation extends ElasticApmInstrumentation { - - public static final Tracer tracer = GlobalTracer.get(); - -} +import co.elastic.apm.agent.sdk.NonnullApi; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/Scanner.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/Scanner.java similarity index 99% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/Scanner.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/Scanner.java index 339ffa4a2c..abd2f4da2e 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/Scanner.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/Scanner.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.db.signature; +package co.elastic.apm.agent.sdk.internal.db.signature; public class Scanner { diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/ScannerFilter.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/ScannerFilter.java similarity index 95% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/ScannerFilter.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/ScannerFilter.java index 6c4547ce9f..1fe2e771d0 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/ScannerFilter.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/ScannerFilter.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.db.signature; +package co.elastic.apm.agent.sdk.internal.db.signature; public interface ScannerFilter { boolean skip(Scanner s, char c); diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/SignatureParser.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/SignatureParser.java similarity index 91% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/SignatureParser.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/SignatureParser.java index 9b687c780c..64722bbd59 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/SignatureParser.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/SignatureParser.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.db.signature; +package co.elastic.apm.agent.sdk.internal.db.signature; import co.elastic.apm.agent.sdk.weakconcurrent.DetachedThreadLocal; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; @@ -27,13 +27,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import static co.elastic.apm.agent.db.signature.Scanner.Token.EOF; -import static co.elastic.apm.agent.db.signature.Scanner.Token.FROM; -import static co.elastic.apm.agent.db.signature.Scanner.Token.IDENT; -import static co.elastic.apm.agent.db.signature.Scanner.Token.INTO; -import static co.elastic.apm.agent.db.signature.Scanner.Token.LPAREN; -import static co.elastic.apm.agent.db.signature.Scanner.Token.RPAREN; - public class SignatureParser { /** @@ -126,7 +119,7 @@ private void parse(Scanner scanner, String query, StringBuilder signature, @Null return; case DELETE: signature.append("DELETE"); - if (scanner.scanUntil(FROM) && scanner.scanUntil(Scanner.Token.IDENT)) { + if (scanner.scanUntil(Scanner.Token.FROM) && scanner.scanUntil(Scanner.Token.IDENT)) { signature.append(" FROM"); appendIdentifiers(scanner, signature, dbLink); } @@ -142,12 +135,12 @@ private void parse(Scanner scanner, String query, StringBuilder signature, @Null case SELECT: signature.append("SELECT"); int level = 0; - for (Scanner.Token t = scanner.scan(); t != EOF; t = scanner.scan()) { - if (t == LPAREN) { + for (Scanner.Token t = scanner.scan(); t != Scanner.Token.EOF; t = scanner.scan()) { + if (t == Scanner.Token.LPAREN) { level++; - } else if (t == RPAREN) { + } else if (t == Scanner.Token.RPAREN) { level--; - } else if (t == FROM) { + } else if (t == Scanner.Token.FROM) { if (level == 0) { if (scanner.scanToken(Scanner.Token.IDENT)) { signature.append(" FROM"); @@ -163,10 +156,10 @@ private void parse(Scanner scanner, String query, StringBuilder signature, @Null signature.append("UPDATE"); // Scan for the table name boolean hasPeriod = false, hasFirstPeriod = false, isDbLink = false; - if (scanner.scanToken(IDENT)) { + if (scanner.scanToken(Scanner.Token.IDENT)) { signature.append(' '); scanner.appendCurrentTokenText(signature); - for (Scanner.Token t = scanner.scan(); t != EOF; t = scanner.scan()) { + for (Scanner.Token t = scanner.scan(); t != Scanner.Token.EOF; t = scanner.scan()) { switch (t) { case IDENT: if (hasPeriod) { @@ -206,7 +199,7 @@ private void parse(Scanner scanner, String query, StringBuilder signature, @Null return; case MERGE: signature.append("MERGE"); - if (scanner.scanToken(INTO) && scanner.scanUntil(Scanner.Token.IDENT)) { + if (scanner.scanToken(Scanner.Token.INTO) && scanner.scanUntil(Scanner.Token.IDENT)) { signature.append(" INTO"); appendIdentifiers(scanner, signature, dbLink); } @@ -222,7 +215,7 @@ private void appendIdentifiers(Scanner scanner, StringBuilder signature, @Nullab signature.append(' '); scanner.appendCurrentTokenText(signature); boolean connectedIdents = false, isDbLink = false; - for (Scanner.Token t = scanner.scan(); t != EOF; t = scanner.scan()) { + for (Scanner.Token t = scanner.scan(); t != Scanner.Token.EOF; t = scanner.scan()) { switch (t) { case IDENT: // do not add tokens which are separated by a space diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/package-info.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/package-info.java new file mode 100644 index 0000000000..1bd1e63ac0 --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/db/signature/package-info.java @@ -0,0 +1,22 @@ +/* + * 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. + */ +@NonnullApi +package co.elastic.apm.agent.sdk.internal.db.signature; + +import co.elastic.apm.agent.sdk.NonnullApi; diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtils.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtils.java new file mode 100644 index 0000000000..ee71d26188 --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtils.java @@ -0,0 +1,56 @@ +/* + * 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.sdk.internal.util; + +import co.elastic.apm.agent.sdk.internal.InternalUtil; + +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; + +public final class ExecutorUtils { + + private static final ExecutorUtilsProvider supplier; + + + static { + supplier = InternalUtil.getServiceProvider(ExecutorUtilsProvider.class); + } + + public static ScheduledExecutorService createSingleThreadSchedulingDaemonPool(final String threadPurpose) { + return supplier.createSingleThreadSchedulingDaemonPool(threadPurpose); + } + + public static boolean isAgentExecutor(Executor executor) { + return supplier.isAgentExecutor(executor); + } + + public static void shutdownAndWaitTermination(ExecutorService executor) { + supplier.shutdownAndWaitTermination(executor); + } + + public interface ExecutorUtilsProvider { + + boolean isAgentExecutor(Executor executor); + + ScheduledExecutorService createSingleThreadSchedulingDaemonPool(String threadPurpose); + + void shutdownAndWaitTermination(ExecutorService executor); + } +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/IOUtils.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/IOUtils.java similarity index 99% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/util/IOUtils.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/IOUtils.java index c23f2f0964..3a953d96b2 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/IOUtils.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/IOUtils.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.sdk.internal.util; import java.io.IOException; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/LoggerUtils.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/LoggerUtils.java similarity index 99% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/util/LoggerUtils.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/LoggerUtils.java index 8aed0f0e96..3f726790bb 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/LoggerUtils.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/LoggerUtils.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.sdk.internal.util; import co.elastic.apm.agent.sdk.logging.Logger; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/PrivilegedActionUtils.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/PrivilegedActionUtils.java similarity index 99% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/util/PrivilegedActionUtils.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/PrivilegedActionUtils.java index 9274a4dd97..5dd7229eec 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/PrivilegedActionUtils.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/PrivilegedActionUtils.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.sdk.internal.util; import javax.annotation.Nullable; import java.io.File; diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/VersionUtils.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/VersionUtils.java new file mode 100644 index 0000000000..c8599c25bf --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/VersionUtils.java @@ -0,0 +1,97 @@ +/* + * 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.sdk.internal.util; + +import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; + +import javax.annotation.Nullable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.jar.JarInputStream; + +public final class VersionUtils { + + private static final WeakMap, String> versionsCache = WeakConcurrent.buildMap(); + private static final String UNKNOWN_VERSION = "UNKNOWN_VERSION"; + + private VersionUtils() { + } + + @Nullable + public static String getVersion(Class clazz, String groupId, String artifactId) { + String version = versionsCache.get(clazz); + if (version != null) { + return version != UNKNOWN_VERSION ? version : null; + } + version = getVersionFromPomProperties(clazz, groupId, artifactId); + if (version == null) { + version = getVersionFromPackage(clazz); + } + versionsCache.put(clazz, version != null ? version : UNKNOWN_VERSION); + return version; + } + + @Nullable + static String getVersionFromPackage(Class clazz) { + Package pkg = clazz.getPackage(); + if (pkg != null) { + return pkg.getImplementationVersion(); + } + return null; + } + + @Nullable + static String getVersionFromPomProperties(Class clazz, String groupId, String artifactId) { + final String classpathLocation = "/META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties"; + final Properties pomProperties = getFromClasspath(classpathLocation, clazz); + if (pomProperties != null) { + return pomProperties.getProperty("version"); + } + return null; + } + + @Nullable + private static Properties getFromClasspath(String classpathLocation, Class clazz) { + final Properties props = new Properties(); + try (InputStream resourceStream = clazz.getResourceAsStream(classpathLocation)) { + if (resourceStream != null) { + props.load(resourceStream); + return props; + } + } catch (IOException ignore) { + } + return null; + } + + @Nullable + public static String getManifestEntry(@Nullable File jarFile, String manifestAttribute) { + if (jarFile == null) { + return null; + } + try (JarInputStream jarInputStream = new JarInputStream(PrivilegedActionUtils.newFileInputStream(jarFile))) { + return jarInputStream.getManifest().getMainAttributes().getValue(manifestAttribute); + } catch (IOException e) { + return null; + } + } + +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/package-info.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/package-info.java similarity index 94% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/package-info.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/package-info.java index 025d338e05..a2528aa460 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/db/signature/package-info.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/internal/util/package-info.java @@ -17,6 +17,6 @@ * under the License. */ @NonnullApi -package co.elastic.apm.agent.db.signature; +package co.elastic.apm.agent.sdk.internal.util; import co.elastic.apm.agent.sdk.NonnullApi; diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/state/GlobalVariables.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/state/GlobalVariables.java index 75c6ce6a3e..760dc3dadc 100644 --- a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/state/GlobalVariables.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/state/GlobalVariables.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.sdk.state; -import co.elastic.apm.agent.sdk.internal.InternalUtil; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -53,7 +53,7 @@ public class GlobalVariables { */ public static T get(Class adviceClass, String key, T defaultValue) { key = adviceClass.getName() + "." + key; - if (InternalUtil.getClassLoader(defaultValue.getClass()) != null && !defaultValue.getClass().getName().startsWith("co.elastic.apm.agent")) { + if (PrivilegedActionUtils.getClassLoader(defaultValue.getClass()) != null && !defaultValue.getClass().getName().startsWith("co.elastic.apm.agent")) { throw new IllegalArgumentException("Registering types specific to an instrumentation plugin would lead to class loader leaks: " + defaultValue); } T value = (T) registry.get(key); diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCache.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/weakconcurrent/WeakKeySoftValueLoadingCache.java similarity index 97% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCache.java rename to apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/weakconcurrent/WeakKeySoftValueLoadingCache.java index fac4621b00..3f38fa4409 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCache.java +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/weakconcurrent/WeakKeySoftValueLoadingCache.java @@ -16,10 +16,8 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.cache; +package co.elastic.apm.agent.sdk.weakconcurrent; -import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; -import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchersTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchersTest.java similarity index 83% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchersTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchersTest.java index 03bbc6e708..8e6bc0ab5b 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchersTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchersTest.java @@ -16,44 +16,29 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.bci.bytebuddy; +package co.elastic.apm.agent.sdk.bytebuddy; -import net.bytebuddy.description.type.TypeDescription; import org.apache.http.client.HttpClient; + +import net.bytebuddy.description.type.TypeDescription; import org.junit.jupiter.api.Test; import java.io.File; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; +import java.net.URLClassLoader; import java.security.CodeSigner; import java.security.CodeSource; import java.security.ProtectionDomain; import java.util.List; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.implementationVersionLte; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.none; import static org.assertj.core.api.Assertions.assertThat; class CustomElementMatchersTest { - @Test - void testIncludedPackages() { - final TypeDescription thisClass = TypeDescription.ForLoadedType.of(getClass()); - assertThat(isInAnyPackage(List.of(), none()).matches(thisClass)).isFalse(); - assertThat(isInAnyPackage(List.of(thisClass.getPackage().getName()), none()).matches(thisClass)).isTrue(); - assertThat(isInAnyPackage(List.of(thisClass.getPackage().getName()), none()).matches(TypeDescription.ForLoadedType.of(Object.class))).isFalse(); - } - - @Test - void testClassLoaderCanLoadClass() { - assertThat(classLoaderCanLoadClass(Object.class.getName()).matches(ClassLoader.getSystemClassLoader())).isTrue(); - assertThat(classLoaderCanLoadClass(Object.class.getName()).matches(null)).isTrue(); - assertThat(classLoaderCanLoadClass("not.Here").matches(ClassLoader.getSystemClassLoader())).isFalse(); - } - @Test void testSemVerLteWithFileUrl() { // Relying on Apache httpclient-4.5.6.jar @@ -93,4 +78,33 @@ private void testSemVerLteMatcher(ProtectionDomain protectionDomain) { assertThat(implementationVersionLte("5.0").matches(protectionDomain)).isTrue(); assertThat(implementationVersionLte("5").matches(protectionDomain)).isTrue(); } + + @Test + void testIncludedPackages() { + final TypeDescription thisClass = TypeDescription.ForLoadedType.of(getClass()); + assertThat(isInAnyPackage(List.of(), none()).matches(thisClass)).isFalse(); + assertThat(isInAnyPackage(List.of(thisClass.getPackage().getName()), none()).matches(thisClass)).isTrue(); + assertThat(isInAnyPackage(List.of(thisClass.getPackage().getName()), none()).matches(TypeDescription.ForLoadedType.of(Object.class))).isFalse(); + } + + @Test + void testClassLoaderCanLoadClass() { + assertThat(classLoaderCanLoadClass(Object.class.getName()).matches(ClassLoader.getSystemClassLoader())).isTrue(); + assertThat(classLoaderCanLoadClass(Object.class.getName()).matches(null)).isTrue(); + assertThat(classLoaderCanLoadClass("not.Here").matches(ClassLoader.getSystemClassLoader())).isFalse(); + } + + @Test + void testIsAgentClassLoader() { + assertThat(isAgentClassLoader().matches(CustomElementMatchers.class.getClassLoader())).isTrue(); + assertThat(isAgentClassLoader().matches(new CustomElementMatchersTestProvider.SampleAgentClassLoader())).isTrue(); + assertThat(isAgentClassLoader().matches(new URLClassLoader(new URL[0]))).isFalse(); + } + + @Test + void testIsInternalPluginClassLoader() { + assertThat(isInternalPluginClassLoader().matches(CustomElementMatchers.class.getClassLoader())).isFalse(); + assertThat(isInternalPluginClassLoader().matches(new CustomElementMatchersTestProvider.SampleInternalPluginClassLoader())).isTrue(); + assertThat(isInternalPluginClassLoader().matches(new URLClassLoader(new URL[0]))).isFalse(); + } } diff --git a/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchersTestProvider.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchersTestProvider.java new file mode 100644 index 0000000000..78762aa9ef --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/CustomElementMatchersTestProvider.java @@ -0,0 +1,40 @@ +/* + * 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.sdk.bytebuddy; + +import javax.annotation.Nullable; + +public class CustomElementMatchersTestProvider implements CustomElementMatchers.CustomElementMatchersProvider { + + @Override + public boolean isAgentClassLoader(@Nullable ClassLoader classLoader) { + return classLoader instanceof SampleAgentClassLoader; + } + + @Override + public boolean isInternalPluginClassLoader(@Nullable ClassLoader classLoader) { + return classLoader instanceof SampleInternalPluginClassLoader; + } + + static class SampleAgentClassLoader extends ClassLoader { + } + + static class SampleInternalPluginClassLoader extends ClassLoader { + } +} diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/bytebuddy/MethodHierarchyMatcherTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/MethodHierarchyMatcherTest.java similarity index 99% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/bci/bytebuddy/MethodHierarchyMatcherTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/MethodHierarchyMatcherTest.java index b23432a9ca..923b222bf3 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/bci/bytebuddy/MethodHierarchyMatcherTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/bytebuddy/MethodHierarchyMatcherTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.bci.bytebuddy; +package co.elastic.apm.agent.sdk.bytebuddy; import net.bytebuddy.description.method.MethodDescription; import org.junit.jupiter.api.Test; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/collections/LongListTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/collections/LongListTest.java similarity index 98% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/collections/LongListTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/collections/LongListTest.java index ad0961f852..12b7b01eef 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/collections/LongListTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/collections/LongListTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.collections; +package co.elastic.apm.agent.sdk.internal.collections; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/db/signature/ScannerTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/db/signature/ScannerTest.java similarity index 97% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/db/signature/ScannerTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/db/signature/ScannerTest.java index e2713e4aba..b1a8dcd645 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/db/signature/ScannerTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/db/signature/ScannerTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.db.signature; +package co.elastic.apm.agent.sdk.internal.db.signature; import com.fasterxml.jackson.databind.JsonNode; import org.junit.jupiter.api.BeforeEach; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/db/signature/SignatureParserTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/db/signature/SignatureParserTest.java similarity index 98% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/db/signature/SignatureParserTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/db/signature/SignatureParserTest.java index 0557ff4860..53ebbfe2b0 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/db/signature/SignatureParserTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/db/signature/SignatureParserTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.db.signature; +package co.elastic.apm.agent.sdk.internal.db.signature; import com.fasterxml.jackson.databind.JsonNode; import org.junit.jupiter.api.Test; diff --git a/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtilsProviderTestImpl.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtilsProviderTestImpl.java new file mode 100644 index 0000000000..ff3bd6df98 --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtilsProviderTestImpl.java @@ -0,0 +1,59 @@ +/* + * 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.sdk.internal.util; + +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static co.elastic.apm.agent.sdk.internal.util.ExecutorUtils.ExecutorUtilsProvider; + +public class ExecutorUtilsProviderTestImpl implements ExecutorUtilsProvider { + + @Override + public boolean isAgentExecutor(Executor executor) { + return executor instanceof SimpleScheduledThreadPoolExecutor; + } + + @Override + public ScheduledExecutorService createSingleThreadSchedulingDaemonPool(String threadPurpose) { + return new SimpleScheduledThreadPoolExecutor(); + } + + @Override + public void shutdownAndWaitTermination(ExecutorService executor) { + executor.shutdown(); + try { + if (!executor.awaitTermination(1, TimeUnit.SECONDS)) { + throw new IllegalStateException(); + } + } catch (InterruptedException e) { + throw new IllegalStateException(e); + } + } + + private static class SimpleScheduledThreadPoolExecutor extends ScheduledThreadPoolExecutor { + + private SimpleScheduledThreadPoolExecutor() { + super(1); + } + } +} diff --git a/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtilsTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtilsTest.java new file mode 100644 index 0000000000..23acbdf862 --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/ExecutorUtilsTest.java @@ -0,0 +1,35 @@ +/* + * 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.sdk.internal.util; + +import org.junit.jupiter.api.Test; + +import java.util.concurrent.ScheduledExecutorService; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ExecutorUtilsTest { + + @Test + void createsAndShutsDownExecutor() { + ScheduledExecutorService service = ExecutorUtils.createSingleThreadSchedulingDaemonPool("purpose"); + assertThat(ExecutorUtils.isAgentExecutor(service)).isTrue(); + ExecutorUtils.shutdownAndWaitTermination(service); + } +} diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/IOUtilsTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/IOUtilsTest.java similarity index 83% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/util/IOUtilsTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/IOUtilsTest.java index c90d8395c4..a4b5807b01 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/IOUtilsTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/IOUtilsTest.java @@ -16,9 +16,8 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.sdk.internal.util; -import co.elastic.apm.agent.objectpool.impl.QueueBasedObjectPool; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.Test; @@ -27,13 +26,12 @@ import java.io.IOException; import java.nio.CharBuffer; import java.nio.charset.Charset; -import java.util.concurrent.ArrayBlockingQueue; import static java.nio.charset.StandardCharsets.UTF_16; import static java.nio.charset.StandardCharsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; -class IOUtilsTest { +class IOUtilsTest { @Test void readUtf8Stream() throws IOException { @@ -89,24 +87,6 @@ void testStreamLargerThanByteBuffer() throws IOException { assertThat(charBuffer.toString()).isEqualTo(longString); } - @Test - void testReusedBuffer() throws IOException { - final QueueBasedObjectPool charBuffers = QueueBasedObjectPool.of(new ArrayBlockingQueue<>(1), true, - () -> CharBuffer.allocate(8), CharBuffer::clear); - - final CharBuffer charBuffer1 = charBuffers.createInstance(); - assertThat(IOUtils.readUtf8Stream(toInputStream("foo", UTF_8), charBuffer1)).isTrue(); - assertThat(charBuffer1.toString()).isEqualTo("foo"); - - charBuffers.recycle(charBuffer1); - - final CharBuffer charBuffer2 = charBuffers.createInstance(); - assertThat(IOUtils.readUtf8Stream(toInputStream("barbaz", UTF_8), charBuffer2)).isTrue(); - assertThat(charBuffer2.toString()).isEqualTo("barbaz"); - assertThat((Object) charBuffer1).isSameAs(charBuffer2); - - } - @Test void testOverflowStream() throws IOException { final CharBuffer charBuffer = CharBuffer.allocate(8); diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/LoggerUtilsTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/LoggerUtilsTest.java similarity index 97% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/util/LoggerUtilsTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/LoggerUtilsTest.java index 66a3e3054b..35484291d1 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/LoggerUtilsTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/LoggerUtilsTest.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.sdk.internal.util; -import org.junit.jupiter.api.Test; import co.elastic.apm.agent.sdk.logging.Logger; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doReturn; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/PrivilegedActionUtilsTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/PrivilegedActionUtilsTest.java similarity index 98% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/util/PrivilegedActionUtilsTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/PrivilegedActionUtilsTest.java index 5a27740e5c..054c99d712 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/PrivilegedActionUtilsTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/PrivilegedActionUtilsTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.sdk.internal.util; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledForJreRange; @@ -35,7 +35,7 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; -import static co.elastic.apm.agent.testutils.assertions.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @EnabledForJreRange(max = JRE.JAVA_17, disabledReason = "SecurityManager is not supported anymore") diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/VersionUtilsTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/VersionUtilsTest.java similarity index 98% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/util/VersionUtilsTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/VersionUtilsTest.java index 4ef071920e..bd4eaea2f4 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/VersionUtilsTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/VersionUtilsTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.sdk.internal.util; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/WeakConcurrentProviderTestImpl.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/WeakConcurrentProviderTestImpl.java new file mode 100644 index 0000000000..91685eed56 --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/internal/util/WeakConcurrentProviderTestImpl.java @@ -0,0 +1,210 @@ +/* + * 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.sdk.internal.util; + +import co.elastic.apm.agent.sdk.weakconcurrent.DetachedThreadLocal; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakSet; + +import javax.annotation.Nullable; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +public class WeakConcurrentProviderTestImpl implements WeakConcurrent.WeakConcurrentProvider { + @Override + public WeakConcurrent.WeakMapBuilder weakMapBuilder() { + + return new WeakConcurrent.WeakMapBuilder() { + + @Nullable + private WeakMap.DefaultValueSupplier defaultValueSupplier; + + @Override + public WeakConcurrent.WeakMapBuilder withInitialCapacity(int initialCapacity) { + return this; + } + + @Override + public WeakConcurrent.WeakMapBuilder withDefaultValueSupplier(@Nullable WeakMap.DefaultValueSupplier defaultValueSupplier) { + this.defaultValueSupplier = defaultValueSupplier; + return this; + } + + @Override + public WeakMap build() { + return new NonWeakMap<>(defaultValueSupplier); + } + }; + } + + @Override + public WeakConcurrent.ThreadLocalBuilder threadLocalBuilder() { + return new WeakConcurrent.ThreadLocalBuilder() { + + @Nullable + private WeakMap.DefaultValueSupplier defaultValueSupplier; + + @Override + public WeakConcurrent.ThreadLocalBuilder withDefaultValueSupplier(@Nullable WeakMap.DefaultValueSupplier defaultValueSupplier) { + this.defaultValueSupplier = defaultValueSupplier; + return this; + } + + @Override + public DetachedThreadLocal build() { + return new NonDetachedThreadLocal<>(defaultValueSupplier); + } + }; + } + + @Override + public WeakSet buildSet() { + return new NonWeakSet<>(); + } + + static class NonWeakMap implements WeakMap { + + private final ConcurrentMap delegate = new ConcurrentHashMap<>(); + + @Nullable + private final DefaultValueSupplier defaultValueSupplier; + + public NonWeakMap(@Nullable DefaultValueSupplier defaultValueSupplier) { + this.defaultValueSupplier = defaultValueSupplier; + } + + @Nullable + @Override + public V get(K key) { + V value = delegate.get(key); + if (value == null && defaultValueSupplier != null) { + value = defaultValueSupplier.getDefaultValue(key); + delegate.put(key, value); + } + return value; + } + + @Nullable + @Override + public V put(K key, V value) { + return delegate.put(key, value); + } + + @Nullable + @Override + public V remove(K key) { + return delegate.remove(key); + } + + @Override + public boolean containsKey(K process) { + return delegate.containsKey(process); + } + + @Override + public void clear() { + delegate.clear(); + } + + @Nullable + @Override + public V putIfAbsent(K key, V value) { + return delegate.putIfAbsent(key, value); + } + + @Override + public int approximateSize() { + return delegate.size(); + } + + @Override + public Iterator> iterator() { + return delegate.entrySet().iterator(); + } + } + + static class NonDetachedThreadLocal implements DetachedThreadLocal { + + private final ThreadLocal delegate; + + public NonDetachedThreadLocal(@Nullable WeakMap.DefaultValueSupplier defaultValueSupplier) { + this.delegate = new ThreadLocal<>() { + @Override + @Nullable + protected T initialValue() { + return defaultValueSupplier == null ? null : defaultValueSupplier.getDefaultValue(Thread.currentThread()); + } + }; + } + + @Nullable + @Override + public T get() { + return delegate.get(); + } + + @Nullable + @Override + public T getAndRemove() { + T value = delegate.get(); + delegate.remove(); + return value; + } + + @Override + public void set(T value) { + delegate.set(value); + } + + @Override + public void remove() { + delegate.remove(); + } + } + + static class NonWeakSet implements WeakSet { + + private final Set delegate = new HashSet<>(); + + @Override + public boolean add(K element) { + return delegate.add(element); + } + + @Override + public boolean contains(K element) { + return false; + } + + @Override + public boolean remove(K element) { + return delegate.remove(element); + } + + @Override + public Iterator iterator() { + return delegate.iterator(); + } + } +} diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCacheTest.java b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/weakconcurrent/WeakKeySoftValueLoadingCacheTest.java similarity index 91% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCacheTest.java rename to apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/weakconcurrent/WeakKeySoftValueLoadingCacheTest.java index 3582f1c474..80ad50320b 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCacheTest.java +++ b/apm-agent-plugin-sdk/src/test/java/co/elastic/apm/agent/sdk/weakconcurrent/WeakKeySoftValueLoadingCacheTest.java @@ -16,8 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.cache; +package co.elastic.apm.agent.sdk.weakconcurrent; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakKeySoftValueLoadingCache; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/apm-agent-plugin-sdk/src/test/java/specs/TestJsonSpec.java b/apm-agent-plugin-sdk/src/test/java/specs/TestJsonSpec.java new file mode 100644 index 0000000000..7228330100 --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/java/specs/TestJsonSpec.java @@ -0,0 +1,44 @@ +/* + * 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 specs; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.net.URL; + +public class TestJsonSpec { + + public static JsonNode getJson(String jsonFile) { + return getJson(TestJsonSpec.class, "json-specs/" + jsonFile); + } + + public static JsonNode getJson(Class type, String path) { + URL jsonSpec = type.getClassLoader().getResource(path); + try { + return new ObjectMapper() + .enable(JsonParser.Feature.ALLOW_COMMENTS) + .readTree(jsonSpec); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } +} diff --git a/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers$CustomElementMatchersProvider b/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers$CustomElementMatchersProvider new file mode 100644 index 0000000000..6541cb3c96 --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers$CustomElementMatchersProvider @@ -0,0 +1 @@ +co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchersTestProvider diff --git a/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.util.ExecutorUtils$ExecutorUtilsProvider b/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.util.ExecutorUtils$ExecutorUtilsProvider new file mode 100644 index 0000000000..535889c6f7 --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.util.ExecutorUtils$ExecutorUtilsProvider @@ -0,0 +1 @@ +co.elastic.apm.agent.sdk.internal.util.ExecutorUtilsProviderTestImpl diff --git a/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent$WeakConcurrentProvider b/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent$WeakConcurrentProvider new file mode 100644 index 0000000000..b71dc6a0f9 --- /dev/null +++ b/apm-agent-plugin-sdk/src/test/resources/META-INF/services/co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent$WeakConcurrentProvider @@ -0,0 +1 @@ +co.elastic.apm.agent.sdk.internal.util.WeakConcurrentProviderTestImpl diff --git a/apm-agent-core/src/test/resources/json-specs/sql_signature_examples.json b/apm-agent-plugin-sdk/src/test/resources/json-specs/sql_signature_examples.json similarity index 100% rename from apm-agent-core/src/test/resources/json-specs/sql_signature_examples.json rename to apm-agent-plugin-sdk/src/test/resources/json-specs/sql_signature_examples.json diff --git a/apm-agent-core/src/test/resources/json-specs/sql_token_examples.json b/apm-agent-plugin-sdk/src/test/resources/json-specs/sql_token_examples.json similarity index 100% rename from apm-agent-core/src/test/resources/json-specs/sql_token_examples.json rename to apm-agent-plugin-sdk/src/test/resources/json-specs/sql_token_examples.json diff --git a/apm-agent-core/src/test/resources/lib/version##2/test-module.jar b/apm-agent-plugin-sdk/src/test/resources/lib/version##2/test-module.jar similarity index 100% rename from apm-agent-core/src/test/resources/lib/version##2/test-module.jar rename to apm-agent-plugin-sdk/src/test/resources/lib/version##2/test-module.jar diff --git a/apm-agent-core/src/test/resources/signature_tests.json b/apm-agent-plugin-sdk/src/test/resources/signature_tests.json similarity index 100% rename from apm-agent-core/src/test/resources/signature_tests.json rename to apm-agent-plugin-sdk/src/test/resources/signature_tests.json 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 280d2673d1..7253f4488f 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 @@ -18,15 +18,17 @@ */ package co.elastic.apm.agent.httpclient.v3; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; 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.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.dispatch.HeaderUtils; -import co.elastic.apm.agent.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -48,7 +50,9 @@ * Instruments {@link org.apache.commons.httpclient.HttpMethodDirector#executeMethod(HttpMethod)} */ @SuppressWarnings("JavadocReference") // instrumented class is package-private -public class HttpClient3Instrumentation extends TracerAwareInstrumentation { +public class HttpClient3Instrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { @@ -82,7 +86,7 @@ public static class HttpClient3Advice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object onEnter(@Advice.Argument(0) HttpMethod httpMethod, @Advice.FieldValue(value = "hostConfiguration") HostConfiguration hostConfiguration) { - final AbstractSpan parent = TracerAwareInstrumentation.tracer.getActive(); + final AbstractSpan parent = tracer.getActive(); if (parent == null) { return null; } 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 63d241e8a6..9b3d76b0c4 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 @@ -34,7 +34,7 @@ import javax.annotation.Nullable; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.implementation.bytecode.assign.Assigner.Typing.DYNAMIC; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientRedirectInstrumentation.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientRedirectInstrumentation.java index 6e9afb0e07..3e8b5d82f5 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientRedirectInstrumentation.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/ApacheHttpAsyncClientRedirectInstrumentation.java @@ -31,7 +31,7 @@ import javax.annotation.Nullable; import java.security.ProtectionDomain; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.implementationVersionLte; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.implementationVersionLte; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.nameContains; import static net.bytebuddy.matcher.ElementMatchers.named; 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 2ccdab635b..ceaf38ea21 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 @@ -36,7 +36,7 @@ import javax.annotation.Nullable; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.nameContains; diff --git a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/BaseApacheHttpClientInstrumentation.java b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/BaseApacheHttpClientInstrumentation.java index d68d2c82c6..6e76459c14 100644 --- a/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/BaseApacheHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-apache-httpclient/apm-apache-httpclient4-plugin/src/main/java/co/elastic/apm/agent/httpclient/v4/BaseApacheHttpClientInstrumentation.java @@ -18,12 +18,16 @@ */ package co.elastic.apm.agent.httpclient.v4; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Arrays; import java.util.Collection; -public abstract class BaseApacheHttpClientInstrumentation extends TracerAwareInstrumentation { +public abstract class BaseApacheHttpClientInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { 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 0461924aca..6fee9a44bf 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 @@ -18,12 +18,16 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Collection; import java.util.Collections; -public abstract class ApiInstrumentation extends TracerAwareInstrumentation { +public abstract class ApiInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public boolean includeWhenInstrumentationIsDisabled() { 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 426727d4fa..7d7f1f179d 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 @@ -19,7 +19,7 @@ package co.elastic.apm.agent.pluginapi; import co.elastic.apm.agent.impl.Tracer; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; 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 e2adf794cc..43e4595aa9 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,8 +18,8 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.bci.bytebuddy.AnnotationValueOffsetMappingFactory; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.AnnotationValueOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; @@ -42,10 +42,10 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -55,7 +55,7 @@ public class CaptureSpanInstrumentation extends ElasticApmInstrumentation { public static final Logger logger = LoggerFactory.getLogger(CaptureSpanInstrumentation.class); - public static final Tracer tracer = GlobalTracer.get(); + protected static final Tracer tracer = GlobalTracer.get(); private final CoreConfiguration coreConfig; private final StacktraceConfiguration stacktraceConfig; 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 3e36193430..4c1edd87f0 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,8 +18,8 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.bci.bytebuddy.AnnotationValueOffsetMappingFactory.AnnotationValueExtractor; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; +import co.elastic.apm.agent.sdk.bytebuddy.AnnotationValueOffsetMappingFactory.AnnotationValueExtractor; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; @@ -28,7 +28,7 @@ import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -42,10 +42,10 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_METHOD_SIGNATURE; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_USER_SUPPLIED; import static co.elastic.apm.agent.pluginapi.ElasticApmApiInstrumentation.PUBLIC_API_INSTRUMENTATION_GROUP; @@ -57,7 +57,7 @@ public class CaptureTransactionInstrumentation extends ElasticApmInstrumentation { - public static final Tracer tracer = GlobalTracer.get(); + protected static final Tracer tracer = GlobalTracer.get(); public static final Logger logger = LoggerFactory.getLogger(CaptureTransactionInstrumentation.class); 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 c30d9cf067..105d55a0c7 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 @@ -23,7 +23,7 @@ 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 co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; 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 499d00eeb6..4bb507aa5e 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,8 +18,8 @@ */ package co.elastic.apm.agent.pluginapi; -import co.elastic.apm.agent.bci.bytebuddy.AnnotationValueOffsetMappingFactory; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.AnnotationValueOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; @@ -32,7 +32,7 @@ import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -44,10 +44,10 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; import static co.elastic.apm.agent.pluginapi.ElasticApmApiInstrumentation.PUBLIC_API_INSTRUMENTATION_GROUP; import static co.elastic.apm.agent.pluginapi.Utils.FRAMEWORK_NAME; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_METHOD_SIGNATURE; @@ -59,7 +59,7 @@ public class TracedInstrumentation extends ElasticApmInstrumentation { - public static final Tracer tracer = GlobalTracer.get(); + protected static final Tracer tracer = GlobalTracer.get(); public static final Logger logger = LoggerFactory.getLogger(TracedInstrumentation.class); diff --git a/apm-agent-plugins/apm-api-plugin/src/test/java/co/elastic/apm/agent/pluginapi/ConfigInstrumentationTest.java b/apm-agent-plugins/apm-api-plugin/src/test/java/co/elastic/apm/agent/pluginapi/ConfigInstrumentationTest.java index 12690a19b3..8af213b978 100644 --- a/apm-agent-plugins/apm-api-plugin/src/test/java/co/elastic/apm/agent/pluginapi/ConfigInstrumentationTest.java +++ b/apm-agent-plugins/apm-api-plugin/src/test/java/co/elastic/apm/agent/pluginapi/ConfigInstrumentationTest.java @@ -20,7 +20,6 @@ import co.elastic.apm.agent.MockTracer; import co.elastic.apm.agent.bci.ElasticApmAgent; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; @@ -100,7 +99,7 @@ Integer configValue(Boolean valid) { return INVALID_TRANSACTION_MAX_SPANS; } - public static class MaxTransInstrumentation extends TracerAwareInstrumentation { + public static class MaxTransInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(inline = false) 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 b5c694d3c2..d14030d297 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 @@ -18,13 +18,14 @@ */ package co.elastic.apm.agent.asynchttpclient; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; 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.tracer.Span; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.reference.ReferenceCountedMap; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -41,7 +42,7 @@ import java.util.Collection; import java.util.List; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -49,7 +50,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -public abstract class AbstractAsyncHttpClientInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractAsyncHttpClientInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); public static class Helper { diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/AmazonSQSMessagingClientWrapperInstrumentation.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/AmazonSQSMessagingClientWrapperInstrumentation.java index f7a2fa5a85..44fce62d27 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/AmazonSQSMessagingClientWrapperInstrumentation.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/AmazonSQSMessagingClientWrapperInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.awssdk.v2; import co.elastic.apm.agent.awssdk.v2.helper.sqs.wrapper.MessageListWrapper; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -31,7 +31,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class AmazonSQSMessagingClientWrapperInstrumentation extends TracerAwareInstrumentation { +public class AmazonSQSMessagingClientWrapperInstrumentation extends ElasticApmInstrumentation { @Override public Collection getInstrumentationGroupNames() { 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 ecadaf77fc..32bfda8ce4 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 @@ -21,7 +21,7 @@ import co.elastic.apm.agent.awssdk.v2.helper.DynamoDbHelper; 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.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -43,7 +43,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class BaseAsyncClientHandlerInstrumentation extends TracerAwareInstrumentation { +public class BaseAsyncClientHandlerInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { 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 f582d72811..0bf6b2cc9e 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 @@ -22,8 +22,8 @@ import co.elastic.apm.agent.awssdk.v2.helper.S3Helper; 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.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.common.JvmRuntimeInfo; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.Outcome; import co.elastic.apm.agent.tracer.Span; import net.bytebuddy.asm.Advice; @@ -49,7 +49,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class BaseSyncClientHandlerInstrumentation extends TracerAwareInstrumentation { +public class BaseSyncClientHandlerInstrumentation extends ElasticApmInstrumentation { //Coretto causes sigsegv crashes when you try to access a throwable if it thinks //it went out of scope, which it seems to for the instrumented throwable access //package access and non-final so that tests can replace this diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/GetMessagesInstrumentation.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/GetMessagesInstrumentation.java index 5ce699a5e0..f5e6054639 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/GetMessagesInstrumentation.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-2-plugin/src/main/java/co/elastic/apm/agent/awssdk/v2/GetMessagesInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.awssdk.v2; import co.elastic.apm.agent.awssdk.v2.helper.sqs.wrapper.MessageListWrapper; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.state.CallDepth; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -37,7 +37,7 @@ import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments; -public class GetMessagesInstrumentation extends TracerAwareInstrumentation { +public class GetMessagesInstrumentation extends ElasticApmInstrumentation { @Override diff --git a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentation.java b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentation.java index 13f02b0704..653ba387eb 100644 --- a/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentation.java +++ b/apm-agent-plugins/apm-aws-sdk/apm-aws-sdk-common/src/main/java/co/elastic/apm/agent/awssdk/common/AbstractAwsSdkInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.awssdk.common; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.description.NamedElement; import net.bytebuddy.matcher.ElementMatcher; @@ -27,7 +27,7 @@ import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; -public abstract class AbstractAwsSdkInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractAwsSdkInstrumentation extends ElasticApmInstrumentation { @Override public Collection getInstrumentationGroupNames() { 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 e5de7b3ea8..27cc9baf96 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 @@ -28,7 +28,7 @@ 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.sdk.internal.util.PrivilegedActionUtils; import co.elastic.apm.agent.tracer.dispatch.TextHeaderGetter; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/AbstractAwsLambdaHandlerInstrumentation.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/AbstractAwsLambdaHandlerInstrumentation.java index 9c1bef5c3c..d447a53d40 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/AbstractAwsLambdaHandlerInstrumentation.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/AbstractAwsLambdaHandlerInstrumentation.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.awslambda; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.configuration.ServerlessConfiguration; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -31,7 +31,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.none; -public abstract class AbstractAwsLambdaHandlerInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractAwsLambdaHandlerInstrumentation extends ElasticApmInstrumentation { protected final ServerlessConfiguration serverlessConfiguration; 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 25c57bfd8e..d2d4589d9c 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 @@ -22,7 +22,7 @@ import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; 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 61a969c67d..ec7ed0db69 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 @@ -22,7 +22,7 @@ import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPResponse; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java index 32a12ff786..72c1d0eecb 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java @@ -23,7 +23,7 @@ import co.elastic.apm.agent.impl.context.Request; import co.elastic.apm.agent.impl.context.Response; import co.elastic.apm.agent.impl.context.ServiceOrigin; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; import co.elastic.apm.agent.sdk.logging.Logger; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java index f0b45fcd65..8c61317ce1 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java @@ -31,8 +31,8 @@ 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.util.LoggerUtils; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractMessageBasedTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractMessageBasedTransactionHelper.java index 1adae8585c..328d88febf 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractMessageBasedTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractMessageBasedTransactionHelper.java @@ -23,7 +23,7 @@ import co.elastic.apm.agent.impl.context.ServiceOrigin; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.tracer.AbstractSpan; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; import javax.annotation.Nullable; 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 1963a04e5d..d86880d0f4 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 @@ -21,7 +21,7 @@ import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; import javax.annotation.Nullable; 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 cec3bbdf45..fbfda924cd 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 @@ -25,7 +25,7 @@ import co.elastic.apm.agent.impl.context.ServiceOrigin; import co.elastic.apm.agent.impl.transaction.FaasTrigger; import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.S3Event; import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractPlainLambdaTest.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractPlainLambdaTest.java index 996dfc690b..8eae63d31a 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractPlainLambdaTest.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractPlainLambdaTest.java @@ -23,7 +23,7 @@ import co.elastic.apm.agent.impl.transaction.Faas; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.util.concurrent.TimeUnit; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractStreamHandlerLambdaTest.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractStreamHandlerLambdaTest.java index 1f382fdb2f..ab1f533b4e 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractStreamHandlerLambdaTest.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/AbstractStreamHandlerLambdaTest.java @@ -24,7 +24,7 @@ import co.elastic.apm.agent.impl.transaction.Faas; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import org.assertj.core.api.ThrowableAssert; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV1LambdaTest.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV1LambdaTest.java index 8f88d42575..c6e0be6e30 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV1LambdaTest.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV1LambdaTest.java @@ -29,7 +29,7 @@ import co.elastic.apm.agent.impl.transaction.Faas; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; import org.junit.BeforeClass; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV2LambdaTest.java b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV2LambdaTest.java index b3970915af..d2a7cd73b4 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV2LambdaTest.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/test/java/co/elastic/apm/agent/awslambda/ApiGatewayV2LambdaTest.java @@ -30,7 +30,7 @@ import co.elastic.apm.agent.impl.transaction.Faas; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.tracer.Outcome; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPResponse; import org.junit.BeforeClass; 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 bb45851818..6918214672 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 @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.cassandra; -import co.elastic.apm.agent.db.signature.SignatureParser; +import co.elastic.apm.agent.sdk.internal.db.signature.SignatureParser; import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.tracer.Tracer; 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 3e6900d804..1cf1f041eb 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 @@ -18,10 +18,10 @@ */ package co.elastic.apm.agent.cassandra3; -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.context.Destination; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Span; import com.datastax.driver.core.BoundStatement; @@ -44,7 +44,7 @@ import static net.bytebuddy.matcher.ElementMatchers.*; -public abstract class Cassandra3Instrumentation extends TracerAwareInstrumentation { +public abstract class Cassandra3Instrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher.Junction getClassLoaderMatcher() { 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 1b6d61e792..059c7d6990 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 @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.cassandra4; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.cassandra.CassandraHelper; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Span; import com.datastax.oss.driver.api.core.CqlIdentifier; @@ -54,7 +54,7 @@ /** * Instruments {@link Session#execute(Request, GenericType)} */ -public class Cassandra4Instrumentation extends TracerAwareInstrumentation { +public class Cassandra4Instrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcherPreFilter() { diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractAlibabaDubboInstrumentation.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractAlibabaDubboInstrumentation.java index 63fa10d2c0..7128442734 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractAlibabaDubboInstrumentation.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractAlibabaDubboInstrumentation.java @@ -20,7 +20,7 @@ import net.bytebuddy.matcher.ElementMatcher; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; public abstract class AbstractAlibabaDubboInstrumentation extends AbstractDubboInstrumentation { diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractDubboInstrumentation.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractDubboInstrumentation.java index 416c998584..20297e2868 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractDubboInstrumentation.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AbstractDubboInstrumentation.java @@ -18,13 +18,16 @@ */ package co.elastic.apm.agent.dubbo; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; -public abstract class AbstractDubboInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractDubboInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { 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 c418e00402..4cef7a6aae 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 @@ -26,7 +26,7 @@ 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 co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.alibaba.dubbo.rpc.Invocation; import com.alibaba.dubbo.rpc.Invoker; import com.alibaba.dubbo.rpc.Result; 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 7131dc4c9e..09d3235b34 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,16 +20,24 @@ import co.elastic.apm.agent.dubbo.helper.ApacheDubboTextMapPropagator; import co.elastic.apm.agent.dubbo.helper.DubboTraceHelper; -import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; -import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; -import co.elastic.apm.agent.tracer.*; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +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.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.Transaction; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; -import org.apache.dubbo.rpc.*; -import org.apache.dubbo.rpc.protocol.AsyncToSyncInvoker; +import org.apache.dubbo.rpc.AppResponse; +import org.apache.dubbo.rpc.AsyncRpcResult; +import org.apache.dubbo.rpc.Invocation; +import org.apache.dubbo.rpc.InvokeMode; +import org.apache.dubbo.rpc.Invoker; +import org.apache.dubbo.rpc.Result; +import org.apache.dubbo.rpc.RpcContext; +import org.apache.dubbo.rpc.RpcInvocation; import javax.annotation.Nullable; -import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; public class ApacheMonitorFilterAdvice { diff --git a/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/EcsLoggingInstrumentation.java b/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/EcsLoggingInstrumentation.java index a34d33f6ad..d454acbe74 100644 --- a/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/EcsLoggingInstrumentation.java +++ b/apm-agent-plugins/apm-ecs-logging-plugin/src/main/java/co/elastic/apm/agent/ecs_logging/EcsLoggingInstrumentation.java @@ -18,10 +18,10 @@ */ package co.elastic.apm.agent.ecs_logging; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; import co.elastic.apm.agent.loginstr.AbstractLogIntegrationInstrumentation; import net.bytebuddy.matcher.ElementMatcher; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInternalPluginClassLoader; import static net.bytebuddy.matcher.ElementMatchers.not; public abstract class EcsLoggingInstrumentation extends AbstractLogIntegrationInstrumentation { @@ -35,6 +35,6 @@ protected String getLoggingInstrumentationGroupName() { @Override public ElementMatcher.Junction getClassLoaderMatcher() { // ECS formatter that is loaded within the agent should not be instrumented - return not(CustomElementMatchers.isInternalPluginClassLoader()); + return not(isInternalPluginClassLoader()); } } diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentation.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentation.java index 583535e436..4c54b64108 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentation.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentation.java @@ -18,13 +18,17 @@ */ package co.elastic.apm.agent.esrestclient; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Collection; import java.util.Collections; -public abstract class ElasticsearchRestClientInstrumentation extends TracerAwareInstrumentation { +public abstract class ElasticsearchRestClientInstrumentation extends ElasticApmInstrumentation { + + protected static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { 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 8fc920163c..be61271c86 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 @@ -27,8 +27,8 @@ 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.sdk.internal.util.IOUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; import co.elastic.apm.agent.tracer.pooling.Allocator; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; @@ -37,8 +37,6 @@ import org.elasticsearch.client.ResponseListener; import javax.annotation.Nullable; -import java.util.Arrays; -import java.util.List; import java.util.concurrent.CancellationException; public class ElasticsearchRestClientInstrumentationHelper { 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 516c3162db..ba67e83ecc 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 @@ -19,8 +19,8 @@ package co.elastic.apm.agent.finaglehttpclient; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; @@ -36,7 +36,7 @@ import java.util.Collection; import java.util.Locale; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -50,7 +50,7 @@ * If the {@link FinaglePayloadSizeFilterInstrumentation} was not able to determine the service name, we add it here. */ @SuppressWarnings("JavadocReference") -public class FinagleExceptionSourceFilterInstrumentation extends TracerAwareInstrumentation { +public class FinagleExceptionSourceFilterInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { 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 13634c5633..ed30810de7 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 @@ -19,15 +19,17 @@ package co.elastic.apm.agent.finaglehttpclient; -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.sdk.ElasticApmInstrumentation; 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.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.Tracer; import co.elastic.apm.agent.tracer.dispatch.HeaderUtils; import com.twitter.finagle.http.Request; import com.twitter.finagle.http.Response; @@ -45,7 +47,7 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -59,7 +61,9 @@ * In this case we try to enrich the span via the {@link FinagleExceptionSourceFilterInstrumentation}. */ @SuppressWarnings("JavadocReference") -public class FinaglePayloadSizeFilterInstrumentation extends TracerAwareInstrumentation { +public class FinaglePayloadSizeFilterInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcher() { diff --git a/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleTlsFilterInstrumentation.java b/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleTlsFilterInstrumentation.java index 92142d14fc..2304f1958e 100644 --- a/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleTlsFilterInstrumentation.java +++ b/apm-agent-plugins/apm-finagle-httpclient-plugin/src/main/java/co/elastic/apm/agent/finaglehttpclient/FinagleTlsFilterInstrumentation.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.finaglehttpclient; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakSet; import com.twitter.finagle.http.Request; @@ -42,7 +42,7 @@ * If this filter is executed for a request, we assume that it is a TLS request. */ @SuppressWarnings("JavadocReference") -public class FinagleTlsFilterInstrumentation extends TracerAwareInstrumentation { +public class FinagleTlsFilterInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { 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 872f86d6ea..25aca71556 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 @@ -18,9 +18,11 @@ */ package co.elastic.apm.agent.grails; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +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.util.TransactionNameUtils; +import co.elastic.apm.agent.tracer.util.TransactionNameUtils; import grails.core.GrailsControllerClass; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -31,7 +33,7 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_HIGH_LEVEL_FRAMEWORK; import static grails.core.GrailsControllerClass.INDEX_ACTION; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; @@ -42,7 +44,9 @@ import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class GrailsTransactionNameInstrumentation extends TracerAwareInstrumentation { +public class GrailsTransactionNameInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcher() { diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/BaseInstrumentation.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/BaseInstrumentation.java index f63ca09913..d7100e8790 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/BaseInstrumentation.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/main/java/co/elastic/apm/agent/grpc/BaseInstrumentation.java @@ -18,12 +18,16 @@ */ package co.elastic.apm.agent.grpc; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Collection; import java.util.Collections; -public abstract class BaseInstrumentation extends TracerAwareInstrumentation { +public abstract class BaseInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public final Collection getInstrumentationGroupNames() { 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 6e1e243ea4..8a3cac1181 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 @@ -21,7 +21,7 @@ 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; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import io.grpc.Metadata; import io.grpc.ServerCall; import net.bytebuddy.asm.Advice; 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 970d15a847..1438fb99eb 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 @@ -18,10 +18,12 @@ */ package co.elastic.apm.agent.hibernatesearch.v5; -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.sdk.ElasticApmInstrumentation; +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 net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -33,7 +35,7 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.isInterface; @@ -41,7 +43,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; -public class HibernateSearch5Instrumentation extends TracerAwareInstrumentation { +public class HibernateSearch5Instrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public String getAdviceClassName() { 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 9c4dd7cefc..859ae7a1b9 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 @@ -18,8 +18,10 @@ */ package co.elastic.apm.agent.hibernatesearch; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +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 net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -31,7 +33,7 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.isInterface; @@ -40,7 +42,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; -public class HibernateSearch6Instrumentation extends TracerAwareInstrumentation { +public class HibernateSearch6Instrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public String getAdviceClassName() { diff --git a/apm-agent-plugins/apm-httpclient-core/src/test/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentationTest.java b/apm-agent-plugins/apm-httpclient-core/src/test/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentationTest.java index 9e21159791..4df9872a5d 100644 --- a/apm-agent-plugins/apm-httpclient-core/src/test/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentationTest.java +++ b/apm-agent-plugins/apm-httpclient-core/src/test/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentationTest.java @@ -23,7 +23,8 @@ import co.elastic.apm.agent.impl.TextHeaderMapAccessor; import co.elastic.apm.agent.impl.context.Destination; import co.elastic.apm.agent.impl.context.Http; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; +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.impl.transaction.Transaction; 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 bea7ca3c0c..5fac2d9689 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 @@ -18,8 +18,9 @@ */ package co.elastic.apm.agent.websocket; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; 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.tracer.Tracer; import co.elastic.apm.agent.tracer.Transaction; @@ -33,9 +34,9 @@ import javax.annotation.Nullable; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_HIGH_LEVEL_FRAMEWORK; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; @@ -44,7 +45,9 @@ import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; import static net.bytebuddy.matcher.ElementMatchers.not; -public abstract class BaseServerEndpointInstrumentation extends TracerAwareInstrumentation { +public abstract class BaseServerEndpointInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); private final Collection applicationPackages; 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 56b444a371..5c8f906be6 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 @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.websocket; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.tracer.Tracer; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import jakarta.websocket.server.ServerEndpoint; import net.bytebuddy.asm.Advice; 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 b387fa28ae..965b58c4d4 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 @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.websocket; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.tracer.Tracer; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import net.bytebuddy.asm.Advice; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentationTest.java b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentationTest.java index d6e3586a5d..8bff75c9c4 100644 --- a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentationTest.java +++ b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JakartaServerEndpointInstrumentationTest.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.websocket; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import co.elastic.apm.agent.websocket.endpoint.JakartaServerEndpoint; class JakartaServerEndpointInstrumentationTest extends BaseServerEndpointInstrumentationTest { diff --git a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentationTest.java b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentationTest.java index 701eb63fd4..d9bd783f0c 100644 --- a/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentationTest.java +++ b/apm-agent-plugins/apm-jakarta-websocket-plugin/src/test/java/co/elastic/apm/agent/websocket/JavaxServerEndpointInstrumentationTest.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.websocket; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import co.elastic.apm.agent.websocket.endpoint.JavaxServerEndpoint; class JavaxServerEndpointInstrumentationTest extends BaseServerEndpointInstrumentationTest { diff --git a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java index f47877ba6e..3e4f9b3f3e 100644 --- a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java +++ b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java @@ -18,9 +18,11 @@ */ package co.elastic.apm.agent.concurrent; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.sdk.state.GlobalVariables; -import co.elastic.apm.agent.util.ExecutorUtils; +import co.elastic.apm.agent.sdk.internal.util.ExecutorUtils; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.NamedElement; @@ -43,7 +45,7 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.is; import static net.bytebuddy.matcher.ElementMatchers.isOverriddenFrom; @@ -57,7 +59,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -public abstract class ExecutorInstrumentation extends TracerAwareInstrumentation { +public abstract class ExecutorInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); static final Set excludedClasses = GlobalVariables.get(ExecutorInstrumentation.class, "excludedClasses", new HashSet()); diff --git a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ForkJoinTaskInstrumentation.java b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ForkJoinTaskInstrumentation.java index 205066d1ea..a2648cece9 100644 --- a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ForkJoinTaskInstrumentation.java +++ b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ForkJoinTaskInstrumentation.java @@ -18,7 +18,9 @@ */ package co.elastic.apm.agent.concurrent; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -36,7 +38,9 @@ /** * Instruments {@link ForkJoinTask#fork()} to support parallel streams. */ -public class ForkJoinTaskInstrumentation extends TracerAwareInstrumentation { +public class ForkJoinTaskInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); static { if (Boolean.parseBoolean(System.getProperty("intellij.debug.agent"))) { diff --git a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrentPluginClassLoaderRootPackageCustomizer.java b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrentPluginClassLoaderRootPackageCustomizer.java index 61a37f7f40..a8ee684623 100644 --- a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrentPluginClassLoaderRootPackageCustomizer.java +++ b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/JavaConcurrentPluginClassLoaderRootPackageCustomizer.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.concurrent; -import co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer; +import co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer; import java.util.Collection; import java.util.Collections; 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 606b8f8546..3210789442 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 @@ -18,9 +18,11 @@ */ package co.elastic.apm.agent.concurrent; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -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.tracer.AbstractSpan; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -43,7 +45,9 @@ * {@linkplain DynamicTransformer#ensureInstrumented(Class, Collection) ensure} * that particular {@link Callable}, {@link Runnable} and {@link ForkJoinTask} classes are instrumented. */ -public class RunnableCallableForkJoinTaskInstrumentation extends TracerAwareInstrumentation { +public class RunnableCallableForkJoinTaskInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcher() { diff --git a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-java-concurrent-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-java-concurrent-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer diff --git a/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientInstrumentation.java b/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientInstrumentation.java index edf5bec64d..bb622cc687 100644 --- a/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientInstrumentation.java +++ b/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapClientInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.java_ldap; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -28,7 +28,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; -public class LdapClientInstrumentation extends TracerAwareInstrumentation { +public class LdapClientInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { diff --git a/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapPluginModuleOpens.java b/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapPluginModuleOpens.java index ae9cd3f848..1cfa4b849e 100644 --- a/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapPluginModuleOpens.java +++ b/apm-agent-plugins/apm-java-ldap-plugin/src/main/java/co/elastic/apm/agent/java_ldap/LdapPluginModuleOpens.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.java_ldap; -import co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer; +import co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer; import java.util.Collection; import java.util.Collections; diff --git a/apm-agent-plugins/apm-java-ldap-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-java-ldap-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-java-ldap-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-java-ldap-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer diff --git a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinHandlerLambdaInstrumentation.java b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinHandlerLambdaInstrumentation.java index 086ba0c52e..80f8caceb9 100644 --- a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinHandlerLambdaInstrumentation.java +++ b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinHandlerLambdaInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.javalin; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import io.javalin.http.Context; import io.javalin.http.Handler; import net.bytebuddy.asm.Advice; @@ -32,12 +32,12 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -public class JavalinHandlerLambdaInstrumentation extends TracerAwareInstrumentation { +public class JavalinHandlerLambdaInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { 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 2275c9dc26..3cbf219743 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 @@ -18,14 +18,15 @@ */ package co.elastic.apm.agent.javalin; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.configuration.WebConfiguration; 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 co.elastic.apm.agent.tracer.util.TransactionNameUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import io.javalin.http.Context; import io.javalin.http.Handler; import io.javalin.http.HandlerType; @@ -44,7 +45,7 @@ import java.util.Collections; import java.util.concurrent.CompletableFuture; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_HIGH_LEVEL_FRAMEWORK; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; @@ -52,10 +53,12 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class JavalinInstrumentation extends TracerAwareInstrumentation { +public class JavalinInstrumentation extends ElasticApmInstrumentation { private static final Logger logger = LoggerFactory.getLogger(JavalinInstrumentation.class); + private static final Tracer tracer = GlobalTracer.get(); + private static final String FRAMEWORK_NAME = "Javalin"; @Override 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 c5c2d706f4..d6e52d7fae 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 @@ -18,9 +18,11 @@ */ package co.elastic.apm.agent.javalin; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +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.Span; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -30,14 +32,16 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class JavalinRenderInstrumentation extends TracerAwareInstrumentation { +public class JavalinRenderInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcher() { 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 d8ebc409d1..5eaf948c77 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 @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.jaxrs; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.tracer.Tracer; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import net.bytebuddy.asm.Advice; import javax.annotation.Nullable; 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 4387ad7b3a..0240e9d84b 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 @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.jaxrs; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.tracer.Tracer; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import net.bytebuddy.asm.Advice; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsTransactionNameInstrumentation.java b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsTransactionNameInstrumentation.java index 4f32f46ec0..6ab0c9d4b5 100644 --- a/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-jaxrs-plugin/src/main/java/co/elastic/apm/agent/jaxrs/JaxRsTransactionNameInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.jaxrs; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; import co.elastic.apm.agent.tracer.Tracer; @@ -34,10 +34,10 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_HIGH_LEVEL_FRAMEWORK; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; @@ -47,14 +47,14 @@ import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; import static net.bytebuddy.matcher.ElementMatchers.not; -public abstract class JaxRsTransactionNameInstrumentation extends TracerAwareInstrumentation { +public abstract class JaxRsTransactionNameInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); private final Collection applicationPackages; private final JaxRsConfiguration configuration; - private final Tracer tracer; public JaxRsTransactionNameInstrumentation(Tracer tracer) { - this.tracer = tracer; applicationPackages = tracer.getConfig(StacktraceConfiguration.class).getApplicationPackages(); configuration = tracer.getConfig(JaxRsConfiguration.class); } @@ -125,7 +125,7 @@ static class BaseAdvice { .isUseJaxRsPathForTransactionName(); protected static void setTransactionName(String signature, @Nullable String pathAnnotationValue, @Nullable String frameworkVersion) { - final Transaction transaction = TracerAwareInstrumentation.tracer.currentTransaction(); + final Transaction transaction = 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 45a81d54e7..28059c812c 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 @@ -18,9 +18,10 @@ */ package co.elastic.apm.agent.jaxws; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; 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.Tracer; import co.elastic.apm.agent.tracer.Transaction; import net.bytebuddy.asm.Advice; @@ -33,10 +34,10 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.overridesOrImplementsMethodThat; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_HIGH_LEVEL_FRAMEWORK; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; @@ -46,7 +47,9 @@ import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; import static net.bytebuddy.matcher.ElementMatchers.not; -public class JaxWsTransactionNameInstrumentation extends TracerAwareInstrumentation { +public class JaxWsTransactionNameInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); private static final String FRAMEWORK_NAME = "JAX-WS"; diff --git a/apm-agent-plugins/apm-jdbc-plugin/pom.xml b/apm-agent-plugins/apm-jdbc-plugin/pom.xml index c08eef6653..f17bc2d383 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/pom.xml +++ b/apm-agent-plugins/apm-jdbc-plugin/pom.xml @@ -17,6 +17,14 @@ + + ${project.groupId} + apm-agent-plugin-sdk + ${project.version} + test-jar + test + + com.h2database diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcFilter.java b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcFilter.java index e925877b71..e74d3e10cc 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcFilter.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcFilter.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.jdbc; -import co.elastic.apm.agent.db.signature.Scanner; -import co.elastic.apm.agent.db.signature.ScannerFilter; +import co.elastic.apm.agent.sdk.internal.db.signature.Scanner; +import co.elastic.apm.agent.sdk.internal.db.signature.ScannerFilter; public class JdbcFilter implements ScannerFilter { diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcInstrumentation.java b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcInstrumentation.java index 98a1eb7c76..69fb9b7708 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcInstrumentation.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/JdbcInstrumentation.java @@ -18,12 +18,16 @@ */ package co.elastic.apm.agent.jdbc; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Collection; import java.util.Collections; -public abstract class JdbcInstrumentation extends TracerAwareInstrumentation { +public abstract class JdbcInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); private static final Collection JDBC_GROUPS = Collections.singleton("jdbc"); 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 424485f68c..912a567398 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 @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.jdbc.helper; -import co.elastic.apm.agent.db.signature.Scanner; -import co.elastic.apm.agent.db.signature.SignatureParser; +import co.elastic.apm.agent.sdk.internal.db.signature.Scanner; +import co.elastic.apm.agent.sdk.internal.db.signature.SignatureParser; import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.jdbc.JdbcFilter; diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/AbstractJdbcInstrumentationTest.java b/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/AbstractJdbcInstrumentationTest.java index 8aa57c9d20..71dbd2e4f8 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/AbstractJdbcInstrumentationTest.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/AbstractJdbcInstrumentationTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.AbstractInstrumentationTest; import co.elastic.apm.agent.configuration.SpanConfiguration; -import co.elastic.apm.agent.db.signature.SignatureParser; +import co.elastic.apm.agent.sdk.internal.db.signature.SignatureParser; import co.elastic.apm.agent.impl.context.Db; import co.elastic.apm.agent.impl.context.Destination; import co.elastic.apm.agent.tracer.Outcome; diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/JdbcSignatureParserTest.java b/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/JdbcSignatureParserTest.java index ac179bc4a2..f725d19466 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/JdbcSignatureParserTest.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/test/java/co/elastic/apm/agent/jdbc/JdbcSignatureParserTest.java @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.jdbc; -import co.elastic.apm.agent.db.signature.Scanner; -import co.elastic.apm.agent.db.signature.SignatureParser; -import co.elastic.apm.agent.db.signature.SignatureParserTest; +import co.elastic.apm.agent.sdk.internal.db.signature.Scanner; +import co.elastic.apm.agent.sdk.internal.db.signature.SignatureParser; +import co.elastic.apm.agent.sdk.internal.db.signature.SignatureParserTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; diff --git a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentation.java b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentation.java index 83466de502..889e317f1f 100644 --- a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/AbstractHttpClientInstrumentation.java @@ -18,12 +18,12 @@ */ package co.elastic.apm.agent.httpclient; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import java.util.Arrays; import java.util.Collection; -public abstract class AbstractHttpClientInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractHttpClientInstrumentation extends ElasticApmInstrumentation { @Override public Collection getInstrumentationGroupNames() { 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 11b94b63b0..9fe27a2e74 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 @@ -20,14 +20,14 @@ import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.GlobalTracer; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; import co.elastic.apm.agent.tracer.configuration.WebConfiguration; 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 co.elastic.apm.agent.tracer.util.TransactionNameUtils; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpsExchange; diff --git a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/JdkHttpServerInstrumentation.java b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/JdkHttpServerInstrumentation.java index c2465bc914..b9f16174e6 100644 --- a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/JdkHttpServerInstrumentation.java +++ b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/JdkHttpServerInstrumentation.java @@ -18,12 +18,12 @@ */ package co.elastic.apm.agent.httpserver; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import java.util.Collection; import java.util.Collections; -public abstract class JdkHttpServerInstrumentation extends TracerAwareInstrumentation { +public abstract class JdkHttpServerInstrumentation extends ElasticApmInstrumentation { @Override public Collection getInstrumentationGroupNames() { diff --git a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/test/java/co/elastic/apm/agent/httpserver/HttpHandlerTest.java b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/test/java/co/elastic/apm/agent/httpserver/HttpHandlerTest.java index 25ed94f2c9..eae5e67fed 100644 --- a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/test/java/co/elastic/apm/agent/httpserver/HttpHandlerTest.java +++ b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/test/java/co/elastic/apm/agent/httpserver/HttpHandlerTest.java @@ -23,12 +23,12 @@ import co.elastic.apm.agent.impl.context.Response; import co.elastic.apm.agent.impl.context.Socket; import co.elastic.apm.agent.impl.context.Url; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.tracer.configuration.WebConfiguration; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; 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 908880a349..c32f17e7d2 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 @@ -18,21 +18,23 @@ */ package co.elastic.apm.agent.jms; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; -import co.elastic.apm.agent.tracer.configuration.MessagingConfiguration; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; +import co.elastic.apm.agent.tracer.configuration.MessagingConfiguration; import net.bytebuddy.matcher.ElementMatcher; import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.not; -public abstract class BaseJmsInstrumentation extends TracerAwareInstrumentation { +public abstract class BaseJmsInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { 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 4042232fad..fc2a0ba44a 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 @@ -28,7 +28,7 @@ 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.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import javax.jms.Destination; 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 e9c2a06be7..f429e47dfa 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 @@ -22,7 +22,7 @@ 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.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.NamedElement; 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 cd56ae7bc3..9d5b70fe37 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 @@ -36,8 +36,8 @@ import javax.jms.Message; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; import static co.elastic.apm.agent.jms.JmsInstrumentationHelper.MESSAGING_TYPE; import static co.elastic.apm.agent.jms.JmsInstrumentationHelper.RECEIVE_NAME_PREFIX; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; diff --git a/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java b/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java index 94041e8397..300cbb22de 100644 --- a/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java +++ b/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java @@ -23,11 +23,10 @@ import co.elastic.apm.agent.metrics.DoubleSupplier; import co.elastic.apm.agent.metrics.Labels; import co.elastic.apm.agent.metrics.MetricRegistry; -import co.elastic.apm.agent.util.ExecutorUtils; -import co.elastic.apm.agent.util.GlobalLocks; +import co.elastic.apm.agent.tracer.GlobalLocks; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import org.stagemonitor.configuration.ConfigurationOption; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleInstrumentation.java b/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleInstrumentation.java index 732a37af03..f4880d6adb 100644 --- a/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleInstrumentation.java +++ b/apm-agent-plugins/apm-jsf-plugin/src/main/java/co/elastic/apm/agent/jsf/AbstractJsfLifecycleInstrumentation.java @@ -18,7 +18,9 @@ */ package co.elastic.apm.agent.jsf; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -26,7 +28,7 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.nameContains; @@ -37,10 +39,11 @@ * Instruments javax.faces.lifecycle.Lifecycle#execute and javax.faces.lifecycle.Lifecycle#render. * Code is duplicated because it is injected inline */ -public abstract class AbstractJsfLifecycleInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractJsfLifecycleInstrumentation extends ElasticApmInstrumentation { protected static final String SPAN_TYPE = "template"; protected static final String SPAN_SUBTYPE = "jsf"; protected static final String FRAMEWORK_NAME = "JavaServer Faces"; + static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcherPreFilter() { diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaInstrumentation.java index 37de780cd0..128462d190 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaInstrumentation.java @@ -18,17 +18,21 @@ */ package co.elastic.apm.agent.kafka; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.matcher.ElementMatcher; import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.not; -public abstract class BaseKafkaInstrumentation extends TracerAwareInstrumentation { +public abstract class BaseKafkaInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { 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 62af505ad4..3eb31ef0c4 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 @@ -28,7 +28,7 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; 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 93acd70c30..951eb81e49 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 @@ -32,7 +32,7 @@ import javax.annotation.Nullable; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaHeadersInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaHeadersInstrumentation.java index 06fa8763fb..532ae0f946 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaHeadersInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/BaseKafkaHeadersInstrumentation.java @@ -20,7 +20,7 @@ import net.bytebuddy.matcher.ElementMatcher; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; public abstract class BaseKafkaHeadersInstrumentation extends BaseKafkaInstrumentation { 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 87d73d8b9e..a3c82b37b1 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 @@ -27,7 +27,7 @@ import javax.annotation.Nullable; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; /** * An instrumentation for {@link org.apache.kafka.clients.consumer.KafkaConsumer#poll} exit on new clients 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 dfa2b29392..7ecf0452e4 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 @@ -24,7 +24,7 @@ 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 co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.header.Header; import org.apache.kafka.common.record.TimestampType; 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 2be570fc35..127026e546 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 @@ -21,8 +21,8 @@ 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; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLogManagerCorrelationInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLogManagerCorrelationInstrumentation.java index d125ac80c6..9d461d7f71 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLogManagerCorrelationInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLogManagerCorrelationInstrumentation.java @@ -25,7 +25,7 @@ import net.bytebuddy.matcher.ElementMatcher; import org.jboss.logmanager.ExtLogRecord; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLoggingCorrelationInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLoggingCorrelationInstrumentation.java index 34789487dc..48247074e3 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLoggingCorrelationInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-jboss-logging-plugin/src/main/java/co/elastic/apm/agent/jbosslogging/correlation/JBossLoggingCorrelationInstrumentation.java @@ -24,7 +24,7 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/AbstractJulEcsReformattingHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/AbstractJulEcsReformattingHelper.java index c53dc5fbd3..7e0eb6fd25 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/AbstractJulEcsReformattingHelper.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/AbstractJulEcsReformattingHelper.java @@ -24,7 +24,7 @@ import co.elastic.apm.agent.report.Reporter; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; -import co.elastic.apm.agent.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; import co.elastic.logging.AdditionalField; import co.elastic.logging.jul.EcsFormatter; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/JulEcsReformattingHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/JulEcsReformattingHelper.java index b09aef692d..1dacd82aa8 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/JulEcsReformattingHelper.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/java/co/elastic/apm/agent/jul/reformatting/JulEcsReformattingHelper.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.jul.reformatting; import co.elastic.apm.agent.loginstr.reformatting.Utils; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; import java.io.File; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-logging-plugin/apm-jul-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/correlation/Log4j1LogCorrelationInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/correlation/Log4j1LogCorrelationInstrumentation.java index 2c7ea336ac..8d9e339acf 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/correlation/Log4j1LogCorrelationInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/correlation/Log4j1LogCorrelationInstrumentation.java @@ -18,7 +18,6 @@ */ package co.elastic.apm.agent.log4j1.correlation; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.loginstr.AbstractLogIntegrationInstrumentation; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -26,9 +25,6 @@ import net.bytebuddy.matcher.ElementMatcher; import org.apache.log4j.spi.LoggingEvent; -import java.util.Collection; -import java.util.Collections; - import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/reformatting/Log4j1LogReformattingInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/reformatting/Log4j1LogReformattingInstrumentation.java index 49e6f9e2a0..f9d6ea90da 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/reformatting/Log4j1LogReformattingInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/reformatting/Log4j1LogReformattingInstrumentation.java @@ -25,7 +25,7 @@ import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-logging-plugin/apm-log4j1-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2LogCorrelationInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2LogCorrelationInstrumentation.java index 6bebe06e20..4375fec954 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2LogCorrelationInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2LogCorrelationInstrumentation.java @@ -18,8 +18,6 @@ */ package co.elastic.apm.agent.log4j2.correlation; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; import co.elastic.apm.agent.loginstr.AbstractLogIntegrationInstrumentation; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; @@ -28,11 +26,8 @@ import net.bytebuddy.matcher.ElementMatcher; import java.security.ProtectionDomain; -import java.util.Collection; -import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.implementationVersionGte; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.nameEndsWith; @@ -53,7 +48,7 @@ protected String getLoggingInstrumentationGroupName() { public ElementMatcher.Junction getClassLoaderMatcher() { return not(isBootstrapClassLoader()) // Do not instrument the agent log4j2 lib - .and(not(CustomElementMatchers.isAgentClassLoader())) + .and(not(isAgentClassLoader())) .and(classLoaderCanLoadClass("org.apache.logging.log4j.core.impl.LogEventFactory")); } diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/error/Log4j2LoggerErrorCapturingInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/error/Log4j2LoggerErrorCapturingInstrumentation.java index b463f414a5..ef1f4eb221 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/error/Log4j2LoggerErrorCapturingInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/error/Log4j2LoggerErrorCapturingInstrumentation.java @@ -18,14 +18,12 @@ */ package co.elastic.apm.agent.log4j2.error; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; import co.elastic.apm.agent.loginstr.error.AbstractLoggerErrorCapturingInstrumentation; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import java.util.Collection; - +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isAgentClassLoader; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; @@ -50,6 +48,6 @@ public ElementMatcher getMethodMatcher() { @Override public ElementMatcher.Junction getClassLoaderMatcher() { // Do not instrument the internal agent log4j2 loggers - return not(CustomElementMatchers.isAgentClassLoader()); + return not(isAgentClassLoader()); } } diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/reformatting/Log4j2EcsReformattingInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/reformatting/Log4j2EcsReformattingInstrumentation.java index 72ff264074..8d4b171117 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/reformatting/Log4j2EcsReformattingInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/reformatting/Log4j2EcsReformattingInstrumentation.java @@ -18,14 +18,14 @@ */ package co.elastic.apm.agent.log4j2.reformatting; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; import co.elastic.apm.agent.loginstr.AbstractLogIntegrationInstrumentation; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isAgentClassLoader; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.nameContains; @@ -45,7 +45,7 @@ protected String getLoggingInstrumentationGroupName() { public ElementMatcher.Junction getClassLoaderMatcher() { return not(isBootstrapClassLoader()) // Do not instrument the internal agent log4j2 appenders - .and(not(CustomElementMatchers.isAgentClassLoader())) + .and(not(isAgentClassLoader())) .and(classLoaderCanLoadClass("org.apache.logging.log4j.core.Appender")); } diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/correlation/LogbackLogCorrelationInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/correlation/LogbackLogCorrelationInstrumentation.java index 912aaadb51..9c0ee73e63 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/correlation/LogbackLogCorrelationInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/correlation/LogbackLogCorrelationInstrumentation.java @@ -19,16 +19,12 @@ package co.elastic.apm.agent.logback.correlation; import ch.qos.logback.classic.spi.ILoggingEvent; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.loginstr.AbstractLogIntegrationInstrumentation; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import java.util.Collection; -import java.util.Collections; - import static net.bytebuddy.matcher.ElementMatchers.named; /** diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/reformatting/LogbackLogReformattingInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/reformatting/LogbackLogReformattingInstrumentation.java index 898878e55c..6afdc60285 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/reformatting/LogbackLogReformattingInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/reformatting/LogbackLogReformattingInstrumentation.java @@ -23,7 +23,7 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-logging-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/AbstractLogIntegrationInstrumentation.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/AbstractLogIntegrationInstrumentation.java index a064c06aff..cf8d1ea50a 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/AbstractLogIntegrationInstrumentation.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/AbstractLogIntegrationInstrumentation.java @@ -19,17 +19,21 @@ package co.elastic.apm.agent.loginstr; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Arrays; import java.util.Collection; -public abstract class AbstractLogIntegrationInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractLogIntegrationInstrumentation extends ElasticApmInstrumentation { protected static String LOG_CORRELATION = "log-correlation"; protected static String LOG_REFORMATTING = "log-reformatting"; protected static String LOG_ERROR = "log-error"; + protected static final Tracer tracer = GlobalTracer.get(); + @Override public Collection getInstrumentationGroupNames() { return Arrays.asList("logging", getLoggingInstrumentationGroupName()); diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/LoggingPluginClassLoaderRootPackageCustomizer.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/LoggingPluginClassLoaderRootPackageCustomizer.java index 426d360962..da048684d6 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/LoggingPluginClassLoaderRootPackageCustomizer.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/LoggingPluginClassLoaderRootPackageCustomizer.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.loginstr; -import co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer; +import co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer; import java.util.Arrays; import java.util.Collection; 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 22e159d840..521e241ccc 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 @@ -21,7 +21,7 @@ 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 co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import javax.annotation.Nullable; 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 e506dbb263..75af126a95 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 @@ -18,7 +18,6 @@ */ package co.elastic.apm.agent.loginstr.reformatting; -import co.elastic.apm.agent.collections.DetachedThreadLocalImpl; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.metadata.Service; @@ -148,7 +147,7 @@ public abstract class AbstractEcsReformattingHelper { * This state is set at the beginning of {@link #onAppendEnter(Object)} and cleared at the end of {@link #onAppendExit(Object, Object)}. * This ensures consistency during the entire handling of each log events and guarantees that each log event is being * logged exactly once. - * No need to use {@link DetachedThreadLocalImpl} because we already annotate the class + * No need to use {@link co.elastic.apm.agent.sdk.weakconcurrent.DetachedThreadLocal} because we already annotate the class * with {@link GlobalState}. */ private static final ThreadLocal configForCurrentLogEvent = new ThreadLocal<>(); diff --git a/apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/java/co/elastic/apm/agent/tomcatlogging/reformatting/TomcatReformattingHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/java/co/elastic/apm/agent/tomcatlogging/reformatting/TomcatReformattingHelper.java index 29892514e7..e120bbdb57 100644 --- a/apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/java/co/elastic/apm/agent/tomcatlogging/reformatting/TomcatReformattingHelper.java +++ b/apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/java/co/elastic/apm/agent/tomcatlogging/reformatting/TomcatReformattingHelper.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.jul.reformatting.AbstractJulEcsReformattingHelper; import co.elastic.apm.agent.loginstr.reformatting.Utils; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import org.apache.juli.FileHandler; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-logging-plugin/apm-tomcat-logging-plugin/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer 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 442e4da187..f9ac5ef254 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 @@ -18,13 +18,17 @@ */ package co.elastic.apm.agent.micrometer; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.impl.ElasticApmTracer; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Collection; import java.util.Collections; -public abstract class AbstractMicrometerInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractMicrometerInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); static final MicrometerMetricsReporter reporter = new MicrometerMetricsReporter(tracer.require(ElasticApmTracer.class)); diff --git a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java index 4ceb0fb020..dbcdbfb8d9 100644 --- a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java +++ b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java @@ -24,7 +24,7 @@ import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakSet; import co.elastic.apm.agent.tracer.configuration.MetricsConfiguration; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.dslplatform.json.DslJson; import com.dslplatform.json.JsonWriter; import com.dslplatform.json.NumberConverter; diff --git a/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/Mongo3Instrumentation.java b/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/Mongo3Instrumentation.java index 18d2f4fc7a..05d89bf959 100644 --- a/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/Mongo3Instrumentation.java +++ b/apm-agent-plugins/apm-mongodb/apm-mongodb3-plugin/src/main/java/co/elastic/apm/agent/mongodb/v3/Mongo3Instrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.mongodb.v3; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -26,14 +26,13 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.implementationVersionGte; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.implementationVersionGte; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; - -public abstract class Mongo3Instrumentation extends TracerAwareInstrumentation { +public abstract class Mongo3Instrumentation extends ElasticApmInstrumentation { public ElementMatcher.Junction getProtectionDomainPostFilter() { // only use this instrumentation for 3.x diff --git a/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/Mongo4Instrumentation.java b/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/Mongo4Instrumentation.java index 9cf36bd5cd..d7862cf5a6 100644 --- a/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/Mongo4Instrumentation.java +++ b/apm-agent-plugins/apm-mongodb/apm-mongodb4-plugin/src/main/java/co/elastic/apm/agent/mongodb/v4/Mongo4Instrumentation.java @@ -18,18 +18,17 @@ */ package co.elastic.apm.agent.mongodb.v4; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.matcher.ElementMatcher; import java.security.ProtectionDomain; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.implementationVersionGte; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.implementationVersionGte; import static net.bytebuddy.matcher.ElementMatchers.not; -public abstract class Mongo4Instrumentation extends TracerAwareInstrumentation { +public abstract class Mongo4Instrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher.Junction getProtectionDomainPostFilter() { diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttp3ClientInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttp3ClientInstrumentation.java index 5ab5491940..7a98f92520 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttp3ClientInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttp3ClientInstrumentation.java @@ -18,12 +18,16 @@ */ package co.elastic.apm.agent.okhttp; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Arrays; import java.util.Collection; -public abstract class AbstractOkHttp3ClientInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractOkHttp3ClientInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttpClientInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttpClientInstrumentation.java index d49b3b4cf6..161e03eb6a 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/AbstractOkHttpClientInstrumentation.java @@ -18,12 +18,16 @@ */ package co.elastic.apm.agent.okhttp; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Arrays; import java.util.Collection; -public abstract class AbstractOkHttpClientInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractOkHttpClientInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentationTest.java b/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentationTest.java index f0f2d192e2..c2c81debf7 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentationTest.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentationTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.httpclient.AbstractHttpClientInstrumentationTest; import co.elastic.apm.agent.common.util.Version; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentationTest.java b/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentationTest.java index 3608f1f142..d014f6c56c 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentationTest.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/test/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentationTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.httpclient.AbstractHttpClientInstrumentationTest; import co.elastic.apm.agent.common.util.Version; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import okhttp3.OkHttpClient; import okhttp3.Request; import org.junit.Before; diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/ElasticOtelMetricsExporter.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/ElasticOtelMetricsExporter.java index 481df9277e..941cf14f05 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/ElasticOtelMetricsExporter.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-metricsdk-plugin/src/main/java/co/elastic/apm/agent/otelmetricsdk/ElasticOtelMetricsExporter.java @@ -22,9 +22,9 @@ import co.elastic.apm.agent.report.Reporter; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.ExecutorUtils; import co.elastic.apm.agent.tracer.configuration.MetricsConfiguration; import co.elastic.apm.agent.tracer.configuration.ReporterConfiguration; -import co.elastic.apm.agent.util.ExecutorUtils; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.metrics.Aggregation; import io.opentelemetry.sdk.metrics.InstrumentType; 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 e9d7f8c589..91b982a349 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 @@ -25,7 +25,7 @@ import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakSet; -import co.elastic.apm.agent.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; import io.opentelemetry.sdk.metrics.export.MetricExporter; import net.bytebuddy.asm.Advice; diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/AbstractOpenTelemetryInstrumentation.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/AbstractOpenTelemetryInstrumentation.java index 33ec237f9f..332eda3ecf 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/AbstractOpenTelemetryInstrumentation.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/AbstractOpenTelemetryInstrumentation.java @@ -18,18 +18,19 @@ */ package co.elastic.apm.agent.opentelemetry; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.matcher.ElementMatcher; import java.util.Arrays; import java.util.Collection; -public abstract class AbstractOpenTelemetryInstrumentation extends TracerAwareInstrumentation { +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; + +public abstract class AbstractOpenTelemetryInstrumentation extends ElasticApmInstrumentation { @Override public final ElementMatcher.Junction getClassLoaderMatcher() { - return CustomElementMatchers.classLoaderCanLoadClass("io.opentelemetry.context.propagation.TextMapSetter"); + return classLoaderCanLoadClass("io.opentelemetry.context.propagation.TextMapSetter"); } @Override diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpan.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpan.java index d2897d77c5..2fba44e39d 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpan.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpan.java @@ -25,8 +25,8 @@ 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.util.LoggerUtils; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; diff --git a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpanBuilder.java b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpanBuilder.java index 653fe169bc..e52149dc5f 100644 --- a/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpanBuilder.java +++ b/apm-agent-plugins/apm-opentelemetry/apm-opentelemetry-plugin/src/main/java/co/elastic/apm/agent/opentelemetry/tracing/OTelSpanBuilder.java @@ -27,10 +27,10 @@ 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.util.LoggerUtils; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; -import co.elastic.apm.agent.util.PrivilegedActionUtils; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; 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 0648df5021..9ff48901f6 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,15 +18,13 @@ */ 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.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; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -91,7 +89,7 @@ public static AbstractSpan doCreateTransactionOrSpan(@Nullable AbstractSpan> baggage, ClassLoader applicationClassLoader) { AbstractSpan result = null; - ElasticApmTracer tracer = TracerAwareInstrumentation.tracer.require(ElasticApmTracer.class); + ElasticApmTracer tracer = OpenTracingBridgeInstrumentation.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/ApmSpanInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanInstrumentation.java index 16bd9e34df..09a7e4c5b7 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.opentracingimpl; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.impl.transaction.Transaction; 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 75260e7e82..9e08b58e94 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,7 +18,6 @@ */ 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.transaction.TraceContext; import net.bytebuddy.asm.Advice; @@ -117,7 +116,7 @@ public static String onExit(@Advice.FieldValue(value = "childTraceContext", typi @Nullable public static TraceContext parseTextMap(Iterable> textMap) { - ElasticApmTracer tracer = TracerAwareInstrumentation.tracer.require(ElasticApmTracer.class); + ElasticApmTracer tracer = OpenTracingBridgeInstrumentation.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-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/OpenTracingBridgeInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/OpenTracingBridgeInstrumentation.java index 8d2d88b9a8..383234a543 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/OpenTracingBridgeInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/OpenTracingBridgeInstrumentation.java @@ -18,12 +18,17 @@ */ package co.elastic.apm.agent.opentracingimpl; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Collection; import java.util.Collections; -public abstract class OpenTracingBridgeInstrumentation extends TracerAwareInstrumentation { +public abstract class OpenTracingBridgeInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); + @Override public boolean includeWhenInstrumentationIsDisabled() { return true; diff --git a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/BaseProcessInstrumentation.java b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/BaseProcessInstrumentation.java index e7786333c4..d5c60ac25f 100644 --- a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/BaseProcessInstrumentation.java +++ b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/BaseProcessInstrumentation.java @@ -18,7 +18,9 @@ */ package co.elastic.apm.agent.process; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.matcher.ElementMatcher; import java.util.Collection; @@ -26,7 +28,9 @@ import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; -public abstract class BaseProcessInstrumentation extends TracerAwareInstrumentation { +public abstract class BaseProcessInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public final ElementMatcher.Junction getClassLoaderMatcher() { diff --git a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/CommonsExecAsyncInstrumentation.java b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/CommonsExecAsyncInstrumentation.java index c5cd2a12cb..2803221a9e 100644 --- a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/CommonsExecAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/CommonsExecAsyncInstrumentation.java @@ -18,8 +18,10 @@ */ package co.elastic.apm.agent.process; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.concurrent.JavaConcurrent; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.NamedElement; @@ -43,12 +45,14 @@ * Instruments {@code org.apache.commons.exec.DefaultExecutor#createThread(Runnable, String)} and any direct subclass * that overrides it. */ -public class CommonsExecAsyncInstrumentation extends TracerAwareInstrumentation { +public class CommonsExecAsyncInstrumentation extends ElasticApmInstrumentation { private static final String DEFAULT_EXECUTOR_CLASS = "org.apache.commons.exec.DefaultExecutor"; // only known subclass of default implementation private static final String DAEMON_EXECUTOR_CLASS = "org.apache.commons.exec.DaemonExecutor"; + private static final Tracer tracer = GlobalTracer.get(); + @Override public ElementMatcher getTypeMatcherPreFilter() { // Most implementations are likely to have 'Executor' in their name, which will work most of the time diff --git a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java index 95fe7f414a..551a74b8be 100644 --- a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java +++ b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java @@ -18,15 +18,15 @@ */ package co.elastic.apm.agent.profiler; -import co.elastic.apm.agent.collections.LongList; +import co.elastic.apm.agent.sdk.internal.collections.LongList; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.impl.transaction.StackFrame; import co.elastic.apm.agent.impl.transaction.TraceContext; -import co.elastic.apm.agent.objectpool.ObjectPool; import co.elastic.apm.agent.profiler.collections.LongHashSet; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.tracer.pooling.ObjectPool; import co.elastic.apm.agent.tracer.pooling.Recyclable; import javax.annotation.Nullable; @@ -148,7 +148,7 @@ private boolean happenedAfter(long timestamp) { return lastSeen < timestamp; } - public static CallTree.Root createRoot(ObjectPool rootPool, byte[] traceContext, @Nullable String serviceName, @Nullable String serviceVersion, long nanoTime) { + public static CallTree.Root createRoot(ObjectPool rootPool, byte[] traceContext, @Nullable String serviceName, @Nullable String serviceVersion, long nanoTime) { CallTree.Root root = rootPool.createInstance(); root.set(traceContext, serviceName, serviceVersion, nanoTime); return root; diff --git a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java index ab86f4792d..8b1f8daafb 100644 --- a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java +++ b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java @@ -18,6 +18,7 @@ */ package co.elastic.apm.agent.profiler; +import co.elastic.apm.agent.sdk.internal.util.ExecutorUtils; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; import co.elastic.apm.agent.tracer.configuration.TimeDuration; import co.elastic.apm.agent.context.AbstractLifecycleListener; @@ -26,13 +27,11 @@ import co.elastic.apm.agent.impl.transaction.StackFrame; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.common.util.WildcardMatcher; -import co.elastic.apm.agent.objectpool.ObjectPool; -import co.elastic.apm.agent.objectpool.impl.ListBasedObjectPool; import co.elastic.apm.agent.profiler.asyncprofiler.AsyncProfiler; import co.elastic.apm.agent.profiler.asyncprofiler.JfrParser; import co.elastic.apm.agent.profiler.collections.Long2ObjectHashMap; -import co.elastic.apm.agent.util.ExecutorUtils; import co.elastic.apm.agent.tracer.pooling.Allocator; +import co.elastic.apm.agent.tracer.pooling.ObjectPool; import com.lmax.disruptor.EventFactory; import com.lmax.disruptor.EventPoller; import com.lmax.disruptor.EventTranslatorTwoArg; @@ -209,14 +208,14 @@ public SamplingProfiler(final ElasticApmTracer tracer, NanoClock nanoClock, @Nul this.eventBuffer.addGatingSequences(sequence); this.poller = eventBuffer.newPoller(); contextForLogging = TraceContext.with64BitId(tracer); - this.callTreePool = ListBasedObjectPool.ofRecyclable(2 * 1024, new Allocator() { + this.callTreePool = tracer.getObjectPoolFactory().createRecyclableObjectPool(2 * 1024, new Allocator() { @Override public CallTree createInstance() { return new CallTree(); } }); // call tree roots are pooled so that fast activations/deactivations with no associated stack traces don't cause allocations - this.rootPool = ListBasedObjectPool.ofRecyclable(512, new Allocator() { + this.rootPool = tracer.getObjectPoolFactory().createRecyclableObjectPool(512, new Allocator() { @Override public CallTree.Root createInstance() { return new CallTree.Root(tracer); diff --git a/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerQueueTest.java b/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerQueueTest.java index ecf96619cd..d6c0f9d368 100644 --- a/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerQueueTest.java +++ b/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerQueueTest.java @@ -21,12 +21,14 @@ import co.elastic.apm.agent.MockTracer; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.transaction.TraceContext; +import co.elastic.apm.agent.objectpool.ObjectPoolFactory; import co.elastic.apm.agent.testutils.DisabledOnAppleSilicon; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledOnOs; import org.junit.jupiter.api.condition.OS; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; public class SamplingProfilerQueueTest { @@ -37,6 +39,7 @@ void testFillQueue() throws Exception { System.out.println(System.getProperty("os.name")); ElasticApmTracer tracer = MockTracer.create(); + when(tracer.getObjectPoolFactory()).thenReturn(new ObjectPoolFactory()); SamplingProfiler profiler = new SamplingProfiler(tracer, new SystemNanoClock()); diff --git a/apm-agent-plugins/apm-quartz/apm-quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java b/apm-agent-plugins/apm-quartz/apm-quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java index 4acc7e2bbd..cda510117e 100644 --- a/apm-agent-plugins/apm-quartz/apm-quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-quartz/apm-quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java @@ -18,37 +18,39 @@ */ package co.elastic.apm.agent.quartzjob; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; 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.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; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; import org.quartz.JobExecutionContext; -import co.elastic.apm.agent.sdk.logging.Logger; -import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; -public abstract class AbstractJobTransactionNameInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractJobTransactionNameInstrumentation extends ElasticApmInstrumentation { public static final String TRANSACTION_TYPE = "scheduled"; public static final String INSTRUMENTATION_TYPE = "quartz"; + private static final Tracer tracer = GlobalTracer.get(); + private final Collection applicationPackages; protected AbstractJobTransactionNameInstrumentation(Tracer tracer) { diff --git a/apm-agent-plugins/apm-quartz/apm-quartz-plugin-1/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java b/apm-agent-plugins/apm-quartz/apm-quartz-plugin-1/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java index 35cc23a87a..6e72639865 100644 --- a/apm-agent-plugins/apm-quartz/apm-quartz-plugin-1/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-quartz/apm-quartz-plugin-1/src/main/java/co/elastic/apm/agent/quartzjob/Quartz1JobTransactionNameInstrumentation.java @@ -18,8 +18,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.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; diff --git a/apm-agent-plugins/apm-quartz/apm-quartz-plugin-2/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java b/apm-agent-plugins/apm-quartz/apm-quartz-plugin-2/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java index 37b3bf20cb..c73078ef92 100644 --- a/apm-agent-plugins/apm-quartz/apm-quartz-plugin-2/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-quartz/apm-quartz-plugin-2/src/main/java/co/elastic/apm/agent/quartzjob/Quartz2JobTransactionNameInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.quartzjob; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; 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 a0100335db..17e887f362 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 @@ -18,22 +18,23 @@ */ package co.elastic.apm.agent.rabbitmq; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; -import co.elastic.apm.agent.tracer.configuration.MessagingConfiguration; +import co.elastic.apm.agent.common.util.WildcardMatcher; +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.common.util.WildcardMatcher; +import co.elastic.apm.agent.tracer.Tracer; +import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; +import co.elastic.apm.agent.tracer.configuration.MessagingConfiguration; import co.elastic.apm.agent.tracer.metadata.Message; import javax.annotation.Nullable; import java.util.Date; import java.util.Map; -public abstract class AbstractBaseInstrumentation extends TracerAwareInstrumentation { - - private static final CoreConfiguration coreConfiguration = GlobalTracer.get().getConfig(CoreConfiguration.class); - private static final MessagingConfiguration messagingConfiguration = GlobalTracer.get().getConfig(MessagingConfiguration.class); +public abstract class AbstractBaseInstrumentation extends ElasticApmInstrumentation { + static final Tracer tracer = GlobalTracer.get(); + private static final CoreConfiguration coreConfiguration = tracer.getConfig(CoreConfiguration.class); + private static final MessagingConfiguration messagingConfiguration = tracer.getConfig(MessagingConfiguration.class); /** * @param name name of the exchange or queue 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 35b904d28b..ddc551ca21 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 @@ -44,7 +44,7 @@ import java.util.HashMap; import java.util.Map; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.implementation.bytecode.assign.Assigner.Typing.DYNAMIC; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; 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 a75b6f8332..2ac2847c0c 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 @@ -21,7 +21,7 @@ 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 co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.Envelope; @@ -33,7 +33,7 @@ import javax.annotation.Nullable; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; 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 50e04c3aad..07ed99ce33 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 @@ -27,8 +27,8 @@ import co.elastic.apm.agent.rabbitmq.header.SpringRabbitMQTextHeaderGetter; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; -import co.elastic.apm.agent.util.LoggerUtils; -import co.elastic.apm.agent.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; 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-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 eeb51985bc..4de288a6d9 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 @@ -28,7 +28,7 @@ import javax.annotation.Nullable; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.isInterface; 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 cabe65c554..6aa8d6627e 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 @@ -21,7 +21,7 @@ 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 co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; 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 f49e7e87b8..7511edbb2f 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 @@ -26,7 +26,7 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.isInterface; diff --git a/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/ReactorInstrumentation.java b/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/ReactorInstrumentation.java index c824eda6f7..5d09aa1f4a 100644 --- a/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/ReactorInstrumentation.java +++ b/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/ReactorInstrumentation.java @@ -18,7 +18,9 @@ */ package co.elastic.apm.agent.reactor; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -38,7 +40,9 @@ * */ @SuppressWarnings("JavadocReference") -public class ReactorInstrumentation extends TracerAwareInstrumentation { +public class ReactorInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcher() { diff --git a/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4ConnectionInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4ConnectionInstrumentation.java index 443d75b9ff..c82e4bdf51 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4ConnectionInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-jedis-4-plugin/src/main/java/co/elastic/apm/agent/jedis/Jedis4ConnectionInstrumentation.java @@ -21,7 +21,7 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; diff --git a/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/JedisConnectionInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/JedisConnectionInstrumentation.java index 087da15afd..0e9c20ef06 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/JedisConnectionInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-jedis-plugin/src/main/java/co/elastic/apm/agent/jedis/JedisConnectionInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.jedis; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -26,14 +26,14 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.nameEndsWith; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class JedisConnectionInstrumentation extends TracerAwareInstrumentation { +public class JedisConnectionInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher.Junction getClassLoaderMatcher() { 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 a96832a580..14f1d555e7 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 @@ -18,8 +18,10 @@ */ package co.elastic.apm.agent.lettuce; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.reference.ReferenceCountedMap; import com.lambdaworks.redis.protocol.RedisCommand; import net.bytebuddy.matcher.ElementMatcher; @@ -27,9 +29,11 @@ import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -public abstract class Lettuce34Instrumentation extends TracerAwareInstrumentation { +public abstract class Lettuce34Instrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); static final ReferenceCountedMap, Span> commandToSpan = tracer.newReferenceCountedMap(); 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 7cbcf9c314..beda687cf8 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 @@ -18,9 +18,11 @@ */ package co.elastic.apm.agent.lettuce; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.reference.ReferenceCountedMap; import io.lettuce.core.protocol.RedisCommand; import net.bytebuddy.asm.Advice; @@ -43,7 +45,9 @@ * * The context will be propagated via the Netty instrumentation */ -public class Lettuce5StartSpanInstrumentation extends TracerAwareInstrumentation { +public class Lettuce5StartSpanInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); static final ReferenceCountedMap, Span> commandToSpan = tracer.newReferenceCountedMap(); 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 8d21f39a25..5532a4b21b 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 @@ -18,7 +18,9 @@ */ package co.elastic.apm.agent.lettuce; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.apm.agent.tracer.Span; import io.lettuce.core.protocol.RedisCommand; import net.bytebuddy.asm.Advice; @@ -26,8 +28,6 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import co.elastic.apm.agent.sdk.logging.Logger; -import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Arrays; import java.util.Collection; @@ -47,7 +47,7 @@ *

  • {@link RedisCommand#cancel()}
  • * */ -public abstract class Lettuce5StopSpanInstrumentation extends TracerAwareInstrumentation { +public abstract class Lettuce5StopSpanInstrumentation extends ElasticApmInstrumentation { private static final Logger logger = LoggerFactory.getLogger(Lettuce5StopSpanInstrumentation.class); 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 f5d8a9eb67..675182d054 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 @@ -18,9 +18,9 @@ */ package co.elastic.apm.agent.redisson; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.Span; import io.netty.channel.Channel; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -40,7 +40,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; -public class RedisConnectionInstrumentation extends TracerAwareInstrumentation { +public class RedisConnectionInstrumentation extends ElasticApmInstrumentation { public static class AdviceClass { @Nullable 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 8302093ddf..1b5df42526 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 @@ -18,8 +18,10 @@ */ package co.elastic.apm.agent.scalaconcurrent; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +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.Tracer; import co.elastic.apm.agent.tracer.reference.ReferenceCountedMap; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -35,11 +37,14 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; -public abstract class FutureInstrumentation extends TracerAwareInstrumentation { +public abstract class FutureInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @SuppressWarnings("WeakerAccess") public static final ReferenceCountedMap> promisesToContext = tracer.newReferenceCountedMap(); + @Nonnull @Override public Collection getInstrumentationGroupNames() { 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 bfecd7640e..bc439465cc 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 @@ -18,35 +18,38 @@ */ package co.elastic.apm.agent.scheduled; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory.SimpleMethodSignature; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; 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.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; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; -import co.elastic.apm.agent.sdk.logging.Logger; -import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; import static net.bytebuddy.matcher.ElementMatchers.not; -public class ScheduledTransactionNameInstrumentation extends TracerAwareInstrumentation { +public class ScheduledTransactionNameInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); public static final Logger logger = LoggerFactory.getLogger(ScheduledTransactionNameInstrumentation.class); 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 2d98ea146a..d2a42b92db 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 @@ -18,37 +18,40 @@ */ package co.elastic.apm.agent.scheduled; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.bci.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; +import co.elastic.apm.agent.sdk.bytebuddy.SimpleMethodSignatureOffsetMappingFactory; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; import co.elastic.apm.agent.tracer.AbstractSpan; +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.util.PrivilegedActionUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; -import co.elastic.apm.agent.sdk.logging.Logger; -import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isInAnyPackage; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.isProxy; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isInAnyPackage; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.isProxy; import static net.bytebuddy.matcher.ElementMatchers.hasSuperClass; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; -public class TimerTaskInstrumentation extends TracerAwareInstrumentation { +public class TimerTaskInstrumentation extends ElasticApmInstrumentation { private static final String FRAMEWORK_NAME = "TimerTask"; public static final Logger logger = LoggerFactory.getLogger(TimerTaskInstrumentation.class); + private static final Tracer tracer = GlobalTracer.get(); + private final Collection applicationPackages; public TimerTaskInstrumentation(Tracer tracer) { diff --git a/apm-agent-plugins/apm-servlet-jakarta-test/src/test/java/co/elastic/apm/agent/servlet/JakartaServletInstrumentationTest.java b/apm-agent-plugins/apm-servlet-jakarta-test/src/test/java/co/elastic/apm/agent/servlet/JakartaServletInstrumentationTest.java index 3e7d83f5a5..74cc1431e1 100644 --- a/apm-agent-plugins/apm-servlet-jakarta-test/src/test/java/co/elastic/apm/agent/servlet/JakartaServletInstrumentationTest.java +++ b/apm-agent-plugins/apm-servlet-jakarta-test/src/test/java/co/elastic/apm/agent/servlet/JakartaServletInstrumentationTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.TracerInternalApiUtils; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.impl.transaction.Span; import jakarta.servlet.DispatcherType; import jakarta.servlet.Filter; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AbstractServletInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AbstractServletInstrumentation.java index 1fafd00b28..745f6bc6e9 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AbstractServletInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AbstractServletInstrumentation.java @@ -18,14 +18,18 @@ */ package co.elastic.apm.agent.servlet; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.matcher.ElementMatcher; import java.util.Collection; import java.util.Collections; -public abstract class AbstractServletInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractServletInstrumentation extends ElasticApmInstrumentation { + + protected static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/Constants.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/Constants.java index de00aacdad..addf631b4b 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/Constants.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/Constants.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet; -import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; +import co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; 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 069228bb27..d554686612 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 @@ -31,7 +31,7 @@ import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; 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.util.TransactionNameUtils; import co.elastic.apm.agent.tracer.Scope; import javax.annotation.Nullable; 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 a641b55519..de522c0bf3 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 @@ -19,7 +19,7 @@ package co.elastic.apm.agent.servlet; import co.elastic.apm.agent.httpserver.HttpServerHelper; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; import co.elastic.apm.agent.tracer.configuration.WebConfiguration; import co.elastic.apm.agent.tracer.Tracer; @@ -32,7 +32,7 @@ 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 co.elastic.apm.agent.tracer.util.TransactionNameUtils; 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/ServletVersionInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletVersionInstrumentation.java index 56a8473d9c..6ce4ef9a13 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletVersionInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletVersionInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.servlet; -import co.elastic.apm.agent.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; 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 d5c452d3c0..ee7f54b1b9 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 @@ -19,7 +19,7 @@ package co.elastic.apm.agent.servlet.helper; import co.elastic.apm.agent.tracer.metadata.Request; -import co.elastic.apm.agent.util.IOUtils; +import co.elastic.apm.agent.sdk.internal.util.IOUtils; import jakarta.servlet.ReadListener; import jakarta.servlet.ServletInputStream; 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 721019e497..e4e0f4bd93 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 @@ -19,7 +19,7 @@ package co.elastic.apm.agent.servlet.helper; import co.elastic.apm.agent.tracer.metadata.Request; -import co.elastic.apm.agent.util.IOUtils; +import co.elastic.apm.agent.sdk.internal.util.IOUtils; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletInstrumentationTest.java b/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletInstrumentationTest.java index dd3eaaa8ef..f1064787ca 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletInstrumentationTest.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletInstrumentationTest.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.impl.TracerInternalApiUtils; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.impl.transaction.Span; import okhttp3.Response; import org.eclipse.jetty.servlet.ErrorPageErrorHandler; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletTransactionHelperTest.java b/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletTransactionHelperTest.java index e1d882937f..d1d1fdc558 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletTransactionHelperTest.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/ServletTransactionHelperTest.java @@ -23,7 +23,7 @@ import co.elastic.apm.agent.tracer.configuration.WebConfiguration; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; -import co.elastic.apm.agent.util.TransactionNameUtils; +import co.elastic.apm.agent.tracer.util.TransactionNameUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/TestRequestBodyCapturing.java b/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/TestRequestBodyCapturing.java index 06efcfdc28..c4a8f01257 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/TestRequestBodyCapturing.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/test/java/co/elastic/apm/agent/servlet/TestRequestBodyCapturing.java @@ -24,7 +24,7 @@ import co.elastic.apm.agent.impl.error.ErrorCapture; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.report.serialize.SerializationConstants; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; 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 f3d9b1a965..ddef727dd0 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 @@ -22,8 +22,8 @@ import co.elastic.apm.agent.tracer.configuration.WebConfiguration; 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 co.elastic.apm.agent.tracer.util.TransactionNameUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import net.bytebuddy.asm.Advice; import spark.Route; import spark.routematch.RouteMatch; diff --git a/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesInstrumentation.java b/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesInstrumentation.java index c3debe8ff1..d26e1a210f 100644 --- a/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesInstrumentation.java +++ b/apm-agent-plugins/apm-sparkjava-plugin/src/main/java/co/elastic/apm/agent/sparkjava/RoutesInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.sparkjava; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -31,7 +31,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -public class RoutesInstrumentation extends TracerAwareInstrumentation { +public class RoutesInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { 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 f3a5687ecc..e790b6c3ef 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 @@ -18,14 +18,15 @@ */ package co.elastic.apm.agent.resttemplate; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; +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.GlobalTracer; import co.elastic.apm.agent.tracer.Outcome; import co.elastic.apm.agent.tracer.Span; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; -import co.elastic.apm.agent.sdk.logging.Logger; -import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.http.client.ClientHttpRequest; import org.springframework.http.client.ClientHttpResponse; @@ -36,6 +37,8 @@ public class SpringRestTemplateAdvice { + private static final Tracer tracer = GlobalTracer.get(); + private static final Logger logger = LoggerFactory.getLogger(SpringRestTemplateAdvice.class); @Nullable @@ -43,7 +46,7 @@ public class SpringRestTemplateAdvice { public static Object beforeExecute(@Advice.This ClientHttpRequest request) { logger.trace("Enter advice for method {}#execute()", request.getClass().getName()); - final AbstractSpan parent = TracerAwareInstrumentation.tracer.getActive(); + final AbstractSpan parent = tracer.getActive(); if (parent == null) { return null; } diff --git a/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateInstrumentation.java b/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateInstrumentation.java index 52821ab6ac..81ddbdf4e5 100644 --- a/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateInstrumentation.java +++ b/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.resttemplate; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -38,7 +38,7 @@ /** * Instruments {@link org.springframework.http.client.ClientHttpRequest#execute()} */ -public class SpringRestTemplateInstrumentation extends TracerAwareInstrumentation { +public class SpringRestTemplateInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { 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 9759b04547..17e15a3e3a 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 @@ -18,10 +18,12 @@ */ package co.elastic.apm.agent.springwebclient; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; +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.Span; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument; import net.bytebuddy.description.NamedElement; @@ -44,7 +46,9 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class WebClientExchangeFunctionInstrumentation extends TracerAwareInstrumentation { +public class WebClientExchangeFunctionInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcherPreFilter() { 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 fbbd4467ce..e86d0c750e 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 @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.springwebclient; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.Span; import co.elastic.apm.agent.tracer.Tracer; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java index b662d2c5d8..82e642304b 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/HandlerAdapterInstrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.tracer.AbstractSpan; import co.elastic.apm.agent.tracer.Transaction; -import co.elastic.apm.agent.util.TransactionNameUtils; +import co.elastic.apm.agent.tracer.util.TransactionNameUtils; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebFluxInstrumentation.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebFluxInstrumentation.java index 2008f1d305..87a4796d46 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebFluxInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebFluxInstrumentation.java @@ -18,12 +18,16 @@ */ package co.elastic.apm.agent.springwebflux; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import java.util.Collection; import java.util.Collections; -public abstract class WebFluxInstrumentation extends TracerAwareInstrumentation { +public abstract class WebFluxInstrumentation extends ElasticApmInstrumentation { + + static final Tracer tracer = GlobalTracer.get(); @Override public final Collection getInstrumentationGroupNames() { diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java index f471542f3d..39fa391b35 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java @@ -20,7 +20,8 @@ import co.elastic.apm.agent.httpserver.HttpServerHelper; import co.elastic.apm.agent.tracer.GlobalTracer; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.tracer.configuration.CoreConfiguration; import co.elastic.apm.agent.tracer.configuration.WebConfiguration; import co.elastic.apm.agent.tracer.Tracer; @@ -29,12 +30,11 @@ 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.PrivilegedActionUtils; -import co.elastic.apm.agent.util.TransactionNameUtils; +import co.elastic.apm.agent.sdk.internal.util.LoggerUtils; +import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.tracer.util.TransactionNameUtils; import org.reactivestreams.Publisher; import org.springframework.http.HttpCookie; import org.springframework.http.HttpHeaders; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java index 9326b0b7be..cc525a7f3a 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.springwebflux; -import co.elastic.apm.agent.cache.WeakKeySoftValueLoadingCache; +import co.elastic.apm.agent.sdk.weakconcurrent.WeakKeySoftValueLoadingCache; import co.elastic.apm.agent.tracer.Transaction; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/test/java/co/elastic/apm/agent/springwebflux/AbstractServerInstrumentationTest.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/test/java/co/elastic/apm/agent/springwebflux/AbstractServerInstrumentationTest.java index def9c4f9d9..7b75f987a3 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/test/java/co/elastic/apm/agent/springwebflux/AbstractServerInstrumentationTest.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-spring5/src/test/java/co/elastic/apm/agent/springwebflux/AbstractServerInstrumentationTest.java @@ -29,7 +29,7 @@ import co.elastic.apm.agent.springwebflux.testapp.GreetingWebClient; import co.elastic.apm.agent.springwebflux.testapp.WebFluxApplication; import co.elastic.apm.agent.testutils.DisabledOnAppleSilicon; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import org.assertj.core.data.Offset; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; diff --git a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractServletWrappingControllerTransactionNameInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractServletWrappingControllerTransactionNameInstrumentation.java index 70f7d197cd..9dae921eca 100644 --- a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractServletWrappingControllerTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractServletWrappingControllerTransactionNameInstrumentation.java @@ -18,11 +18,13 @@ */ package co.elastic.apm.agent.springwebmvc; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.servlet.Constants; import co.elastic.apm.agent.servlet.adapter.ServletRequestAdapter; +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.util.TransactionNameUtils; +import co.elastic.apm.agent.tracer.util.TransactionNameUtils; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -39,7 +41,9 @@ * to the name of the servlet, * overriding the transaction name set by {@link AbstractSpringTransactionNameInstrumentation} that would be {@code ServletWrappingController}. */ -public abstract class AbstractServletWrappingControllerTransactionNameInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractServletWrappingControllerTransactionNameInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); public abstract Constants.ServletImpl servletImpl(); diff --git a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringExceptionHandlerInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringExceptionHandlerInstrumentation.java index 1272615900..331f8131a4 100644 --- a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringExceptionHandlerInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringExceptionHandlerInstrumentation.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.springwebmvc; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.servlet.Constants; import co.elastic.apm.agent.servlet.adapter.ServletRequestAdapter; import net.bytebuddy.description.method.MethodDescription; @@ -33,7 +33,7 @@ import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public abstract class AbstractSpringExceptionHandlerInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractSpringExceptionHandlerInstrumentation extends ElasticApmInstrumentation { public abstract Constants.ServletImpl servletImpl(); diff --git a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringServiceNameInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringServiceNameInstrumentation.java index 1167c5b490..68a4d8f199 100644 --- a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringServiceNameInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringServiceNameInstrumentation.java @@ -18,12 +18,14 @@ */ package co.elastic.apm.agent.springwebmvc; -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.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.servlet.Constants; import co.elastic.apm.agent.servlet.ServletServiceNameHelper; import co.elastic.apm.agent.servlet.adapter.ServletContextAdapter; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -41,7 +43,9 @@ import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; -public abstract class AbstractSpringServiceNameInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractSpringServiceNameInstrumentation extends ElasticApmInstrumentation { + + private static final Tracer tracer = GlobalTracer.get(); @Override public ElementMatcher getTypeMatcherPreFilter() { diff --git a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringTransactionNameInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringTransactionNameInstrumentation.java index 1e8f49c7e6..f55f37f5c2 100644 --- a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/AbstractSpringTransactionNameInstrumentation.java @@ -18,14 +18,15 @@ */ package co.elastic.apm.agent.springwebmvc; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; -import co.elastic.apm.agent.tracer.configuration.WebConfiguration; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import co.elastic.apm.agent.servlet.Constants; import co.elastic.apm.agent.servlet.adapter.ServletRequestAdapter; 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.util.TransactionNameUtils; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.tracer.configuration.WebConfiguration; +import co.elastic.apm.agent.tracer.util.TransactionNameUtils; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -34,7 +35,7 @@ import java.util.Collection; import java.util.Collections; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_HIGH_LEVEL_FRAMEWORK; import static co.elastic.apm.agent.tracer.AbstractSpan.PRIORITY_LOW_LEVEL_FRAMEWORK; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; @@ -58,10 +59,12 @@ * Supports Spring MVC 3.x-6.x through the javax.servlet / jakarta.servlet dependent implementations of this class. *

    */ -public abstract class AbstractSpringTransactionNameInstrumentation extends TracerAwareInstrumentation { +public abstract class AbstractSpringTransactionNameInstrumentation extends ElasticApmInstrumentation { private static final String FRAMEWORK_NAME = "Spring Web MVC"; + private static final Tracer tracer = GlobalTracer.get(); + public abstract Constants.ServletImpl servletImpl(); /** diff --git a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/SpringMvcPluginClassLoaderRootPackageCustomizer.java b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/SpringMvcPluginClassLoaderRootPackageCustomizer.java index 419f72034d..deba804aa0 100644 --- a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/SpringMvcPluginClassLoaderRootPackageCustomizer.java +++ b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/SpringMvcPluginClassLoaderRootPackageCustomizer.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.springwebmvc; -import co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer; +import co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer; import java.util.Arrays; import java.util.Collection; diff --git a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java index 08d6173cdb..c85d2b62ef 100644 --- a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/java/co/elastic/apm/agent/springwebmvc/ViewRenderInstrumentation.java @@ -18,10 +18,12 @@ */ package co.elastic.apm.agent.springwebmvc; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import co.elastic.apm.agent.servlet.Constants; 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 net.bytebuddy.description.NamedElement; import net.bytebuddy.description.method.MethodDescription; @@ -40,13 +42,15 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -public class ViewRenderInstrumentation extends TracerAwareInstrumentation { +public class ViewRenderInstrumentation extends ElasticApmInstrumentation { private static final String SPAN_TYPE = "template"; private static final String SPAN_ACTION = "render"; private static final String DISPATCHER_SERVLET_RENDER_METHOD = "View#render"; private static final Map subTypeCache = new ConcurrentHashMap<>(); + private static final Tracer tracer = GlobalTracer.get(); + @Override public String getAdviceClassName() { return "co.elastic.apm.agent.springwebmvc.ViewRenderInstrumentation$ViewRenderAdviceService"; diff --git a/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer b/apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer similarity index 100% rename from apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/resources/META-INF/services/co.elastic.apm.agent.bci.PluginClassLoaderRootPackageCustomizer rename to apm-agent-plugins/apm-spring-webmvc/apm-spring-webmvc-spring5/src/main/resources/META-INF/services/co.elastic.apm.agent.sdk.internal.PluginClassLoaderRootPackageCustomizer 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 f5780ccacf..9299991b6f 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 @@ -22,7 +22,7 @@ import co.elastic.apm.agent.tracer.Outcome; 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.tracer.util.TransactionNameUtils; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionProxy; import net.bytebuddy.asm.Advice; 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 24456c19e1..f062f5a4e1 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 @@ -21,7 +21,7 @@ import co.elastic.apm.agent.tracer.GlobalTracer; import co.elastic.apm.agent.tracer.configuration.WebConfiguration; import co.elastic.apm.agent.tracer.Transaction; -import co.elastic.apm.agent.util.TransactionNameUtils; +import co.elastic.apm.agent.tracer.util.TransactionNameUtils; import net.bytebuddy.asm.Advice; import javax.servlet.http.HttpServletRequest; 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 59c00300a5..09fa0b6ef3 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 @@ -19,7 +19,7 @@ package co.elastic.apm.agent.struts; import co.elastic.apm.agent.tracer.Transaction; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import com.opensymphony.xwork2.ActionProxy; public class StrutsFrameworkUtils { diff --git a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsInstrumentation.java b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsInstrumentation.java index a86c9b86e7..7cbb8b91c1 100644 --- a/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsInstrumentation.java +++ b/apm-agent-plugins/apm-struts-plugin/src/main/java/co/elastic/apm/agent/struts/StrutsInstrumentation.java @@ -18,13 +18,13 @@ */ package co.elastic.apm.agent.struts; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import java.util.Collection; import static java.util.Collections.singletonList; -abstract class StrutsInstrumentation extends TracerAwareInstrumentation { +abstract class StrutsInstrumentation extends ElasticApmInstrumentation { @Override public Collection getInstrumentationGroupNames() { 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 6ccb56b3a9..5f2acf0a30 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 @@ -18,13 +18,15 @@ */ package co.elastic.apm.agent.urlconnection; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.httpclient.HttpClientHelper; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.sdk.state.CallDepth; +import co.elastic.apm.agent.sdk.state.GlobalState; 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.tracer.Span; -import co.elastic.apm.agent.sdk.state.CallDepth; -import co.elastic.apm.agent.sdk.state.GlobalState; +import co.elastic.apm.agent.tracer.Tracer; import co.elastic.apm.agent.tracer.dispatch.HeaderUtils; import co.elastic.apm.agent.tracer.reference.ReferenceCountedMap; import net.bytebuddy.asm.Advice; @@ -47,7 +49,9 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; @GlobalState -public abstract class HttpUrlConnectionInstrumentation extends TracerAwareInstrumentation { +public abstract class HttpUrlConnectionInstrumentation extends ElasticApmInstrumentation { + + public static final Tracer tracer = GlobalTracer.get(); // must be public! public static final ReferenceCountedMap> inFlightSpans = tracer.newReferenceCountedMap(); public static final CallDepth callDepth = CallDepth.get(HttpUrlConnectionInstrumentation.class); diff --git a/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/SSLContextInstrumentation.java b/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/SSLContextInstrumentation.java index 45178a7a67..314ec79a1d 100644 --- a/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/SSLContextInstrumentation.java +++ b/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/SSLContextInstrumentation.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.urlconnection; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.common.ThreadUtils; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; @@ -49,7 +49,7 @@ *
  • {@link SSLSocketFactory#getDefault()}
  • * */ -public class SSLContextInstrumentation extends TracerAwareInstrumentation { +public class SSLContextInstrumentation extends ElasticApmInstrumentation { @Override public ElementMatcher getTypeMatcher() { 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 73227fca8c..27e849f977 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 @@ -26,7 +26,7 @@ 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.tracer.util.TransactionNameUtils; import co.elastic.apm.agent.sdk.logging.Logger; import co.elastic.apm.agent.sdk.logging.LoggerFactory; 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 91b1642261..362726c51b 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,14 +18,14 @@ */ package co.elastic.apm.agent.vertx; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; 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.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 co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; import io.netty.buffer.ByteBuf; import io.netty.handler.codec.http.cookie.Cookie; import io.netty.handler.codec.http.cookie.ServerCookieDecoder; diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/NettyByteTransfer.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/NettyByteTransfer.java index f13f4d5d5b..a49127f794 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/NettyByteTransfer.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/NettyByteTransfer.java @@ -18,7 +18,7 @@ */ package co.elastic.apm.agent.vertx; -import co.elastic.apm.agent.util.IOUtils; +import co.elastic.apm.agent.sdk.internal.util.IOUtils; import io.netty.buffer.ByteBuf; import java.nio.Buffer; diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/CommonVertxWebTest.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/CommonVertxWebTest.java index 6c3106dcbb..3dab442a7e 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/CommonVertxWebTest.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/CommonVertxWebTest.java @@ -26,8 +26,8 @@ import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.common.util.WildcardMatcher; -import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; -import co.elastic.apm.agent.util.VersionUtils; +import co.elastic.apm.agent.sdk.internal.util.VersionUtils; +import co.elastic.apm.agent.tracer.metadata.PotentiallyMultiValuedMap; import co.elastic.apm.agent.vertx.AbstractVertxWebHelper; import io.vertx.core.Handler; import io.vertx.ext.web.Router; diff --git a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/Vertx3Instrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/Vertx3Instrumentation.java index 763a2f2428..7a5f86cb53 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/Vertx3Instrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx3-plugin/src/main/java/co/elastic/apm/agent/vertx/v3/Vertx3Instrumentation.java @@ -18,16 +18,20 @@ */ package co.elastic.apm.agent.vertx.v3; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.matcher.ElementMatcher; import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; import static net.bytebuddy.matcher.ElementMatchers.not; -public abstract class Vertx3Instrumentation extends TracerAwareInstrumentation { +public abstract class Vertx3Instrumentation extends ElasticApmInstrumentation { + + protected static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { diff --git a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/Vertx4Instrumentation.java b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/Vertx4Instrumentation.java index e32c3b0f26..d91a6092dd 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/Vertx4Instrumentation.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx4-plugin/src/main/java/co/elastic/apm/agent/vertx/v4/Vertx4Instrumentation.java @@ -18,15 +18,19 @@ */ package co.elastic.apm.agent.vertx.v4; -import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; +import co.elastic.apm.agent.tracer.GlobalTracer; +import co.elastic.apm.agent.tracer.Tracer; import net.bytebuddy.matcher.ElementMatcher; import java.util.Arrays; import java.util.Collection; -import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; +import static co.elastic.apm.agent.sdk.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; -public abstract class Vertx4Instrumentation extends TracerAwareInstrumentation { +public abstract class Vertx4Instrumentation extends ElasticApmInstrumentation { + + protected static final Tracer tracer = GlobalTracer.get(); @Override public Collection getInstrumentationGroupNames() { diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/GlobalLocks.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/GlobalLocks.java similarity index 96% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/util/GlobalLocks.java rename to apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/GlobalLocks.java index 5c87632b25..ea964c5529 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/GlobalLocks.java +++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/GlobalLocks.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.tracer; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; diff --git a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/PotentiallyMultiValuedMap.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/PotentiallyMultiValuedMap.java index ada83ed1e8..09dd097235 100644 --- a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/PotentiallyMultiValuedMap.java +++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/metadata/PotentiallyMultiValuedMap.java @@ -18,20 +18,183 @@ */ package co.elastic.apm.agent.tracer.metadata; +import co.elastic.apm.agent.tracer.pooling.Recyclable; + import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; -public interface PotentiallyMultiValuedMap { +/** + * This map is a mixture of a map with a single value and a map with multiple values. + *

    + * When there is only one value associated with a key, this map just the key as-is when calling {@link #get(String)}. + * But when {@link #add(String, String)} has been called multiple times for a given key, + * {@link #get(String)} will return a collection of values. + *

    + */ +public class PotentiallyMultiValuedMap implements Recyclable { + + private final List keys; + private final List values; + + public PotentiallyMultiValuedMap() { + this(10); + } + + public PotentiallyMultiValuedMap(int initialSize) { + keys = new ArrayList<>(initialSize); + values = new ArrayList<>(initialSize); + } - void add(String key, String value); + /** + * Adds a value to this map. + *

    + * If the given key already exists, + * the current value and the given value are added to a collection, + * which is set as the new value. + *

    + * + * @param key The key. + * @param value The value. + */ + public void add(String key, String value) { + final int index = indexOfIgnoreCase(key); + if (index >= 0) { + Object previousValue = values.get(index); + if (previousValue instanceof List) { + addValueToValueList(value, (List) previousValue); + } else { + convertValueToMultiValue(index, (String) previousValue, value); + } + } else { + keys.add(key); + values.add(value); + } + } + + public void set(String key, String[] values) { + if (values.length > 0) { + if (values.length == 1) { + keys.add(key); + this.values.add(values[0]); + } else { + keys.add(key); + this.values.add(Arrays.asList(values)); + } + } + } + + private int indexOfIgnoreCase(String key) { + for (int i = 0; i < keys.size(); i++) { + if (keys.get(i).equalsIgnoreCase(key)) { + return i; + } + } + return -1; + } + + /** + * Gets the first value which is associated with a given key. + * + * @param key The key you want to get the associated value for. + * @return The first value which is associated with a given key. + */ @Nullable - String getFirst(String key); + public String getFirst(String key) { + Object valueOrValueList = get(key); + if (valueOrValueList instanceof List) { + return (String) ((List) valueOrValueList).get(0); + } else { + return (String) valueOrValueList; + } + } @Nullable - Object get(String key); + public Object get(String key) { + final int index = indexOfIgnoreCase(key); + if (index == -1) { + return null; + } + return values.get(index); + } + + /** + * Gets all the values which age associated with a given key. + *

    + * If there is only one value associated with the given key, + * the value is wrapped inside a collection. + *

    + * + * @param key The key you want to get the associated value for. + * @return All the values which age associated with a given key. + */ + public List getAll(String key) { + final int index = indexOfIgnoreCase(key); + if (index == -1) { + return Collections.emptyList(); + } + Object valueOrValueList = values.get(index); + if (valueOrValueList instanceof List) { + return (List) valueOrValueList; + } else { + return Collections.singletonList((String) valueOrValueList); + } + } + + private void addValueToValueList(String value, List valueList) { + valueList.add(value); + } + + private void convertValueToMultiValue(int index, String previousValue, String value) { + List valueList = new ArrayList<>(4); + valueList.add(previousValue); + valueList.add(value); + values.set(index, valueList); + } + + public boolean isEmpty() { + return keys.isEmpty(); + } + + @Override + public void resetState() { + keys.clear(); + values.clear(); + } + + public String getKey(int i) { + return keys.get(i); + } + + public Object getValue(int i) { + return values.get(i); + } + + public int size() { + return keys.size(); + } + + public void copyFrom(PotentiallyMultiValuedMap other) { + this.keys.addAll(other.keys); + this.values.addAll(other.values); + } + + public void removeIgnoreCase(String key) { + final int index = indexOfIgnoreCase(key); + if (index != -1) { + keys.remove(index); + values.remove(index); + } + } - boolean isEmpty(); + public void set(int index, String value) { + values.set(index, value); + } - boolean containsIgnoreCase(String key); + public boolean containsIgnoreCase(String key) { + return indexOfIgnoreCase(key) != -1; + } } diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/web/ResultUtil.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/util/ResultUtil.java similarity index 97% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/web/ResultUtil.java rename to apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/util/ResultUtil.java index 24e42fc33b..e64fe85335 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/context/web/ResultUtil.java +++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/util/ResultUtil.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.impl.context.web; +package co.elastic.apm.agent.tracer.util; import co.elastic.apm.agent.tracer.Outcome; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/TransactionNameUtils.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/util/TransactionNameUtils.java similarity index 98% rename from apm-agent-core/src/main/java/co/elastic/apm/agent/util/TransactionNameUtils.java rename to apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/util/TransactionNameUtils.java index 6005f0507c..b4e5bcdcb3 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/TransactionNameUtils.java +++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/util/TransactionNameUtils.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.tracer.util; import co.elastic.apm.agent.common.util.WildcardMatcher; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/PotentiallyMultiValuedMapTest.java b/apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/metadata/PotentiallyMultiValuedMapTest.java similarity index 98% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/util/PotentiallyMultiValuedMapTest.java rename to apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/metadata/PotentiallyMultiValuedMapTest.java index 000666df81..ea024d69f2 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/PotentiallyMultiValuedMapTest.java +++ b/apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/metadata/PotentiallyMultiValuedMapTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.tracer.metadata; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/context/web/ResultUtilTest.java b/apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/util/ResultUtilTest.java similarity index 86% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/impl/context/web/ResultUtilTest.java rename to apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/util/ResultUtilTest.java index 45e4e57516..38f88509da 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/context/web/ResultUtilTest.java +++ b/apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/util/ResultUtilTest.java @@ -16,15 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.impl.context.web; +package co.elastic.apm.agent.tracer.util; import co.elastic.apm.agent.tracer.Outcome; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -import static co.elastic.apm.agent.impl.context.web.ResultUtil.getOutcomeByHttpClientStatus; -import static co.elastic.apm.agent.impl.context.web.ResultUtil.getOutcomeByHttpServerStatus; -import static co.elastic.apm.agent.impl.context.web.ResultUtil.getResultByHttpStatus; +import static co.elastic.apm.agent.tracer.util.ResultUtil.getOutcomeByHttpClientStatus; +import static co.elastic.apm.agent.tracer.util.ResultUtil.getOutcomeByHttpServerStatus; +import static co.elastic.apm.agent.tracer.util.ResultUtil.getResultByHttpStatus; import static org.assertj.core.api.Assertions.assertThat; class ResultUtilTest { diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/TransactionNameUtilsTest.java b/apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/util/TransactionNameUtilsTest.java similarity index 92% rename from apm-agent-core/src/test/java/co/elastic/apm/agent/util/TransactionNameUtilsTest.java rename to apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/util/TransactionNameUtilsTest.java index eb189a5d6e..34a17618df 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/TransactionNameUtilsTest.java +++ b/apm-agent-tracer/src/test/java/co/elastic/apm/agent/tracer/util/TransactionNameUtilsTest.java @@ -16,12 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package co.elastic.apm.agent.util; +package co.elastic.apm.agent.tracer.util; -import co.elastic.apm.agent.AbstractInstrumentationTest; -import co.elastic.apm.agent.tracer.configuration.WebConfiguration; import co.elastic.apm.agent.common.util.WildcardMatcher; -import org.jetbrains.annotations.Nullable; +import co.elastic.apm.agent.tracer.configuration.WebConfiguration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -32,14 +30,15 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; -class TransactionNameUtilsTest extends AbstractInstrumentationTest { +class TransactionNameUtilsTest { private WebConfiguration webConfig; @BeforeEach void beforeEach() { - webConfig = config.getConfig(WebConfiguration.class); + webConfig = mock(WebConfiguration.class); doReturn(true).when(webConfig).isUsePathAsName(); } @@ -116,7 +115,7 @@ void setNameFromHttpRequestPath() { } - private void testHttpRequestPath(String httpMethod, String firstPart, @Nullable String secondPart, List urlGroups, String expected) { + private void testHttpRequestPath(String httpMethod, String firstPart, String secondPart, List urlGroups, String expected) { StringBuilder sb = new StringBuilder(); TransactionNameUtils.setNameFromHttpRequestPath(httpMethod, firstPart, secondPart, sb, urlGroups); assertThat(sb.toString()).isEqualTo(expected); diff --git a/apm-opentracing/src/test/java/co/elastic/apm/opentracing/OpenTracingBridgeTest.java b/apm-opentracing/src/test/java/co/elastic/apm/opentracing/OpenTracingBridgeTest.java index bc0a374bfd..b72cb09194 100644 --- a/apm-opentracing/src/test/java/co/elastic/apm/opentracing/OpenTracingBridgeTest.java +++ b/apm-opentracing/src/test/java/co/elastic/apm/opentracing/OpenTracingBridgeTest.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.impl.TextHeaderMapAccessor; import co.elastic.apm.agent.impl.TracerInternalApiUtils; import co.elastic.apm.agent.impl.context.Http; -import co.elastic.apm.agent.impl.context.web.ResultUtil; +import co.elastic.apm.agent.tracer.util.ResultUtil; import co.elastic.apm.agent.impl.transaction.Id; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction;