From 11ebe32dcf486d8d648b155afc3be6b7cc24b22d Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Mon, 11 Sep 2023 09:49:28 +0200 Subject: [PATCH] Remove dependency to opentelemetry-sdk Closes gh-37284 --- .../OpenTelemetryAutoConfiguration.java | 13 ++++- .../OpenTelemetryProperties.java | 12 ---- .../OpenTelemetryPropertiesTests.java | 55 +++++++++++++++++++ 3 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryPropertiesTests.java diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryAutoConfiguration.java index 92bb18e374..8a21539df8 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryAutoConfiguration.java @@ -16,6 +16,8 @@ package org.springframework.boot.actuate.autoconfigure.opentelemetry; +import java.util.Map.Entry; + import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.propagation.ContextPropagators; @@ -24,6 +26,7 @@ import io.opentelemetry.sdk.OpenTelemetrySdkBuilder; import io.opentelemetry.sdk.logs.SdkLoggerProvider; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.resources.ResourceBuilder; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; @@ -71,7 +74,15 @@ public class OpenTelemetryAutoConfiguration { String applicationName = environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME); return Resource.getDefault() .merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, applicationName))) - .merge(properties.toResource()); + .merge(toResource(properties)); + } + + private static Resource toResource(OpenTelemetryProperties properties) { + ResourceBuilder builder = Resource.builder(); + for (Entry entry : properties.getResourceAttributes().entrySet()) { + builder.put(entry.getKey(), entry.getValue()); + } + return builder.build(); } } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryProperties.java index 4b2b68da0c..4c973ecf57 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryProperties.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryProperties.java @@ -18,10 +18,6 @@ package org.springframework.boot.actuate.autoconfigure.opentelemetry; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; - -import io.opentelemetry.sdk.resources.Resource; -import io.opentelemetry.sdk.resources.ResourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -47,12 +43,4 @@ public class OpenTelemetryProperties { this.resourceAttributes = resourceAttributes; } - Resource toResource() { - ResourceBuilder builder = Resource.builder(); - for (Entry entry : this.resourceAttributes.entrySet()) { - builder.put(entry.getKey(), entry.getValue()); - } - return builder.build(); - } - } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryPropertiesTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryPropertiesTests.java new file mode 100644 index 0000000000..fd754322f3 --- /dev/null +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/opentelemetry/OpenTelemetryPropertiesTests.java @@ -0,0 +1,55 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed 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 + * + * https://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 org.springframework.boot.actuate.autoconfigure.opentelemetry; + +import org.junit.jupiter.api.Test; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.boot.testsupport.classpath.ClassPathExclusions; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; + +/** + * Tests for {@link OpenTelemetryProperties}. + * + * @author Moritz Halbritter + */ +class OpenTelemetryPropertiesTests { + + private final ApplicationContextRunner runner = new ApplicationContextRunner().withPropertyValues( + "management.opentelemetry.resource-attributes.a=alpha", + "management.opentelemetry.resource-attributes.b=beta"); + + @Test + @ClassPathExclusions("opentelemetry-sdk-*") + void shouldNotDependOnOpenTelemetrySdk() { + this.runner.withUserConfiguration(TestConfiguration.class).run((context) -> { + OpenTelemetryProperties properties = context.getBean(OpenTelemetryProperties.class); + assertThat(properties.getResourceAttributes()).containsOnly(entry("a", "alpha"), entry("b", "beta")); + }); + } + + @Configuration(proxyBeanMethods = false) + @EnableConfigurationProperties(OpenTelemetryProperties.class) + private static class TestConfiguration { + + } + +}