Skip to content

Commit 7905132

Browse files
committed
add http server builder
1 parent 712dc6c commit 7905132

File tree

2 files changed

+34
-118
lines changed

2 files changed

+34
-118
lines changed

instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java

Lines changed: 17 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,12 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.OpenTelemetry;
10-
import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor;
11-
import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExperimentalMetrics;
10+
import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerTelemetryBuilder;
1211
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
13-
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
14-
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
1512
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
16-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor;
1713
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder;
18-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics;
19-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute;
20-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteBuilder;
21-
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor;
22-
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder;
23-
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor;
24-
import java.util.ArrayList;
2514
import java.util.List;
15+
import java.util.Optional;
2616
import java.util.Set;
2717
import java.util.function.Function;
2818
import javax.servlet.http.HttpServletRequest;
@@ -33,24 +23,14 @@ public final class SpringWebMvcTelemetryBuilder {
3323

3424
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webmvc-5.3";
3525

36-
private final OpenTelemetry openTelemetry;
37-
private final List<AttributesExtractor<HttpServletRequest, HttpServletResponse>>
38-
additionalExtractors = new ArrayList<>();
39-
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
40-
httpAttributesExtractorBuilder =
41-
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
42-
private final HttpSpanNameExtractorBuilder<HttpServletRequest> httpSpanNameExtractorBuilder =
43-
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
44-
private final HttpServerRouteBuilder<HttpServletRequest> httpServerRouteBuilder =
45-
HttpServerRoute.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
46-
private Function<
47-
SpanNameExtractor<HttpServletRequest>,
48-
? extends SpanNameExtractor<? super HttpServletRequest>>
49-
spanNameExtractorTransformer = Function.identity();
50-
private boolean emitExperimentalHttpServerMetrics = false;
26+
private final DefaultHttpServerTelemetryBuilder<HttpServletRequest, HttpServletResponse> serverBuilder;
5127

5228
SpringWebMvcTelemetryBuilder(OpenTelemetry openTelemetry) {
53-
this.openTelemetry = openTelemetry;
29+
serverBuilder = new DefaultHttpServerTelemetryBuilder<>(
30+
INSTRUMENTATION_NAME,
31+
openTelemetry,
32+
SpringWebMvcHttpAttributesGetter.INSTANCE,
33+
Optional.of(JavaxHttpServletRequestGetter.INSTANCE));
5434
}
5535

5636
/**
@@ -60,7 +40,7 @@ public final class SpringWebMvcTelemetryBuilder {
6040
@CanIgnoreReturnValue
6141
public SpringWebMvcTelemetryBuilder addAttributesExtractor(
6242
AttributesExtractor<HttpServletRequest, HttpServletResponse> attributesExtractor) {
63-
additionalExtractors.add(attributesExtractor);
43+
serverBuilder.addAttributesExtractor(attributesExtractor);
6444
return this;
6545
}
6646

@@ -71,7 +51,7 @@ public SpringWebMvcTelemetryBuilder addAttributesExtractor(
7151
*/
7252
@CanIgnoreReturnValue
7353
public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
74-
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
54+
serverBuilder.setCapturedRequestHeaders(requestHeaders);
7555
return this;
7656
}
7757

@@ -82,18 +62,18 @@ public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List<String> reque
8262
*/
8363
@CanIgnoreReturnValue
8464
public SpringWebMvcTelemetryBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
85-
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
65+
serverBuilder.setCapturedResponseHeaders(responseHeaders);
8666
return this;
8767
}
8868

8969
/** Sets custom {@link SpanNameExtractor} via transform function. */
9070
@CanIgnoreReturnValue
9171
public SpringWebMvcTelemetryBuilder setSpanNameExtractor(
9272
Function<
93-
SpanNameExtractor<HttpServletRequest>,
94-
? extends SpanNameExtractor<? super HttpServletRequest>>
73+
SpanNameExtractor<HttpServletRequest>,
74+
? extends SpanNameExtractor<? super HttpServletRequest>>
9575
spanNameExtractor) {
96-
this.spanNameExtractorTransformer = spanNameExtractor;
76+
serverBuilder.setSpanNameExtractor(spanNameExtractor);
9777
return this;
9878
}
9979

