diff --git a/dynamic-control/build.gradle.kts b/dynamic-control/build.gradle.kts index e0a088b89..dcdc4e7a0 100644 --- a/dynamic-control/build.gradle.kts +++ b/dynamic-control/build.gradle.kts @@ -11,3 +11,22 @@ java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } + +dependencies { + annotationProcessor("com.google.auto.service:auto-service") + compileOnly("com.google.auto.service:auto-service-annotations") + + compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") + + testCompileOnly("com.google.auto.service:auto-service-annotations") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") + testImplementation("org.junit.jupiter:junit-jupiter-api") + testCompileOnly("org.junit.jupiter:junit-jupiter-params") + + testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") + testImplementation("org.assertj:assertj-core") + testImplementation("org.mockito:mockito-inline") + testImplementation("org.mockito:mockito-junit-jupiter") +} diff --git a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/DynamicControlAutoConfiguration.java b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/DynamicControlAutoConfiguration.java new file mode 100644 index 000000000..b3e0e6309 --- /dev/null +++ b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/DynamicControlAutoConfiguration.java @@ -0,0 +1,35 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.dynamic; + +import com.google.auto.service.AutoService; +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * AutoConfigurationCustomizerProvider for dynamic control extension. + * + *
This extension provides a skeleton for dynamic control of agent features. Currently, it only + * logs when loaded by the agent. + */ +@AutoService(AutoConfigurationCustomizerProvider.class) +public class DynamicControlAutoConfiguration implements AutoConfigurationCustomizerProvider { + + private static final Logger logger = + Logger.getLogger(DynamicControlAutoConfiguration.class.getName()); + + @Override + public void customize(AutoConfigurationCustomizer autoConfiguration) { + logger.log(Level.INFO, "Dynamic control extension has been loaded by the agent"); + } + + @Override + public int order() { + return 0; + } +} diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/DynamicControlAutoConfigurationTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/DynamicControlAutoConfigurationTest.java new file mode 100644 index 000000000..061961422 --- /dev/null +++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/DynamicControlAutoConfigurationTest.java @@ -0,0 +1,34 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.dynamic; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; +import org.junit.jupiter.api.Test; + +class DynamicControlAutoConfigurationTest { + + @Test + void testCustomize() { + DynamicControlAutoConfiguration config = new DynamicControlAutoConfiguration(); + AutoConfigurationCustomizer customizer = mock(AutoConfigurationCustomizer.class); + + config.customize(customizer); + + // The customize method should not throw and should be callable + // Logging is tested manually or via integration tests + } + + @Test + void testOrder() { + // This is a placeholder test, just to have something + DynamicControlAutoConfiguration config = new DynamicControlAutoConfiguration(); + // Default order should be 0 + assertThat(config.order()).isEqualTo(0); + } +}