diff --git a/.github/config/lychee.toml b/.github/config/lychee.toml index ba5f3db5d876..07c0801e0833 100644 --- a/.github/config/lychee.toml +++ b/.github/config/lychee.toml @@ -26,4 +26,7 @@ exclude = [ '^https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/io/opentelemetry/$', # new artifact, remove after 2.21.0 release '^https://central.sonatype.com/artifact/io.opentelemetry.instrumentation/opentelemetry-helidon-4.3$', + # flaky link + '^http://www.slf4j.org.*', + '^https://logback.qos.ch/.*' ] diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java index b35136987745..f228934b55bc 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java @@ -8,7 +8,6 @@ import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import javax.annotation.Nullable; /** * A {@link ConfigProvider} implementation backed by {@link ConfigProperties}. @@ -30,7 +29,6 @@ private ConfigPropertiesBackedConfigProvider(ConfigProperties configProperties) configProperties); } - @Nullable @Override public DeclarativeConfigProperties getInstrumentationConfig() { return instrumentationConfig; diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java index 29f9d424cd9d..14fbdc62c335 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java @@ -10,7 +10,7 @@ import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration; import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.InstrumentationModel; +import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalInstrumentationModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; import java.time.Duration; import java.util.Arrays; @@ -31,7 +31,8 @@ void setup() { OpenTelemetryConfigurationModel emptyModel = new OpenTelemetryConfigurationModel() - .withAdditionalProperty("instrumentation/development", new InstrumentationModel()); + .withAdditionalProperty( + "instrumentation/development", new ExperimentalInstrumentationModel()); SdkConfigProvider emptyConfigProvider = SdkConfigProvider.create(emptyModel); emptyBridge = new DeclarativeConfigPropertiesBridgeBuilder() diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 3f6d7103258a..74ac2064fe37 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -5,7 +5,7 @@ plugins { data class DependencySet(val group: String, val version: String, val modules: List) // this line is managed by .github/scripts/update-sdk-version.sh -val otelSdkVersion = "1.57.0" +val otelSdkVersion = "1.58.0" val otelContribVersion = "1.52.0-alpha" val otelSdkAlphaVersion = otelSdkVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1") diff --git a/examples/distro/build.gradle b/examples/distro/build.gradle index 59e943baa9d0..3b002509ca8f 100644 --- a/examples/distro/build.gradle +++ b/examples/distro/build.gradle @@ -27,7 +27,7 @@ subprojects { ext { versions = [ // this line is managed by .github/scripts/update-sdk-version.sh - opentelemetrySdk : "1.57.0", + opentelemetrySdk : "1.58.0", // these lines are managed by .github/scripts/update-version.sh opentelemetryJavaagent : "2.24.0-SNAPSHOT", diff --git a/examples/extension/build.gradle b/examples/extension/build.gradle index 7d2f46cd0e9e..28edaf3d85c6 100644 --- a/examples/extension/build.gradle +++ b/examples/extension/build.gradle @@ -23,7 +23,7 @@ version '1.0' ext { versions = [ // this line is managed by .github/scripts/update-sdk-version.sh - opentelemetrySdk : "1.57.0", + opentelemetrySdk : "1.58.0", // these lines are managed by .github/scripts/update-version.sh opentelemetryJavaagent : "2.24.0-SNAPSHOT", diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java index 7445cf02824d..c61bd56ced90 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.internal.HttpConstants; @@ -44,9 +45,9 @@ interface ValueProvider { } public CommonConfig(OpenTelemetry openTelemetry) { - ExtendedDeclarativeConfigProperties generalConfig = + DeclarativeConfigProperties generalConfig = DeclarativeConfigUtil.getGeneralInstrumentationConfig(openTelemetry); - ExtendedDeclarativeConfigProperties commonConfig = + DeclarativeConfigProperties commonConfig = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "common"); peerServiceResolver = PeerServiceResolver.create(openTelemetry); diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java index 680093f82150..203233f9266c 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -19,25 +19,17 @@ public final class DeclarativeConfigUtil { private DeclarativeConfigUtil() {} - public static ExtendedDeclarativeConfigProperties getInstrumentationConfig( + public static DeclarativeConfigProperties getInstrumentationConfig( OpenTelemetry openTelemetry, String instrumentationName) { - return getConfig(openTelemetry).get("java").get(instrumentationName); + return openTelemetry instanceof ExtendedOpenTelemetry + ? ((ExtendedOpenTelemetry) openTelemetry).getInstrumentationConfig(instrumentationName) + : empty(); } - public static ExtendedDeclarativeConfigProperties getGeneralInstrumentationConfig( + public static DeclarativeConfigProperties getGeneralInstrumentationConfig( OpenTelemetry openTelemetry) { - return getConfig(openTelemetry).get("general"); - } - - private static ExtendedDeclarativeConfigProperties getConfig(OpenTelemetry openTelemetry) { - if (openTelemetry instanceof ExtendedOpenTelemetry) { - ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry; - DeclarativeConfigProperties instrumentationConfig = - extendedOpenTelemetry.getConfigProvider().getInstrumentationConfig(); - if (instrumentationConfig != null) { - return new ExtendedDeclarativeConfigProperties(instrumentationConfig); - } - } - return new ExtendedDeclarativeConfigProperties(empty()); + return openTelemetry instanceof ExtendedOpenTelemetry + ? ((ExtendedOpenTelemetry) openTelemetry).getGeneralInstrumentationConfig() + : empty(); } } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java index cefe5fe6ebd2..de8801396d7d 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.api.incubator.config.internal; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import java.util.Objects; /** @@ -39,7 +40,7 @@ public class EnduserConfig { private final boolean roleEnabled; private final boolean scopeEnabled; - EnduserConfig(ExtendedDeclarativeConfigProperties commonConfig) { + EnduserConfig(DeclarativeConfigProperties commonConfig) { Objects.requireNonNull(commonConfig, "commonConfig must not be null"); /* diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/ExtendedDeclarativeConfigProperties.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/ExtendedDeclarativeConfigProperties.java deleted file mode 100644 index 74604a21902a..000000000000 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/ExtendedDeclarativeConfigProperties.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.api.incubator.config.internal; - -import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; - -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.common.ComponentLoader; -import java.util.List; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public final class ExtendedDeclarativeConfigProperties implements DeclarativeConfigProperties { - - private final DeclarativeConfigProperties delegate; - - ExtendedDeclarativeConfigProperties(DeclarativeConfigProperties delegate) { - this.delegate = delegate; - } - - public ExtendedDeclarativeConfigProperties get(String name) { - return new ExtendedDeclarativeConfigProperties(delegate.getStructured(name, empty())); - } - - @Nullable - @Override - public String getString(String name) { - return delegate.getString(name); - } - - @Nullable - @Override - public Boolean getBoolean(String name) { - return delegate.getBoolean(name); - } - - @Nullable - @Override - public Integer getInt(String name) { - return delegate.getInt(name); - } - - @Nullable - @Override - public Long getLong(String name) { - return delegate.getLong(name); - } - - @Nullable - @Override - public Double getDouble(String name) { - return delegate.getDouble(name); - } - - @Nullable - @Override - public List getScalarList(String name, Class scalarType) { - return delegate.getScalarList(name, scalarType); - } - - @Nullable - @Override - public DeclarativeConfigProperties getStructured(String name) { - return delegate.getStructured(name); - } - - @Nullable - @Override - public List getStructuredList(String name) { - return delegate.getStructuredList(name); - } - - @Override - public Set getPropertyKeys() { - return delegate.getPropertyKeys(); - } - - @Override - public ComponentLoader getComponentLoader() { - return delegate.getComponentLoader(); - } -} diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java index 53c6f2ac880e..88e90510e91a 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java @@ -381,12 +381,10 @@ private String getSpanSuppressionStrategy() { // we cannot use DeclarativeConfigUtil here because it's not available in instrumentation-api DeclarativeConfigProperties commonConfig = empty(); if (openTelemetry instanceof ExtendedOpenTelemetry) { - DeclarativeConfigProperties instrumentationConfig = - ((ExtendedOpenTelemetry) openTelemetry).getConfigProvider().getInstrumentationConfig(); - if (instrumentationConfig != null) { - commonConfig = - instrumentationConfig.getStructured("java", empty()).getStructured("common", empty()); - } + commonConfig = + ((ExtendedOpenTelemetry) openTelemetry) + .getConfigProvider() + .getInstrumentationConfig("common"); } String result = commonConfig.getString( diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java index e77f1d409b0b..d2618c4bf780 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java @@ -13,8 +13,8 @@ import com.amazonaws.handlers.RequestHandler2; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; import io.opentelemetry.instrumentation.awssdk.v1_11.AwsSdkTelemetry; @@ -26,7 +26,7 @@ public class TracingRequestHandler extends RequestHandler2 { private static final RequestHandler2 DELEGATE = buildDelegate(GlobalOpenTelemetry.get()); private static RequestHandler2 buildDelegate(OpenTelemetry openTelemetry) { - ExtendedDeclarativeConfigProperties messaging = + DeclarativeConfigProperties messaging = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "common").get("messaging"); return AwsSdkTelemetry.builder(openTelemetry) .setCaptureExperimentalSpanAttributes( diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java index df70827002ea..4f9b421d61cb 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java @@ -9,8 +9,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry; import java.util.List; @@ -35,11 +35,11 @@ private static AwsSdkTelemetry telemetry(boolean useLegacyLibraryConfig) { AwsSdkTelemetryFactory factory = new AwsSdkTelemetryFactory(useLegacyLibraryConfig); OpenTelemetry openTelemetry = GlobalOpenTelemetry.get(); - ExtendedDeclarativeConfigProperties commonConfig = + DeclarativeConfigProperties commonConfig = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "common"); - ExtendedDeclarativeConfigProperties messaging = commonConfig.get("messaging"); + DeclarativeConfigProperties messaging = commonConfig.get("messaging"); - ExtendedDeclarativeConfigProperties awsSdk = + DeclarativeConfigProperties awsSdk = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "aws_sdk"); return AwsSdkTelemetry.builder(openTelemetry) diff --git a/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java b/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java index 5fbf2d1c0376..405b29938479 100644 --- a/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java +++ b/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java @@ -9,7 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -25,7 +25,7 @@ @ExtendWith(MockitoExtension.class) class IncludeTest { - @Mock ExtendedDeclarativeConfigProperties config; + @Mock DeclarativeConfigProperties config; @ParameterizedTest @MethodSource("provideArguments") diff --git a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java index e985359902f8..2d5c13407b3a 100644 --- a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java +++ b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java @@ -17,10 +17,10 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; @@ -113,8 +113,7 @@ public void transform(TypeTransformer transformer) { } // visible for testing - static Set configureAdditionalTraceAnnotations( - ExtendedDeclarativeConfigProperties config) { + static Set configureAdditionalTraceAnnotations(DeclarativeConfigProperties config) { // First try structured declarative config (YAML list format) List list = config.getScalarList("include", String.class); if (list != null) { diff --git a/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java b/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java index ca9462c2a26c..11d58b86b458 100644 --- a/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java +++ b/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java @@ -8,8 +8,8 @@ import graphql.execution.instrumentation.Instrumentation; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.graphql.internal.InstrumentationUtil; import io.opentelemetry.instrumentation.graphql.v12_0.GraphQLTelemetry; @@ -49,7 +49,7 @@ private static final class Configuration { private final boolean addOperationNameToSpanName; Configuration(OpenTelemetry openTelemetry) { - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "graphql"); this.captureQuery = config.getBoolean("capture_query", true); diff --git a/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java b/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java index 7715b405c672..52053e4396e8 100644 --- a/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java +++ b/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java @@ -8,8 +8,8 @@ import graphql.execution.instrumentation.Instrumentation; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.graphql.internal.InstrumentationUtil; import io.opentelemetry.instrumentation.graphql.v20_0.GraphQLTelemetry; @@ -57,7 +57,7 @@ private static final class Configuration { private final boolean addOperationNameToSpanName; Configuration(OpenTelemetry openTelemetry) { - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "graphql"); this.captureQuery = config.getBoolean("capture_query", true); diff --git a/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java b/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java index 3b44b9cd0522..7909b148949a 100644 --- a/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java +++ b/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java @@ -13,8 +13,8 @@ import io.grpc.ServerBuilder; import io.grpc.ServerInterceptor; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry; import io.opentelemetry.instrumentation.grpc.v1_6.internal.ContextStorageBridge; @@ -38,7 +38,7 @@ public final class GrpcSingletons { private static final AtomicReference STORAGE_REFERENCE = new AtomicReference<>(); static { - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "grpc"); boolean emitMessageEvents = config.getBoolean("emit_message_events", true); diff --git a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java index 6fdde2db0f2c..4d3d78acd67b 100644 --- a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java +++ b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java @@ -9,8 +9,8 @@ import com.google.auto.service.AutoService; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.jmx.JmxTelemetry; import io.opentelemetry.instrumentation.jmx.JmxTelemetryBuilder; import io.opentelemetry.javaagent.extension.AgentListener; @@ -30,7 +30,7 @@ public class JmxMetricInsightInstaller implements AgentListener { @Override public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "jmx"); if (config.getBoolean("enabled", true)) { diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java index 08d3f91c4cbd..97ea0a7a36d1 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java @@ -10,9 +10,9 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; import io.opentelemetry.instrumentation.api.internal.Timer; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaConsumerContext; @@ -39,7 +39,7 @@ public class TracingConsumerInterceptor implements ConsumerInterceptor typeInstrumentations() { } private static List parse(OpenTelemetry openTelemetry) { - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "methods"); // First try structured declarative config (YAML format) List includeList = config.getStructuredList("include"); diff --git a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java index ac6ad2fd42b6..358f1c0253c4 100644 --- a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java +++ b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java @@ -7,8 +7,8 @@ import io.micrometer.core.instrument.MeterRegistry; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry; import io.opentelemetry.instrumentation.micrometer.v1_5.internal.OpenTelemetryInstrument; import java.util.Iterator; @@ -18,7 +18,7 @@ public final class MicrometerSingletons { private static final MeterRegistry METER_REGISTRY; static { - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "micrometer"); METER_REGISTRY = OpenTelemetryMeterRegistry.builder(GlobalOpenTelemetry.get()) diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.56/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_56/incubator/ExtendedOpenTelemetryTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.56/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_56/incubator/ExtendedOpenTelemetryTest.java index 4cb46eeafef2..a2087ecee5af 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.56/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_56/incubator/ExtendedOpenTelemetryTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.56/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_56/incubator/ExtendedOpenTelemetryTest.java @@ -10,7 +10,6 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,12 +29,11 @@ void setup() { @Test void getConfig() { assertThat(openTelemetry).isInstanceOf(ExtendedOpenTelemetry.class); - - DeclarativeConfigProperties instrumentationConfig = - ((ExtendedOpenTelemetry) openTelemetry).getConfigProvider().getInstrumentationConfig(); - assertThat(instrumentationConfig).isNotNull(); - - assertThat(instrumentationConfig.getStructured("java").getStructured("foo").getString("bar")) + assertThat( + ((ExtendedOpenTelemetry) openTelemetry) + .getConfigProvider() + .getInstrumentationConfig("foo") + .getString("bar")) .isEqualTo("baz"); } } diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java index 42aaebaf4f8c..0fd2f8a371d1 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java @@ -186,6 +186,8 @@ void testConsumeNonPartitionedTopicUsingBatchReceive() throws Exception { assertThat(testing.metrics()) .satisfiesExactlyInAnyOrder( + metric -> assertThat(metric).hasName("otel.sdk.span.started"), + metric -> assertThat(metric).hasName("otel.sdk.span.live"), metric -> assertThat(metric) .hasName("messaging.receive.duration") diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java index c704c4f07468..e4b5dabf64a4 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java @@ -137,6 +137,8 @@ void testConsumeNonPartitionedTopicUsingReceive() throws Exception { assertThat(testing.metrics()) .satisfiesExactlyInAnyOrder( + metric -> assertThat(metric).hasName("otel.sdk.span.started"), + metric -> assertThat(metric).hasName("otel.sdk.span.live"), metric -> assertThat(metric) .hasName("messaging.receive.duration") @@ -251,6 +253,8 @@ void testConsumeNonPartitionedTopicUsingReceiveAsync() throws Exception { assertThat(testing.metrics()) .satisfiesExactlyInAnyOrder( + metric -> assertThat(metric).hasName("otel.sdk.span.started"), + metric -> assertThat(metric).hasName("otel.sdk.span.live"), metric -> assertThat(metric) .hasName("messaging.receive.duration") @@ -352,6 +356,8 @@ void testConsumeNonPartitionedTopicUsingReceiveWithTimeout() throws Exception { assertThat(testing.metrics()) .satisfiesExactlyInAnyOrder( + metric -> assertThat(metric).hasName("otel.sdk.span.started"), + metric -> assertThat(metric).hasName("otel.sdk.span.live"), metric -> assertThat(metric) .hasName("messaging.receive.duration") diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java index ce34e2f28af5..118d67dee88a 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java @@ -8,8 +8,8 @@ import com.google.auto.service.AutoService; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.javaagent.bootstrap.InstrumentationHolder; import io.opentelemetry.javaagent.tooling.BeforeAgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; @@ -22,7 +22,7 @@ public class JarAnalyzerInstaller implements BeforeAgentListener { @Override public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { OpenTelemetry openTelemetry = GlobalOpenTelemetry.get(); - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "runtime_telemetry"); if (!config.get("package_emitter").getBoolean("enabled", false)) { return; diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java index d6c913d3018c..2e1b4800df63 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java @@ -6,8 +6,8 @@ package io.opentelemetry.instrumentation.runtimemetrics.java8.internal; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics; import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetricsBuilder; import javax.annotation.Nullable; @@ -22,7 +22,7 @@ private RuntimeMetricsConfigUtil() {} @Nullable public static RuntimeMetrics configure( RuntimeMetricsBuilder builder, OpenTelemetry openTelemetry, String instrumentationMode) { - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "runtime_telemetry"); if (!config.getBoolean("enabled", instrumentationMode.equals("default"))) { // nothing is enabled diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java index 454b5a1f85c6..f9d7f82e61e2 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java @@ -7,8 +7,8 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetry; import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetryBuilder; import io.opentelemetry.instrumentation.jdbc.datasource.internal.Experimental; @@ -59,7 +59,7 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { && !ScopedProxyUtils.isScopedTarget(beanName)) { DataSource dataSource = (DataSource) bean; OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); - ExtendedDeclarativeConfigProperties config = + DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "jdbc"); JdbcTelemetryBuilder builder = JdbcTelemetry.builder(openTelemetry) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java index 4cb9962718c9..5c94fdd98128 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java @@ -8,8 +8,8 @@ import static java.util.Collections.emptyList; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry; import org.springframework.beans.factory.ObjectProvider; @@ -37,7 +37,7 @@ public KafkaInstrumentationAutoConfiguration() {} @Bean static SpringKafkaTelemetry getTelemetry(ObjectProvider openTelemetryProvider) { OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); - ExtendedDeclarativeConfigProperties commonConfig = + DeclarativeConfigProperties commonConfig = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "common"); return SpringKafkaTelemetry.builder(openTelemetry) .setCaptureExperimentalSpanAttributes( diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/DeclarativeConfigLoggingExporterAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/DeclarativeConfigLoggingExporterAutoConfiguration.java index a5cf0ea7b72e..404c107cbd15 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/DeclarativeConfigLoggingExporterAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/DeclarativeConfigLoggingExporterAutoConfiguration.java @@ -5,9 +5,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.logging; -import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; - -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.instrumentation.logging.internal.AbstractSpanLoggingCustomizerProvider; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelEnabled; @@ -35,15 +32,8 @@ public DeclarativeConfigurationCustomizerProvider spanLoggingCustomizerProvider( static class SpanLoggingCustomizerProvider extends AbstractSpanLoggingCustomizerProvider { @Override protected boolean isEnabled(OpenTelemetryConfigurationModel model) { - DeclarativeConfigProperties instrumentation = - SdkConfigProvider.create(model).getInstrumentationConfig(); - if (instrumentation == null) { - return false; - } - - return instrumentation - .getStructured("java", empty()) - .getStructured("spring_starter", empty()) + return SdkConfigProvider.create(model) + .getInstrumentationConfig("spring_starter") .getBoolean("debug", false); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java index 998e6d14b579..bee3da707c36 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java @@ -7,11 +7,11 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import java.util.function.Function; /** @@ -45,9 +45,9 @@ private static CommonConfig getConfig(OpenTelemetry openTelemetry) { public static boolean isStatementSanitizationEnabled( OpenTelemetry openTelemetry, String instrumentationName) { - ExtendedDeclarativeConfigProperties instrumentationConfig = + DeclarativeConfigProperties instrumentationConfig = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, instrumentationName); - ExtendedDeclarativeConfigProperties commonConfig = + DeclarativeConfigProperties commonConfig = DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "common"); return instrumentationConfig .get("statement_sanitizer") diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java index 437cb6033f48..5899b9e7044c 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.spring.security.config.v6_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import io.opentelemetry.instrumentation.spring.security.config.v6_0.EnduserAttributesCapturer; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; @@ -28,7 +28,7 @@ private static EnduserAttributesCapturer createEndUserAttributesCapturerFromConf capturer.setEnduserRoleEnabled(AgentCommonConfig.get().getEnduserConfig().isRoleEnabled()); capturer.setEnduserScopeEnabled(AgentCommonConfig.get().getEnduserConfig().isScopeEnabled()); - ExtendedDeclarativeConfigProperties endUserConfig = + DeclarativeConfigProperties endUserConfig = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "spring_security") .get("enduser"); String rolePrefix = endUserConfig.get("role").getString("granted_authority_prefix"); diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java index 0f11dcb07ee0..c6cf2a930919 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java @@ -9,8 +9,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import java.util.List; /** @@ -22,7 +22,7 @@ public final class ExperimentalConfig { private static final ExperimentalConfig instance = new ExperimentalConfig(GlobalOpenTelemetry.get()); - private final ExtendedDeclarativeConfigProperties commonConfig; + private final DeclarativeConfigProperties commonConfig; private final List messagingHeaders; /** Returns the global agent configuration. */ diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 83554f955d54..9762f0ee3460 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -42,27 +42,24 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( .build(); OpenTelemetrySdk sdk = autoConfiguredSdk.getOpenTelemetrySdk(); ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredSdk); - ConfigProvider configProvider; if (configProperties != null) { // Provide a fake declarative configuration based on config properties // so that declarative configuration API can be used everywhere - configProvider = ConfigPropertiesBackedConfigProvider.create(configProperties); - sdk = new ExtendedOpenTelemetrySdkWrapper(sdk, configProvider); + sdk = + new ExtendedOpenTelemetrySdkWrapper( + sdk, ConfigPropertiesBackedConfigProvider.create(configProperties)); } else { // Provide a fake ConfigProperties until we have migrated all runtime configuration // access to use declarative configuration API - configProvider = ((ExtendedOpenTelemetry) sdk).getConfigProvider(); - configProperties = getDeclarativeConfigBridgedProperties(configProvider); + configProperties = + getDeclarativeConfigBridgedProperties(((ExtendedOpenTelemetry) sdk).getConfigProvider()); } setForceFlush(sdk); GlobalOpenTelemetry.set(sdk); return SdkAutoconfigureAccess.create( - sdk, - SdkAutoconfigureAccess.getResource(autoConfiguredSdk), - configProperties, - configProvider); + sdk, SdkAutoconfigureAccess.getResource(autoConfiguredSdk), configProperties); } // Visible for testing diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/MethodsConfigurationParser.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/MethodsConfigurationParser.java index 1a352e0abe2a..6f1a9403f303 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/MethodsConfigurationParser.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/MethodsConfigurationParser.java @@ -10,7 +10,6 @@ import static java.util.logging.Level.WARNING; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.instrumentation.api.incubator.config.internal.ExtendedDeclarativeConfigProperties; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -45,8 +44,7 @@ public final class MethodsConfigurationParser { * methods: [someMethod] * } */ - public static Map> parseExcludeMethods( - ExtendedDeclarativeConfigProperties config) { + public static Map> parseExcludeMethods(DeclarativeConfigProperties config) { // First try structured declarative config (YAML format) List excludeList = config.getStructuredList("exclude_methods"); if (excludeList != null) { diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/sdk/autoconfigure/SdkAutoconfigureAccess.java b/javaagent-tooling/src/main/java/io/opentelemetry/sdk/autoconfigure/SdkAutoconfigureAccess.java index 58271bb842c9..0063d6d4e762 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/sdk/autoconfigure/SdkAutoconfigureAccess.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/sdk/autoconfigure/SdkAutoconfigureAccess.java @@ -17,7 +17,7 @@ public static Resource getResource(AutoConfiguredOpenTelemetrySdk sdk) { } public static AutoConfiguredOpenTelemetrySdk create( - OpenTelemetrySdk sdk, Resource resource, ConfigProperties config, Object configProvider) { - return AutoConfiguredOpenTelemetrySdk.create(sdk, resource, config, configProvider); + OpenTelemetrySdk sdk, Resource resource, ConfigProperties config) { + return AutoConfiguredOpenTelemetrySdk.create(sdk, resource, config); } } diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstallerTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstallerTest.java index 505526c4273f..a234e6c13c92 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstallerTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstallerTest.java @@ -8,6 +8,7 @@ import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import io.opentelemetry.api.GlobalOpenTelemetry; @@ -93,8 +94,8 @@ private static Stream instrumentationEnabledParams() { } private static OpenTelemetry createOpenTelemetry(ConfigProperties config) { - ExtendedOpenTelemetry otel = mock(ExtendedOpenTelemetry.class); - ConfigProvider configProvider = mock(ConfigProvider.class); + ExtendedOpenTelemetry otel = spy(ExtendedOpenTelemetry.class); + ConfigProvider configProvider = spy(ConfigProvider.class); when(otel.getConfigProvider()).thenReturn(configProvider); when(configProvider.getInstrumentationConfig()) .thenReturn( diff --git a/licenses/licenses.md b/licenses/licenses.md index 52933e6ad56d..0ea477bc0b1d 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -65,95 +65,95 @@ > - **POM Project URL**: [https://github.com/square/okio/](https://github.com/square/okio/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**13** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.57.0` +**13** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**14** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-incubator` **Version:** `1.57.0-alpha` +**14** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-incubator` **Version:** `1.58.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**15** **Group:** `io.opentelemetry` **Name:** `opentelemetry-common` **Version:** `1.57.0` +**15** **Group:** `io.opentelemetry` **Name:** `opentelemetry-common` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**16** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.57.0` +**16** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**17** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.57.0` +**17** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**18** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging` **Version:** `1.57.0` +**18** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**19** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging-otlp` **Version:** `1.57.0` +**19** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging-otlp` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**20** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.57.0` +**20** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**21** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.57.0` +**21** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**22** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-prometheus` **Version:** `1.57.0-alpha` +**22** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-prometheus` **Version:** `1.58.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**23** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.57.0` +**23** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**24** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-zipkin` **Version:** `1.57.0` +**24** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-zipkin` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**25** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-kotlin` **Version:** `1.57.0` +**25** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-kotlin` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**26** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.57.0` +**26** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**27** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.57.0` +**27** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**28** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.57.0` +**28** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**29** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.57.0` +**29** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**30** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.57.0` +**30** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**31** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-incubator` **Version:** `1.57.0-alpha` +**31** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-incubator` **Version:** `1.58.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**32** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-jaeger-remote-sampler` **Version:** `1.57.0` +**32** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-jaeger-remote-sampler` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**33** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.57.0` +**33** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**34** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.57.0` +**34** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**35** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.57.0` +**35** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.58.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)