77
88import com .google .errorprone .annotations .CanIgnoreReturnValue ;
99import 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 ;
1211import io .opentelemetry .instrumentation .api .instrumenter .AttributesExtractor ;
13- import io .opentelemetry .instrumentation .api .instrumenter .Instrumenter ;
14- import io .opentelemetry .instrumentation .api .instrumenter .InstrumenterBuilder ;
1512import io .opentelemetry .instrumentation .api .instrumenter .SpanNameExtractor ;
16- import io .opentelemetry .instrumentation .api .semconv .http .HttpServerAttributesExtractor ;
1713import 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 ;
2414import jakarta .servlet .http .HttpServletRequest ;
2515import jakarta .servlet .http .HttpServletResponse ;
26- import java .util .ArrayList ;
2716import java .util .List ;
17+ import java .util .Optional ;
2818import java .util .Set ;
2919import java .util .function .Function ;
3020
3121/** A builder of {@link SpringWebMvcTelemetry}. */
3222public 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