Skip to content

Commit b9f09ca

Browse files
authoredOct 7, 2024
Http server builder (#11651)
1 parent d1ba858 commit b9f09ca

File tree

45 files changed

+502
-889
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+502
-889
lines changed
 

‎instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java

+29-14
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor;
3030
import java.util.ArrayList;
3131
import java.util.List;
32+
import java.util.Objects;
3233
import java.util.Set;
3334
import java.util.function.Consumer;
3435
import java.util.function.Function;
@@ -58,21 +59,43 @@ public final class DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> {
5859
private final HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter;
5960
private final HttpSpanNameExtractorBuilder<REQUEST> httpSpanNameExtractorBuilder;
6061

61-
@Nullable private TextMapSetter<REQUEST> headerSetter;
62+
@Nullable private final TextMapSetter<REQUEST> headerSetter;
6263
private Function<SpanNameExtractor<? super REQUEST>, ? extends SpanNameExtractor<? super REQUEST>>
6364
spanNameExtractorTransformer = Function.identity();
6465
private boolean emitExperimentalHttpClientMetrics = false;
6566
private Consumer<InstrumenterBuilder<REQUEST, RESPONSE>> builderCustomizer = b -> {};
6667

67-
public DefaultHttpClientInstrumenterBuilder(
68+
private DefaultHttpClientInstrumenterBuilder(
6869
String instrumentationName,
6970
OpenTelemetry openTelemetry,
70-
HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter) {
71-
this.instrumentationName = instrumentationName;
72-
this.openTelemetry = openTelemetry;
71+
HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter,
72+
TextMapSetter<REQUEST> headerSetter) {
73+
this.instrumentationName = Objects.requireNonNull(instrumentationName, "instrumentationName");
74+
this.openTelemetry = Objects.requireNonNull(openTelemetry, "openTelemetry");
75+
this.attributesGetter = Objects.requireNonNull(attributesGetter, "attributesGetter");
7376
httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(attributesGetter);
7477
httpAttributesExtractorBuilder = HttpClientAttributesExtractor.builder(attributesGetter);
75-
this.attributesGetter = attributesGetter;
78+
this.headerSetter = headerSetter;
79+
}
80+
81+
public static <REQUEST, RESPONSE> DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> create(
82+
String instrumentationName,
83+
OpenTelemetry openTelemetry,
84+
HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter) {
85+
return new DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE>(
86+
instrumentationName, openTelemetry, attributesGetter, null);
87+
}
88+
89+
public static <REQUEST, RESPONSE> DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> create(
90+
String instrumentationName,
91+
OpenTelemetry openTelemetry,
92+
HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter,
93+
TextMapSetter<REQUEST> headerSetter) {
94+
return new DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE>(
95+
instrumentationName,
96+
openTelemetry,
97+
attributesGetter,
98+
Objects.requireNonNull(headerSetter, "headerSetter"));
7699
}
77100

78101
/**
@@ -141,13 +164,6 @@ public DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> setKnownMethods(
141164
return this;
142165
}
143166

144-
@CanIgnoreReturnValue
145-
public DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> setHeaderSetter(
146-
@Nullable TextMapSetter<REQUEST> headerSetter) {
147-
this.headerSetter = headerSetter;
148-
return this;
149-
}
150-
151167
/**
152168
* Configures the instrumentation to emit experimental HTTP client metrics.
153169
*
@@ -193,7 +209,6 @@ public DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> setBuilderCustomi
193209
}
194210

195211
public Instrumenter<REQUEST, RESPONSE> build() {
196-
197212
SpanNameExtractor<? super REQUEST> spanNameExtractor =
198213
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
199214

‎instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java

+36-10
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor;
2929
import java.util.ArrayList;
3030
import java.util.List;
31+
import java.util.Objects;
3132
import java.util.Set;
3233
import java.util.function.Consumer;
3334
import java.util.function.Function;
@@ -61,20 +62,40 @@ public final class DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> {
6162
private boolean emitExperimentalHttpServerMetrics = false;
6263
private Consumer<InstrumenterBuilder<REQUEST, RESPONSE>> builderCustomizer = b -> {};
6364

64-
public DefaultHttpServerInstrumenterBuilder(
65+
private DefaultHttpServerInstrumenterBuilder(
6566
String instrumentationName,
6667
OpenTelemetry openTelemetry,
6768
HttpServerAttributesGetter<REQUEST, RESPONSE> attributesGetter,
68-
@Nullable TextMapGetter<REQUEST> headerGetter) {
69-
this.instrumentationName = instrumentationName;
70-
this.openTelemetry = openTelemetry;
69+
TextMapGetter<REQUEST> headerGetter) {
70+
this.instrumentationName = Objects.requireNonNull(instrumentationName, "instrumentationName");
71+
this.openTelemetry = Objects.requireNonNull(openTelemetry, "openTelemetry");
72+
this.attributesGetter = Objects.requireNonNull(attributesGetter, "attributesGetter");
7173
httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(attributesGetter);
7274
httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(attributesGetter);
7375
httpServerRouteBuilder = HttpServerRoute.builder(attributesGetter);
74-
this.attributesGetter = attributesGetter;
7576
this.headerGetter = headerGetter;
7677
}
7778

79+
public static <REQUEST, RESPONSE> DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> create(
80+
String instrumentationName,
81+
OpenTelemetry openTelemetry,
82+
HttpServerAttributesGetter<REQUEST, RESPONSE> attributesGetter) {
83+
return new DefaultHttpServerInstrumenterBuilder<>(
84+
instrumentationName, openTelemetry, attributesGetter, null);
85+
}
86+
87+
public static <REQUEST, RESPONSE> DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> create(
88+
String instrumentationName,
89+
OpenTelemetry openTelemetry,
90+
HttpServerAttributesGetter<REQUEST, RESPONSE> attributesGetter,
91+
TextMapGetter<REQUEST> headerGetter) {
92+
return new DefaultHttpServerInstrumenterBuilder<>(
93+
instrumentationName,
94+
openTelemetry,
95+
attributesGetter,
96+
Objects.requireNonNull(headerGetter, "headerGetter"));
97+
}
98+
7899
/**
79100
* Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented
80101
* items.
@@ -172,6 +193,15 @@ public DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> setBuilderCustomi
172193
}
173194

174195
public Instrumenter<REQUEST, RESPONSE> build() {
196+
InstrumenterBuilder<REQUEST, RESPONSE> builder = instrumenterBuilder();
197+
198+
if (headerGetter != null) {
199+
return builder.buildServerInstrumenter(headerGetter);
200+
}
201+
return builder.buildInstrumenter(SpanKindExtractor.alwaysServer());
202+
}
203+
204+
public InstrumenterBuilder<REQUEST, RESPONSE> instrumenterBuilder() {
175205
SpanNameExtractor<? super REQUEST> spanNameExtractor =
176206
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
177207

@@ -190,11 +220,7 @@ public Instrumenter<REQUEST, RESPONSE> build() {
190220
.addOperationMetrics(HttpServerExperimentalMetrics.get());
191221
}
192222
builderCustomizer.accept(builder);
193-
194-
if (headerGetter != null) {
195-
return builder.buildServerInstrumenter(headerGetter);
196-
}
197-
return builder.buildInstrumenter(SpanKindExtractor.alwaysServer());
223+
return builder;
198224
}
199225

200226
@CanIgnoreReturnValue

0 commit comments

Comments
 (0)