Skip to content

Commit f960a5b

Browse files
committed
webflux
1 parent 2ec5484 commit f960a5b

File tree

3 files changed

+34
-200
lines changed

3 files changed

+34
-200
lines changed

instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,24 @@
55

66
package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client;
77

8-
import static java.util.Collections.singletonList;
9-
108
import io.opentelemetry.api.GlobalOpenTelemetry;
11-
import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientPeerServiceAttributesExtractor;
129
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
13-
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory;
1410
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientHttpAttributesGetter;
1511
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientTracingFilter;
16-
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
12+
import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpClientInstrumenterBuilder;
1713
import java.util.List;
18-
import java.util.function.Function;
14+
import java.util.Optional;
1915
import org.springframework.web.reactive.function.client.ClientRequest;
2016
import org.springframework.web.reactive.function.client.ClientResponse;
2117
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
2218

2319
public final class WebClientHelper {
2420

25-
private static final Instrumenter<ClientRequest, ClientResponse> instrumenter =
26-
ClientInstrumenterFactory.create(
27-
GlobalOpenTelemetry.get(),
28-
builder ->
29-
builder
30-
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
31-
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
32-
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
33-
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
34-
Function.identity(),
35-
singletonList(
36-
HttpClientPeerServiceAttributesExtractor.create(
37-
WebClientHttpAttributesGetter.INSTANCE,
38-
CommonConfig.get().getPeerServiceResolver())),
39-
CommonConfig.get().shouldEmitExperimentalHttpClientTelemetry());
21+
private static final Instrumenter<ClientRequest, ClientResponse> instrumenter = JavaagentHttpClientInstrumenterBuilder.create(
22+
"io.opentelemetry.spring-webflux-5.3",
23+
WebClientHttpAttributesGetter.INSTANCE,
24+
Optional.empty()
25+
);
4026

4127
public static void addFilter(List<ExchangeFilterFunction> exchangeFilterFunctions) {
4228
for (ExchangeFilterFunction filterFunction : exchangeFilterFunctions) {

instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java

Lines changed: 27 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,16 @@
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.DefaultHttpClientTelemetryBuilder;
11+
import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerTelemetryBuilder;
1212
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
13-
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
14-
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
1513
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
1614
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
17-
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor;
1815
import 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;
2717
import java.util.List;
18+
import java.util.Optional;
2819
import java.util.Set;
29-
import java.util.function.Consumer;
3020
import java.util.function.Function;
3121
import org.springframework.web.reactive.function.client.ClientRequest;
3222
import org.springframework.web.reactive.function.client.ClientResponse;
@@ -36,38 +26,16 @@
3626
public 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
}

instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java

Lines changed: 0 additions & 80 deletions
This file was deleted.

0 commit comments

Comments
 (0)