@@ -112,9 +92,7 @@ public SpringWebMvcTelemetryBuilder setSpanNameExtractor(
11292
*/
11393
@CanIgnoreReturnValue
11494
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
115-
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
116-
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
117-
httpServerRouteBuilder.setKnownMethods(knownMethods);
95+
serverBuilder.setKnownMethods(knownMethods);
11896
return this;
11997
}
12098

@@ -127,7 +105,7 @@ public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
127105
@CanIgnoreReturnValue
128106
public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics(
129107
boolean emitExperimentalHttpServerMetrics) {
130-
this.emitExperimentalHttpServerMetrics = emitExperimentalHttpServerMetrics;
108+
serverBuilder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics);
131109
return this;
132110
}
133111

@@ -136,26 +114,6 @@ public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics(
136114
* SpringWebMvcTelemetryBuilder}.
137115
*/
138116
public SpringWebMvcTelemetry build() {
139-
SpringWebMvcHttpAttributesGetter httpAttributesGetter =
140-
SpringWebMvcHttpAttributesGetter.INSTANCE;
141-
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor =
142-
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
143-
144-
InstrumenterBuilder<HttpServletRequest, HttpServletResponse> builder =
145-
Instrumenter.<HttpServletRequest, HttpServletResponse>builder(
146-
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
147-
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
148-
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
149-
.addAttributesExtractors(additionalExtractors)
150-
.addContextCustomizer(httpServerRouteBuilder.build())
151-
.addOperationMetrics(HttpServerMetrics.get());
152-
if (emitExperimentalHttpServerMetrics) {
153-
builder
154-
.addAttributesExtractor(HttpExperimentalAttributesExtractor.create(httpAttributesGetter))
155-
.addOperationMetrics(HttpServerExperimentalMetrics.get());
156-
}
157-
158-
return new SpringWebMvcTelemetry(
159-
builder.buildServerInstrumenter(JavaxHttpServletRequestGetter.INSTANCE));
117+
return new SpringWebMvcTelemetry(serverBuilder.instrumenter());
160118
}
161119
}

instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java

Lines changed: 17 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,50 +7,29 @@
77

88
import com.google.errorprone.annotations.CanIgnoreReturnValue;
99
import io.opentelemetry.api.OpenTelemetry;
10-
import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor;
11-
import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExperimentalMetrics;
10+
import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerTelemetryBuilder;
1211
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
13-
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
14-
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
1512
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
16-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor;
1713
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder;
18-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics;
19-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute;
20-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteBuilder;
21-
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor;
22-
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder;
23-
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor;
2414
import jakarta.servlet.http.HttpServletRequest;
2515
import jakarta.servlet.http.HttpServletResponse;
26-
import java.util.ArrayList;
2716
import java.util.List;
17+
import java.util.Optional;
2818
import java.util.Set;
2919
import java.util.function.Function;
3020

3121
/** A builder of {@link SpringWebMvcTelemetry}. */
3222
public final class SpringWebMvcTelemetryBuilder {
3323

3424
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webmvc-6.0";
35-
36-
private final OpenTelemetry openTelemetry;
37-
private final List<AttributesExtractor<HttpServletRequest, HttpServletResponse>>
38-
additionalExtractors = new ArrayList<>();
39-
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
40-
httpAttributesExtractorBuilder =
41-
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
42-
private final HttpSpanNameExtractorBuilder<HttpServletRequest> httpSpanNameExtractorBuilder =
43-
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
44-
private final HttpServerRouteBuilder<HttpServletRequest> httpServerRouteBuilder =
45-
HttpServerRoute.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
46-
private Function<
47-
SpanNameExtractor<HttpServletRequest>,
48-
? extends SpanNameExtractor<? super HttpServletRequest>>
49-
spanNameExtractorTransformer = Function.identity();
50-
private boolean emitExperimentalHttpServerMetrics = false;
25+
private final DefaultHttpServerTelemetryBuilder<HttpServletRequest, HttpServletResponse> serverBuilder;
5126

5227
SpringWebMvcTelemetryBuilder(OpenTelemetry openTelemetry) {
53-
this.openTelemetry = openTelemetry;
28+
serverBuilder = new DefaultHttpServerTelemetryBuilder<>(
29+
INSTRUMENTATION_NAME,
30+
openTelemetry,
31+
SpringWebMvcHttpAttributesGetter.INSTANCE,
32+
Optional.of(JakartaHttpServletRequestGetter.INSTANCE));
5433
}
5534

5635
/**
@@ -60,7 +39,7 @@ public final class SpringWebMvcTelemetryBuilder {
6039
@CanIgnoreReturnValue
6140
public SpringWebMvcTelemetryBuilder addAttributesExtractor(
6241
AttributesExtractor<HttpServletRequest, HttpServletResponse> attributesExtractor) {
63-
additionalExtractors.add(attributesExtractor);
42+
serverBuilder.addAttributesExtractor(attributesExtractor);
6443
return this;
6544
}
6645

@@ -71,7 +50,7 @@ public SpringWebMvcTelemetryBuilder addAttributesExtractor(
7150
*/
7251
@CanIgnoreReturnValue
7352
public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
74-
httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
53+
serverBuilder.setCapturedRequestHeaders(requestHeaders);
7554
return this;
7655
}
7756

