Skip to content

Commit 043bbea

Browse files
authored
Snapshot profiling span processor automatically added when callgraphs enabled (#2602)
1 parent 010b472 commit 043bbea

File tree

3 files changed

+60
-22
lines changed

3 files changed

+60
-22
lines changed

profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/SnapshotProfilingConfigurationCustomizerProvider.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PropagatorModel;
2929
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
3030
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel;
31+
import java.util.List;
3132

3233
@AutoService(DeclarativeConfigurationCustomizerProvider.class)
3334
public class SnapshotProfilingConfigurationCustomizerProvider
@@ -52,7 +53,7 @@ OpenTelemetryConfigurationModel customizeModel(OpenTelemetryConfigurationModel m
5253
initActiveSpansTracking();
5354
initStackTraceSampler(snapshotProfiling);
5455
addSnapshotVolumePropagator(model);
55-
addShutdownHookSpanProcessor(model);
56+
addSpanProcessors(model);
5657
}
5758

5859
return model;
@@ -74,6 +75,7 @@ private void addSnapshotVolumePropagator(OpenTelemetryConfigurationModel model)
7475
} else {
7576
propagators = String.join(",", propagators, volumePropagatorName);
7677
}
78+
7779
propagatorModel.withCompositeList(propagators);
7880
}
7981

@@ -82,16 +84,20 @@ private void initStackTraceSampler(
8284
StackTraceSamplerInitializer.setupStackTraceSampler(snapshotProfilingConfig);
8385
}
8486

85-
private void addShutdownHookSpanProcessor(OpenTelemetryConfigurationModel model) {
86-
if (model.getTracerProvider() == null) {
87-
model.withTracerProvider(new TracerProviderModel());
87+
private void addSpanProcessors(OpenTelemetryConfigurationModel model) {
88+
TracerProviderModel tracerProviderModel = model.getTracerProvider();
89+
if (tracerProviderModel == null) {
90+
tracerProviderModel = new TracerProviderModel();
91+
model.withTracerProvider(tracerProviderModel);
8892
}
89-
model
90-
.getTracerProvider()
91-
.getProcessors()
92-
.add(
93-
new SpanProcessorModel()
94-
.withAdditionalProperty(SdkShutdownHookComponentProvider.NAME, null));
93+
94+
List<SpanProcessorModel> processors = tracerProviderModel.getProcessors();
95+
processors.add(
96+
new SpanProcessorModel()
97+
.withAdditionalProperty(SnapshotProfilingSpanProcessorComponentProvider.NAME, null));
98+
processors.add(
99+
new SpanProcessorModel()
100+
.withAdditionalProperty(SdkShutdownHookComponentProvider.NAME, null));
95101
}
96102

97103
private void initActiveSpansTracking() {

profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/SnapshotProfilingSpanProcessorComponentProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
@AutoService(ComponentProvider.class)
2525
public class SnapshotProfilingSpanProcessorComponentProvider implements ComponentProvider {
26+
static final String NAME = "splunk_snapshot_profiling";
2627
private final TraceRegistry traceRegistry;
2728

2829
public SnapshotProfilingSpanProcessorComponentProvider() {
@@ -40,7 +41,7 @@ public Class<SpanProcessor> getType() {
4041

4142
@Override
4243
public String getName() {
43-
return "splunk_snapshot_profiling";
44+
return NAME;
4445
}
4546

4647
@Override

profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/SnapshotProfilingConfigurationCustomizerProviderTest.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@
2222

2323
import com.splunk.opentelemetry.testing.declarativeconfig.DeclarativeConfigTestUtil;
2424
import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
25+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessorModel;
2526
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
27+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleSpanProcessorModel;
28+
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel;
2629
import java.io.IOException;
2730
import java.nio.file.Path;
31+
import java.util.List;
2832
import java.util.Set;
29-
import org.assertj.core.util.Sets;
3033
import org.junit.jupiter.api.AfterEach;
3134
import org.junit.jupiter.api.Test;
3235
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -57,10 +60,11 @@ void shouldDoNothingIfProfilerIsNotEnabled(@TempDir Path tempDir) throws IOExcep
5760
// then
5861
assertThat(model).isNotNull();
5962
assertThat(model.getPropagator()).isNull();
63+
assertThat(model.getTracerProvider()).isNull();
6064
}
6165

6266
@Test
63-
void shouldAddRequiredComponents() {
67+
void shouldAddRequiredPropagator() {
6468
// given
6569
String yaml =
6670
"""
@@ -75,14 +79,6 @@ void shouldAddRequiredComponents() {
7579
OpenTelemetryConfigurationModel model = getCustomizedModel(yaml);
7680

7781
// then
78-
assertThat(model).isNotNull();
79-
assertThat(model.getTracerProvider()).isNotNull();
80-
81-
assertThat(model.getTracerProvider().getProcessors()).hasSize(1);
82-
assertThat(model.getTracerProvider().getProcessors())
83-
.extracting(processor -> processor.getAdditionalProperties().keySet())
84-
.containsOnlyOnce(Sets.set("sdk_shutdown_hook"));
85-
8682
assertThat(model.getPropagator().getCompositeList()).isEqualTo("splunk_snapshot_volume");
8783
}
8884

@@ -110,7 +106,42 @@ void shouldKeepPropagatorsDefinedInCompositeList() {
110106
}
111107

112108
@Test
113-
void shouldInitialize() {
109+
void shouldAddSpanProcessors() {
110+
// given
111+
String yaml =
112+
"""
113+
file_format: "1.0-rc.3"
114+
tracer_provider:
115+
processors:
116+
- batch:
117+
- simple:
118+
distribution:
119+
splunk:
120+
profiling:
121+
callgraphs:
122+
""";
123+
124+
// when
125+
OpenTelemetryConfigurationModel model = getCustomizedModel(yaml);
126+
127+
// then
128+
List<SpanProcessorModel> expectedProcessors =
129+
List.of(
130+
new SpanProcessorModel().withBatch(new BatchSpanProcessorModel()),
131+
new SpanProcessorModel().withSimple(new SimpleSpanProcessorModel()),
132+
new SpanProcessorModel()
133+
.withAdditionalProperty(SnapshotProfilingSpanProcessorComponentProvider.NAME, null),
134+
new SpanProcessorModel()
135+
.withAdditionalProperty(SdkShutdownHookComponentProvider.NAME, null));
136+
137+
assertThat(model).isNotNull();
138+
assertThat(model.getTracerProvider()).isNotNull();
139+
assertThat(model.getTracerProvider().getProcessors()).hasSize(4);
140+
assertThat(model.getTracerProvider().getProcessors()).containsAll(expectedProcessors);
141+
}
142+
143+
@Test
144+
void shouldInitializeActiveSpansTracking() {
114145
// given
115146
OpenTelemetryConfigurationModel model =
116147
DeclarativeConfigTestUtil.parse(

0 commit comments

Comments
 (0)