This commit is contained in:
Gregor Zeitlinger 2025-09-19 09:00:59 +02:00 committed by GitHub
commit cb2bea0f86
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 139 additions and 0 deletions

View File

@ -7,6 +7,8 @@ group = "io.opentelemetry.instrumentation"
dependencies {
api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-incubator")
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator")
compileOnly("com.google.code.findbugs:annotations")
testCompileOnly("com.google.code.findbugs:annotations")

View File

@ -0,0 +1,31 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.thread.internal;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
import io.opentelemetry.sdk.trace.SpanProcessor;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public class ThreadDetailsComponentProvider implements ComponentProvider<SpanProcessor> {
@Override
public String getName() {
return "thread_details";
}
@Override
public SpanProcessor create(DeclarativeConfigProperties config) {
return new AddThreadDetailsSpanProcessor();
}
@Override
public Class<SpanProcessor> getType() {
return SpanProcessor.class;
}
}

View File

@ -0,0 +1,48 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.thread.internal;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizer;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider;
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public class ThreadDetailsCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
@Override
public void customize(DeclarativeConfigurationCustomizer customizer) {
customizer.addModelCustomizer(
model -> {
TracerProviderModel tracerProvider = model.getTracerProvider();
if (tracerProvider != null && isEnabled(model)) {
tracerProvider
.getProcessors()
.add(new SpanProcessorModel().withAdditionalProperty("thread_details", null));
}
return model;
});
}
private static boolean isEnabled(OpenTelemetryConfigurationModel model) {
DeclarativeConfigProperties properties =
SdkConfigProvider.create(model).getInstrumentationConfig();
if (properties == null) {
return false;
}
DeclarativeConfigProperties java =
properties.getStructured("java", DeclarativeConfigProperties.empty());
return java.getStructured("thread_details", DeclarativeConfigProperties.empty())
.getBoolean("enabled", false);
}
}

View File

@ -0,0 +1 @@
io.opentelemetry.instrumentation.thread.internal.ThreadDetailsComponentProvider

View File

@ -0,0 +1 @@
io.opentelemetry.instrumentation.thread.internal.ThreadDetailsCustomizerProvider

View File

@ -0,0 +1,56 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.thread.internal;
import static java.util.Collections.singletonMap;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationBuilder;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.InstrumentationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
import org.junit.jupiter.api.Test;
class ThreadDetailsConfigurationCustomizerProviderTest {
static final String PROCESSOR = "AddThreadDetailsSpanProcessor";
@Test
void disabledByDefault() {
OpenTelemetryConfigurationModel model = modelWithTracer();
try (OpenTelemetrySdk sdk = DeclarativeConfiguration.create(model)) {
assertThat(sdk.toString()).doesNotContain(PROCESSOR);
}
}
@Test
void enabled() {
OpenTelemetryConfigurationModel model =
modelWithTracer()
.withInstrumentationDevelopment(
new InstrumentationModel()
.withJava(
new ExperimentalLanguageSpecificInstrumentationModel()
.withAdditionalProperty(
"thread_details", singletonMap("enabled", true))));
try (OpenTelemetrySdk sdk = DeclarativeConfiguration.create(model)) {
assertThat(sdk.toString()).containsOnlyOnce(PROCESSOR);
}
}
private static OpenTelemetryConfigurationModel modelWithTracer() {
return new DeclarativeConfigurationBuilder()
.customizeModel(
new OpenTelemetryConfigurationModel()
.withFileFormat("1.0-rc.1")
.withTracerProvider(new TracerProviderModel()));
}
}