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 . DefaultHttpClientTelemetryBuilder ;
11+ import io .opentelemetry .instrumentation .api .incubator .builder . internal . DefaultHttpServerTelemetryBuilder ;
1212import io .opentelemetry .instrumentation .api .instrumenter .AttributesExtractor ;
13- import io .opentelemetry .instrumentation .api .instrumenter .Instrumenter ;
14- import io .opentelemetry .instrumentation .api .instrumenter .InstrumenterBuilder ;
1513import io .opentelemetry .instrumentation .api .instrumenter .SpanNameExtractor ;
1614import io .opentelemetry .instrumentation .api .semconv .http .HttpClientAttributesExtractorBuilder ;
17- import io .opentelemetry .instrumentation .api .semconv .http .HttpServerAttributesExtractor ;
1815import io .opentelemetry .instrumentation .api .semconv .http .HttpServerAttributesExtractorBuilder ;
19- import io .opentelemetry .instrumentation .api .semconv .http .HttpServerMetrics ;
20- import io .opentelemetry .instrumentation .api .semconv .http .HttpServerRoute ;
21- import io .opentelemetry .instrumentation .api .semconv .http .HttpServerRouteBuilder ;
22- import io .opentelemetry .instrumentation .api .semconv .http .HttpSpanNameExtractor ;
23- import io .opentelemetry .instrumentation .api .semconv .http .HttpSpanNameExtractorBuilder ;
24- import io .opentelemetry .instrumentation .api .semconv .http .HttpSpanStatusExtractor ;
25- import io .opentelemetry .instrumentation .spring .webflux .v5_3 .internal .ClientInstrumenterFactory ;
26- import java .util .ArrayList ;
16+ import io .opentelemetry .instrumentation .spring .webflux .v5_3 .internal .WebClientHttpAttributesGetter ;
2717import java .util .List ;
18+ import java .util .Optional ;
2819import java .util .Set ;
29- import java .util .function .Consumer ;
3020import java .util .function .Function ;
3121import org .springframework .web .reactive .function .client .ClientRequest ;
3222import org .springframework .web .reactive .function .client .ClientResponse ;
3626public final class SpringWebfluxTelemetryBuilder {
3727 private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webflux-5.3" ;
3828
39- private final OpenTelemetry openTelemetry ;
40-
41- private final List <AttributesExtractor <ClientRequest , ClientResponse >>
42- clientAdditionalExtractors = new ArrayList <>();
43- private final List <AttributesExtractor <ServerWebExchange , ServerWebExchange >>
44- serverAdditionalExtractors = new ArrayList <>();
45-
46- private final HttpServerAttributesExtractorBuilder <ServerWebExchange , ServerWebExchange >
47- httpServerAttributesExtractorBuilder =
48- HttpServerAttributesExtractor .builder (WebfluxServerHttpAttributesGetter .INSTANCE );
49- private final HttpSpanNameExtractorBuilder <ServerWebExchange > httpServerSpanNameExtractorBuilder =
50- HttpSpanNameExtractor .builder (WebfluxServerHttpAttributesGetter .INSTANCE );
51- private final HttpServerRouteBuilder <ServerWebExchange > httpServerRouteBuilder =
52- HttpServerRoute .builder (WebfluxServerHttpAttributesGetter .INSTANCE );
53-
54- private Function <
55- SpanNameExtractor <ClientRequest >, ? extends SpanNameExtractor <? super ClientRequest >>
56- clientSpanNameExtractorTransformer = Function .identity ();
57- private Function <
58- SpanNameExtractor <ServerWebExchange >,
59- ? extends SpanNameExtractor <? super ServerWebExchange >>
60- serverSpanNameExtractorTransformer = Function .identity ();
61-
62- private Consumer <HttpClientAttributesExtractorBuilder <ClientRequest , ClientResponse >>
63- clientExtractorConfigurer = builder -> {};
64- private Consumer <HttpSpanNameExtractorBuilder <ClientRequest >> clientSpanNameExtractorConfigurer =
65- builder -> {};
66- private boolean emitExperimentalHttpClientTelemetry = false ;
67- private boolean emitExperimentalHttpServerTelemetry = false ;
29+ private final DefaultHttpClientTelemetryBuilder <ClientRequest , ClientResponse > builder ;
30+ private final DefaultHttpServerTelemetryBuilder <ServerWebExchange , ServerWebExchange > serverBuilder ;
6831
6932 SpringWebfluxTelemetryBuilder (OpenTelemetry openTelemetry ) {
70- this .openTelemetry = openTelemetry ;
33+ builder = new DefaultHttpClientTelemetryBuilder <>(INSTRUMENTATION_NAME ,
34+ openTelemetry ,
35+ WebClientHttpAttributesGetter .INSTANCE ,
36+ Optional .empty ());
37+ serverBuilder = new DefaultHttpServerTelemetryBuilder <>(INSTRUMENTATION_NAME , openTelemetry ,
38+ WebfluxServerHttpAttributesGetter .INSTANCE , Optional .of (WebfluxTextMapGetter .INSTANCE ));
7139 }
7240
7341 /**
@@ -77,7 +45,7 @@ public final class SpringWebfluxTelemetryBuilder {
7745 @ CanIgnoreReturnValue
7846 public SpringWebfluxTelemetryBuilder addClientAttributesExtractor (
7947 AttributesExtractor <ClientRequest , ClientResponse > attributesExtractor ) {
80- clientAdditionalExtractors . add (attributesExtractor );
48+ builder . addAttributeExtractor (attributesExtractor );
8149 return this ;
8250 }
8351
@@ -89,9 +57,7 @@ public SpringWebfluxTelemetryBuilder addClientAttributesExtractor(
8957 @ CanIgnoreReturnValue
9058 public SpringWebfluxTelemetryBuilder setCapturedClientRequestHeaders (
9159 List <String > requestHeaders ) {
92- clientExtractorConfigurer =
93- clientExtractorConfigurer .andThen (
94- builder -> builder .setCapturedRequestHeaders (requestHeaders ));
60+ builder .setCapturedRequestHeaders (requestHeaders );
9561 return this ;
9662 }
9763
@@ -103,9 +69,7 @@ public SpringWebfluxTelemetryBuilder setCapturedClientRequestHeaders(
10369 @ CanIgnoreReturnValue
10470 public SpringWebfluxTelemetryBuilder setCapturedClientResponseHeaders (
10571 List <String > responseHeaders ) {
106- clientExtractorConfigurer =
107- clientExtractorConfigurer .andThen (
108- builder -> builder .setCapturedResponseHeaders (responseHeaders ));
72+ builder .setCapturedResponseHeaders (responseHeaders );
10973 return this ;
11074 }
11175
@@ -116,7 +80,7 @@ public SpringWebfluxTelemetryBuilder setCapturedClientResponseHeaders(
11680 @ CanIgnoreReturnValue
11781 public SpringWebfluxTelemetryBuilder addServerAttributesExtractor (
11882 AttributesExtractor <ServerWebExchange , ServerWebExchange > attributesExtractor ) {
119- serverAdditionalExtractors . add (attributesExtractor );
83+ serverBuilder . addAttributesExtractor (attributesExtractor );
12084 return this ;
12185 }
12286
@@ -129,7 +93,7 @@ public SpringWebfluxTelemetryBuilder addServerAttributesExtractor(
12993 @ CanIgnoreReturnValue
13094 public SpringWebfluxTelemetryBuilder setCapturedServerRequestHeaders (
13195 List <String > requestHeaders ) {
132- httpServerAttributesExtractorBuilder .setCapturedRequestHeaders (requestHeaders );
96+ serverBuilder .setCapturedRequestHeaders (requestHeaders );
13397 return this ;
13498 }
13599
@@ -142,7 +106,7 @@ public SpringWebfluxTelemetryBuilder setCapturedServerRequestHeaders(
142106 @ CanIgnoreReturnValue
143107 public SpringWebfluxTelemetryBuilder setCapturedServerResponseHeaders (
144108 List <String > responseHeaders ) {
145- httpServerAttributesExtractorBuilder .setCapturedResponseHeaders (responseHeaders );
109+ serverBuilder .setCapturedResponseHeaders (responseHeaders );
146110 return this ;
147111 }
148112
@@ -162,13 +126,8 @@ public SpringWebfluxTelemetryBuilder setCapturedServerResponseHeaders(
162126 */
163127 @ CanIgnoreReturnValue
164128 public SpringWebfluxTelemetryBuilder setKnownMethods (Set <String > knownMethods ) {
165- clientExtractorConfigurer =
166- clientExtractorConfigurer .andThen (builder -> builder .setKnownMethods (knownMethods ));
167- clientSpanNameExtractorConfigurer =
168- clientSpanNameExtractorConfigurer .andThen (builder -> builder .setKnownMethods (knownMethods ));
169- httpServerAttributesExtractorBuilder .setKnownMethods (knownMethods );
170- httpServerSpanNameExtractorBuilder .setKnownMethods (knownMethods );
171- httpServerRouteBuilder .setKnownMethods (knownMethods );
129+ builder .setKnownMethods (knownMethods );
130+ serverBuilder .setKnownMethods (knownMethods );
172131 return this ;
173132 }
174133
@@ -181,7 +140,7 @@ public SpringWebfluxTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
181140 @ CanIgnoreReturnValue
182141 public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpClientTelemetry (
183142 boolean emitExperimentalHttpClientTelemetry ) {
184- this . emitExperimentalHttpClientTelemetry = emitExperimentalHttpClientTelemetry ;
143+ builder . setEmitExperimentalHttpClientMetrics ( emitExperimentalHttpClientTelemetry ) ;
185144 return this ;
186145 }
187146
@@ -194,7 +153,7 @@ public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpClientTelemetry(
194153 @ CanIgnoreReturnValue
195154 public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpServerTelemetry (
196155 boolean emitExperimentalHttpServerTelemetry ) {
197- this . emitExperimentalHttpServerTelemetry = emitExperimentalHttpServerTelemetry ;
156+ serverBuilder . setEmitExperimentalHttpServerMetrics ( emitExperimentalHttpServerTelemetry ) ;
198157 return this ;
199158 }
200159
@@ -203,7 +162,7 @@ public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpServerTelemetry(
203162 public SpringWebfluxTelemetryBuilder setClientSpanNameExtractor (
204163 Function <SpanNameExtractor <ClientRequest >, ? extends SpanNameExtractor <? super ClientRequest >>
205164 clientSpanNameExtractor ) {
206- this . clientSpanNameExtractorTransformer = clientSpanNameExtractor ;
165+ builder . setSpanNameExtractor ( clientSpanNameExtractor ) ;
207166 return this ;
208167 }
209168
@@ -214,7 +173,7 @@ public SpringWebfluxTelemetryBuilder setServerSpanNameExtractor(
214173 SpanNameExtractor <ServerWebExchange >,
215174 ? extends SpanNameExtractor <? super ServerWebExchange >>
216175 serverSpanNameExtractor ) {
217- this . serverSpanNameExtractorTransformer = serverSpanNameExtractor ;
176+ serverBuilder . setSpanNameExtractor ( serverSpanNameExtractor ) ;
218177 return this ;
219178 }
220179
@@ -223,40 +182,9 @@ public SpringWebfluxTelemetryBuilder setServerSpanNameExtractor(
223182 * SpringWebfluxTelemetryBuilder}.
224183 */
225184 public SpringWebfluxTelemetry build () {
226- Instrumenter <ClientRequest , ClientResponse > clientInstrumenter =
227- ClientInstrumenterFactory .create (
228- openTelemetry ,
229- clientExtractorConfigurer ,
230- clientSpanNameExtractorConfigurer ,
231- clientSpanNameExtractorTransformer ,
232- clientAdditionalExtractors ,
233- emitExperimentalHttpClientTelemetry );
234-
235- Instrumenter <ServerWebExchange , ServerWebExchange > serverInstrumenter =
236- buildServerInstrumenter ();
237-
238185 return new SpringWebfluxTelemetry (
239- clientInstrumenter , serverInstrumenter , openTelemetry .getPropagators ());
240- }
241-
242- private Instrumenter <ServerWebExchange , ServerWebExchange > buildServerInstrumenter () {
243- WebfluxServerHttpAttributesGetter getter = WebfluxServerHttpAttributesGetter .INSTANCE ;
244- SpanNameExtractor <? super ServerWebExchange > spanNameExtractor =
245- serverSpanNameExtractorTransformer .apply (httpServerSpanNameExtractorBuilder .build ());
246-
247- InstrumenterBuilder <ServerWebExchange , ServerWebExchange > builder =
248- Instrumenter .<ServerWebExchange , ServerWebExchange >builder (
249- openTelemetry , INSTRUMENTATION_NAME , spanNameExtractor )
250- .setSpanStatusExtractor (HttpSpanStatusExtractor .create (getter ))
251- .addAttributesExtractor (httpServerAttributesExtractorBuilder .build ())
252- .addAttributesExtractors (serverAdditionalExtractors )
253- .addContextCustomizer (httpServerRouteBuilder .build ())
254- .addOperationMetrics (HttpServerMetrics .get ());
255- if (emitExperimentalHttpServerTelemetry ) {
256- builder
257- .addAttributesExtractor (HttpExperimentalAttributesExtractor .create (getter ))
258- .addOperationMetrics (HttpServerExperimentalMetrics .get ());
259- }
260- return builder .buildServerInstrumenter (WebfluxTextMapGetter .INSTANCE );
186+ builder .instrumenter (),
187+ serverBuilder .instrumenter (),
188+ builder .getOpenTelemetry ().getPropagators ());
261189 }
262190}
0 commit comments