Skip to content

Commit ccedaff

Browse files
committed
add thread details resource processor
1 parent 94a8ffa commit ccedaff

File tree

6 files changed

+114
-0
lines changed

6 files changed

+114
-0
lines changed

sdk-autoconfigure-support/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ group = "io.opentelemetry.instrumentation"
77

88
dependencies {
99
api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
10+
api("io.opentelemetry:opentelemetry-sdk-extension-incubator")
1011

1112
compileOnly("com.google.code.findbugs:annotations")
1213
testCompileOnly("com.google.code.findbugs:annotations")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.thread.internal;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
10+
import io.opentelemetry.sdk.trace.SpanProcessor;
11+
12+
/**
13+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
14+
* any time.
15+
*/
16+
public class ThreadDetailsComponentProvider implements ComponentProvider<SpanProcessor> {
17+
@Override
18+
public String getName() {
19+
return "thread_details";
20+
}
21+
22+
@Override
23+
public SpanProcessor create(DeclarativeConfigProperties config) {
24+
return new AddThreadDetailsSpanProcessor();
25+
}
26+
27+
@Override
28+
public Class<SpanProcessor> getType() {
29+
return SpanProcessor.class;
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.thread.internal;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizer;
10+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider;
12+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
13+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
15+
16+
/**
17+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
18+
* any time.
19+
*/
20+
public class ThreadDetailsCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
21+
@Override
22+
public void customize(DeclarativeConfigurationCustomizer customizer) {
23+
customizer.addModelCustomizer(
24+
model -> {
25+
TracerProviderModel tracerProvider = model.getTracerProvider();
26+
if (tracerProvider != null && isEnabled(model)) {
27+
tracerProvider
28+
.getProcessors()
29+
.add(new SpanProcessorModel().withAdditionalProperty("thread_details", null));
30+
}
31+
32+
return model;
33+
});
34+
}
35+
36+
private static boolean isEnabled(OpenTelemetryConfigurationModel model) {
37+
DeclarativeConfigProperties properties =
38+
SdkConfigProvider.create(model).getInstrumentationConfig();
39+
if (properties == null) {
40+
return false;
41+
}
42+
DeclarativeConfigProperties java =
43+
properties.getStructured("java", DeclarativeConfigProperties.empty());
44+
45+
return java.getStructured("thread_details", DeclarativeConfigProperties.empty())
46+
.getBoolean("enabled", false);
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.opentelemetry.instrumentation.thread.internal.ThreadDetailsComponentProvider
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.opentelemetry.instrumentation.thread.internal.ThreadDetailsCustomizerProvider
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.thread.internal;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.sdk.OpenTelemetrySdk;
11+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
12+
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationBuilder;
13+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
14+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
15+
import org.junit.jupiter.api.Test;
16+
17+
class ThreadDetailsConfigurationCustomizerProviderTest {
18+
19+
@Test
20+
void addSpanProcessor() {
21+
OpenTelemetryConfigurationModel model =
22+
new DeclarativeConfigurationBuilder()
23+
.customizeModel(
24+
new OpenTelemetryConfigurationModel()
25+
.withFileFormat("1.0-rc.1")
26+
.withTracerProvider(new TracerProviderModel()));
27+
28+
try (OpenTelemetrySdk sdk = DeclarativeConfiguration.create(model)) {
29+
assertThat(sdk.toString()).containsOnlyOnce("AddThreadDetailsSpanProcessor");
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)