Skip to content

Commit c5a8cdb

Browse files
authored
Merge branch 'main' into renovate/errorproneversion
2 parents 82c0acf + 5972f4d commit c5a8cdb

File tree

26 files changed

+423
-63
lines changed

26 files changed

+423
-63
lines changed

benchmark-overhead/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ repositories {
1818
dependencies {
1919
implementation(enforcedPlatform("org.junit:junit-bom:5.14.1"))
2020

21-
testImplementation(platform("org.testcontainers:testcontainers-bom:2.0.1"))
22-
testImplementation("org.testcontainers:testcontainers:2.0.1")
21+
testImplementation(platform("org.testcontainers:testcontainers-bom:2.0.2"))
22+
testImplementation("org.testcontainers:testcontainers:2.0.2")
2323
testImplementation("org.testcontainers:testcontainers-postgresql")
2424
testImplementation("org.junit.jupiter:junit-jupiter-api")
2525
testImplementation("org.junit.jupiter:junit-jupiter-params")

dependencyManagement/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ val DEPENDENCY_BOMS = listOf(
3232
"org.apache.groovy:groovy-bom:${groovyVersion}",
3333
"io.opentelemetry:opentelemetry-bom:${otelSdkVersion}",
3434
"io.opentelemetry:opentelemetry-bom-alpha:${otelSdkAlphaVersion}",
35-
"org.testcontainers:testcontainers-bom:2.0.1"
35+
"org.testcontainers:testcontainers-bom:2.0.2"
3636
)
3737

3838
val autoServiceVersion = "1.1.1"

examples/distro/smoke-tests/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ plugins {
33
}
44

55
dependencies {
6-
testImplementation("org.testcontainers:testcontainers:2.0.1")
6+
testImplementation("org.testcontainers:testcontainers:2.0.2")
77
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.20.1")
8-
testImplementation("com.google.protobuf:protobuf-java-util:4.33.0")
8+
testImplementation("com.google.protobuf:protobuf-java-util:4.33.1")
99
testImplementation("com.squareup.okhttp3:okhttp:5.3.0")
1010
testImplementation("io.opentelemetry.proto:opentelemetry-proto:1.8.0-alpha")
1111
testImplementation("io.opentelemetry:opentelemetry-api")

examples/extension/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ dependencies {
9898
implementation 'org.apache.commons:commons-lang3:3.19.0'
9999

100100
//All dependencies below are only for tests
101-
testImplementation("org.testcontainers:testcontainers:2.0.1")
101+
testImplementation("org.testcontainers:testcontainers:2.0.2")
102102
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.20.1")
103-
testImplementation("com.google.protobuf:protobuf-java-util:4.33.0")
103+
testImplementation("com.google.protobuf:protobuf-java-util:4.33.1")
104104
testImplementation("com.squareup.okhttp3:okhttp:5.3.0")
105105
testImplementation("io.opentelemetry:opentelemetry-api")
106106
testImplementation("io.opentelemetry.proto:opentelemetry-proto:1.8.0-alpha")

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/instrumenter/InstrumenterCustomizer.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1212
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
1313
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
14+
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
1415
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
1516
import java.util.function.Function;
1617
import java.util.function.UnaryOperator;
@@ -106,6 +107,16 @@ default InstrumenterCustomizer setSpanNameExtractor(
106107
InstrumenterCustomizer setSpanNameExtractor(
107108
UnaryOperator<SpanNameExtractor<?>> spanNameExtractor);
108109

110+
/**
111+
* Sets a transformer function that will modify the {@link SpanStatusExtractor}. This allows
112+
* customizing how span statuses are generated for the instrumented operations.
113+
*
114+
* @param spanStatusExtractor function that transforms the original span status extractor
115+
* @return this InstrumenterCustomizer for method chaining
116+
*/
117+
InstrumenterCustomizer setSpanStatusExtractor(
118+
UnaryOperator<SpanStatusExtractor<?, ?>> spanStatusExtractor);
119+
109120
/** Types of instrumentation. */
110121
enum InstrumentationType {
111122
HTTP_CLIENT,

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/instrumenter/internal/InstrumenterCustomizerImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
1111
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
1212
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
13+
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
1314
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizer;
1415
import io.opentelemetry.instrumentation.api.internal.SpanKey;
1516
import java.util.HashMap;
@@ -87,4 +88,11 @@ public InstrumenterCustomizer setSpanNameExtractor(
8788
customizer.setSpanNameExtractor(spanNameExtractor);
8889
return this;
8990
}
91+
92+
@Override
93+
public InstrumenterCustomizer setSpanStatusExtractor(
94+
UnaryOperator<SpanStatusExtractor<?, ?>> spanStatusExtractor) {
95+
customizer.setSpanStatusExtractor(spanStatusExtractor);
96+
return this;
97+
}
9098
}

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,14 @@ public void setSpanNameExtractor(
442442
builder.spanNameExtractor =
443443
spanNameExtractorTransformer.apply(builder.spanNameExtractor);
444444
}
445+
446+
@Override
447+
public void setSpanStatusExtractor(
448+
UnaryOperator<SpanStatusExtractor<? super REQUEST, ? super RESPONSE>>
449+
spanStatusExtractorTransformer) {
450+
builder.spanStatusExtractor =
451+
spanStatusExtractorTransformer.apply(builder.spanStatusExtractor);
452+
}
445453
});
446454
}
447455
}

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/InternalInstrumenterCustomizer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
1010
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
1111
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
12+
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
1213
import java.util.function.UnaryOperator;
1314

1415
/**
@@ -32,4 +33,8 @@ void addAttributesExtractors(
3233

3334
void setSpanNameExtractor(
3435
UnaryOperator<SpanNameExtractor<? super REQUEST>> spanNameExtractorTransformer);
36+
37+
void setSpanStatusExtractor(
38+
UnaryOperator<SpanStatusExtractor<? super REQUEST, ? super RESPONSE>>
39+
spanStatusExtractorTransformer);
3540
}

instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/InstrumentationCustomizerTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.opentelemetry.api.trace.SpanContext;
2222
import io.opentelemetry.api.trace.SpanId;
2323
import io.opentelemetry.api.trace.SpanKind;
24+
import io.opentelemetry.api.trace.StatusCode;
2425
import io.opentelemetry.context.Context;
2526
import io.opentelemetry.instrumentation.api.incubator.instrumenter.InstrumenterCustomizer.InstrumentationType;
2627
import io.opentelemetry.instrumentation.api.incubator.instrumenter.InstrumenterCustomizerProvider;
@@ -359,6 +360,50 @@ void testSetSpanNameExtractor() {
359360
.hasAttributes(Attributes.empty())));
360361
}
361362

363+
@Test
364+
void testSetSpanStatusExtractor() {
365+
AtomicBoolean customizerCalled = new AtomicBoolean();
366+
setCustomizer(
367+
customizer -> {
368+
customizerCalled.set(true);
369+
customizer.setSpanStatusExtractor(
370+
unused ->
371+
(spanStatusBuilder, request, response, error) ->
372+
spanStatusBuilder.setStatus(StatusCode.OK));
373+
});
374+
375+
Instrumenter<Map<String, String>, Map<String, String>> instrumenter =
376+
Instrumenter.<Map<String, String>, Map<String, String>>builder(
377+
otelTesting.getOpenTelemetry(), "test", unused -> "span")
378+
.setSpanStatusExtractor(
379+
(spanStatusBuilder, request, response, error) ->
380+
spanStatusBuilder.setStatus(StatusCode.ERROR))
381+
.buildInstrumenter();
382+
383+
assertThat(customizerCalled).isTrue();
384+
385+
Context context = instrumenter.start(Context.root(), REQUEST);
386+
SpanContext spanContext = Span.fromContext(context).getSpanContext();
387+
assertThat(spanContext.isValid()).isTrue();
388+
389+
instrumenter.end(context, REQUEST, RESPONSE, null);
390+
391+
otelTesting
392+
.assertTraces()
393+
.hasTracesSatisfyingExactly(
394+
trace ->
395+
trace.hasSpansSatisfyingExactly(
396+
span ->
397+
span.hasName("span")
398+
.hasKind(SpanKind.INTERNAL)
399+
.hasInstrumentationScopeInfo(InstrumentationScopeInfo.create("test"))
400+
.hasTraceId(spanContext.getTraceId())
401+
.hasSpanId(spanContext.getSpanId())
402+
.hasParentSpanId(SpanId.getInvalid())
403+
.hasStatus(StatusData.ok())
404+
.hasAttributes(Attributes.empty())));
405+
}
406+
362407
static class AttributesExtractor1
363408
implements AttributesExtractor<Map<String, String>, Map<String, String>> {
364409

instrumentation/dropwizard/dropwizard-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizard/DropwizardTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions;
3232
import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint;
3333
import io.opentelemetry.sdk.testing.assertj.SpanDataAssert;
34-
import io.opentelemetry.sdk.trace.data.SpanData;
3534
import io.opentelemetry.sdk.trace.data.StatusData;
3635
import java.net.URI;
3736
import java.net.URISyntaxException;
@@ -129,10 +128,9 @@ private static String getEndpointName(ServerEndpoint endpoint) {
129128

130129
@Override
131130
protected SpanDataAssert assertResponseSpan(
132-
SpanDataAssert span, SpanData parentSpan, String method, ServerEndpoint endpoint) {
133-
span.satisfies(spanData -> assertThat(spanData.getName()).endsWith(".sendError"))
131+
SpanDataAssert span, String method, ServerEndpoint endpoint) {
132+
return span.satisfies(spanData -> assertThat(spanData.getName()).endsWith(".sendError"))
134133
.hasKind(INTERNAL);
135-
return span;
136134
}
137135

138136
public static class TestApp extends Application<Configuration> {

0 commit comments

Comments
 (0)