@@ -82,18 +61,18 @@ public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List<String> reque
8261
*/
8362
@CanIgnoreReturnValue
8463
public SpringWebMvcTelemetryBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
85-
httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
64+
serverBuilder.setCapturedResponseHeaders(responseHeaders);
8665
return this;
8766
}
8867

8968
/** Sets custom {@link SpanNameExtractor} via transform function. */
9069
@CanIgnoreReturnValue
9170
public SpringWebMvcTelemetryBuilder setSpanNameExtractor(
9271
Function<
93-
SpanNameExtractor<HttpServletRequest>,
94-
? extends SpanNameExtractor<? super HttpServletRequest>>
72+
SpanNameExtractor<HttpServletRequest>,
73+
? extends SpanNameExtractor<? super HttpServletRequest>>
9574
spanNameExtractor) {
96-
this.spanNameExtractorTransformer = spanNameExtractor;
75+
serverBuilder.setSpanNameExtractor(spanNameExtractor);
9776
return this;
9877
}
9978

@@ -112,9 +91,7 @@ public SpringWebMvcTelemetryBuilder setSpanNameExtractor(
11291
*/
11392
@CanIgnoreReturnValue
11493
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
115-
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
116-
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
117-
httpServerRouteBuilder.setKnownMethods(knownMethods);
94+
serverBuilder.setKnownMethods(knownMethods);
11895
return this;
11996
}
12097

@@ -127,7 +104,7 @@ public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
127104
@CanIgnoreReturnValue
128105
public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics(
129106
boolean emitExperimentalHttpServerMetrics) {
130-
this.emitExperimentalHttpServerMetrics = emitExperimentalHttpServerMetrics;
107+
serverBuilder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics);
131108
return this;
132109
}
133110

@@ -136,26 +113,7 @@ public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics(
136113
* SpringWebMvcTelemetryBuilder}.
137114
*/
138115
public SpringWebMvcTelemetry build() {
139-
SpringWebMvcHttpAttributesGetter httpAttributesGetter =
140-
SpringWebMvcHttpAttributesGetter.INSTANCE;
141-
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor =
142-
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
143-
144-
InstrumenterBuilder<HttpServletRequest, HttpServletResponse> builder =
145-
Instrumenter.<HttpServletRequest, HttpServletResponse>builder(
146-
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
147-
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
148-
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
149-
.addAttributesExtractors(additionalExtractors)
150-
.addContextCustomizer(httpServerRouteBuilder.build())
151-
.addOperationMetrics(HttpServerMetrics.get());
152-
if (emitExperimentalHttpServerMetrics) {
153-
builder
154-
.addAttributesExtractor(HttpExperimentalAttributesExtractor.create(httpAttributesGetter))
155-
.addOperationMetrics(HttpServerExperimentalMetrics.get());
156-
}
157-
158116
return new SpringWebMvcTelemetry(
159-
builder.buildServerInstrumenter(JakartaHttpServletRequestGetter.INSTANCE));
117+
serverBuilder.instrumenter());
160118
}
161119
}

0 commit comments

Comments
 (0)