From b3d0926293925f0691ce76705508f9698265d8b5 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sun, 8 Dec 2024 12:46:52 -0800 Subject: [PATCH 01/13] Split ratpack into client and server --- .../ratpack/v1_7/RatpackClientTelemetry.java | 62 ++++++++++ .../v1_7/RatpackClientTelemetryBuilder.java | 105 +++++++++++++++++ .../ratpack/v1_7/RatpackServerTelemetry.java | 80 +++++++++++++ .../v1_7/RatpackServerTelemetryBuilder.java | 107 ++++++++++++++++++ .../ratpack/v1_7/RatpackTelemetry.java | 50 +++++++- .../ratpack/v1_7/RatpackTelemetryBuilder.java | 57 +++++++++- .../ratpack/v1_7/internal/Experimental.java | 86 ++++++++++++++ .../client/InstrumentedHttpClientTest.groovy | 39 ++++--- .../server/RatpackAsyncHttpServerTest.groovy | 10 +- .../server/RatpackForkedHttpServerTest.groovy | 10 +- .../v1_7/server/RatpackHttpServerTest.groovy | 10 +- .../v1_7/server/RatpackRoutesTest.groovy | 6 +- .../RatpackServerApplicationTest.groovy | 37 +++--- .../v1_7/server/RatpackServerTest.groovy | 10 +- .../ratpack/v1_7/RatpackHttpClientTest.java | 12 +- 15 files changed, 609 insertions(+), 72 deletions(-) create mode 100644 instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java create mode 100644 instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java create mode 100644 instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java create mode 100644 instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java create mode 100644 instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java new file mode 100644 index 000000000000..e8300fdd4cd7 --- /dev/null +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java @@ -0,0 +1,62 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.ratpack.v1_7; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryExecInitializer; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryHttpClient; +import ratpack.http.client.HttpClient; +import ratpack.http.client.HttpResponse; +import ratpack.http.client.RequestSpec; +import ratpack.registry.RegistrySpec; + +/** + * Entrypoint for instrumenting Ratpack http client. + * + *

To apply OpenTelemetry instrumentation to a http client, wrap the {@link HttpClient} using + * {@link #instrument(HttpClient)}. + * + *

{@code
+ * RatpackClientTelemetry telemetry = RatpackClientTelemetry.create(OpenTelemetrySdk.builder()
+ *   ...
+ *   .build());
+ * HttpClient instrumentedHttpClient = telemetry.instrument(httpClient);
+ * }
+ */ +public final class RatpackClientTelemetry { + + /** + * Returns a new {@link RatpackClientTelemetry} configured with the given {@link OpenTelemetry}. + */ + public static RatpackClientTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + /** + * Returns a new {@link RatpackClientTelemetryBuilder} configured with the given {@link + * OpenTelemetry}. + */ + public static RatpackClientTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new RatpackClientTelemetryBuilder(openTelemetry); + } + + private final OpenTelemetryHttpClient httpClientInstrumenter; + + RatpackClientTelemetry(Instrumenter clientInstrumenter) { + httpClientInstrumenter = new OpenTelemetryHttpClient(clientInstrumenter); + } + + /** Returns instrumented instance of {@link HttpClient} with OpenTelemetry. */ + public HttpClient instrument(HttpClient httpClient) throws Exception { + return httpClientInstrumenter.instrument(httpClient); + } + + /** Configures the {@link RegistrySpec} with OpenTelemetry. */ + public void configureRegistry(RegistrySpec registry) { + registry.add(OpenTelemetryExecInitializer.INSTANCE); + } +} diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java new file mode 100644 index 000000000000..a292a388f6cd --- /dev/null +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java @@ -0,0 +1,105 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.ratpack.v1_7; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.Experimental; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.RatpackClientInstrumenterBuilderFactory; +import java.util.List; +import java.util.Set; +import java.util.function.Function; +import ratpack.http.client.HttpResponse; +import ratpack.http.client.RequestSpec; + +/** A builder for {@link RatpackClientTelemetry}. */ +public final class RatpackClientTelemetryBuilder { + + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.ratpack-1.7"; + + private final DefaultHttpClientInstrumenterBuilder clientBuilder; + + RatpackClientTelemetryBuilder(OpenTelemetry openTelemetry) { + clientBuilder = + RatpackClientInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); + } + + @CanIgnoreReturnValue + public RatpackClientTelemetryBuilder addAttributeExtractor( + AttributesExtractor attributesExtractor) { + clientBuilder.addAttributeExtractor(attributesExtractor); + return this; + } + + /** + * Configures the HTTP client request headers that will be captured as span attributes. + * + * @param requestHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public RatpackClientTelemetryBuilder setCapturedRequestHeaders(List requestHeaders) { + clientBuilder.setCapturedRequestHeaders(requestHeaders); + return this; + } + + /** + * Configures the HTTP client response headers that will be captured as span attributes. + * + * @param responseHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public RatpackClientTelemetryBuilder setCapturedResponseHeaders(List responseHeaders) { + clientBuilder.setCapturedResponseHeaders(responseHeaders); + return this; + } + + /** + * Configures the instrumentation to recognize an alternative set of HTTP request methods. + * + *

By default, this instrumentation defines "known" methods as the ones listed in RFC9110 and the PATCH + * method defined in RFC5789. + * + *

Note: calling this method overrides the default known method sets completely; it does + * not supplement it. + * + * @param knownMethods A set of recognized HTTP request methods. + * @see HttpClientAttributesExtractorBuilder#setKnownMethods(Set) + */ + @CanIgnoreReturnValue + public RatpackClientTelemetryBuilder setKnownMethods(Set knownMethods) { + clientBuilder.setKnownMethods(knownMethods); + return this; + } + + /** Sets custom client {@link SpanNameExtractor} via transform function. */ + @CanIgnoreReturnValue + public RatpackClientTelemetryBuilder setSpanNameExtractor( + Function< + SpanNameExtractor, + ? extends SpanNameExtractor> + clientSpanNameExtractor) { + clientBuilder.setSpanNameExtractor(clientSpanNameExtractor); + return this; + } + + /** + * Can be used via the unstable method {@link + * Experimental#setEmitExperimentalTelemetry(RatpackClientTelemetryBuilder, boolean)}. + */ + void setEmitExperimentalHttpClientMetrics(boolean emitExperimentalHttpClientMetrics) { + clientBuilder.setEmitExperimentalHttpClientMetrics(emitExperimentalHttpClientMetrics); + } + + /** Returns a new {@link RatpackClientTelemetry} with the configuration of this builder. */ + public RatpackClientTelemetry build() { + return new RatpackClientTelemetry(clientBuilder.build()); + } +} diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java new file mode 100644 index 000000000000..988d3b140c4e --- /dev/null +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java @@ -0,0 +1,80 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.ratpack.v1_7; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryExecInitializer; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryExecInterceptor; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryServerHandler; +import ratpack.exec.ExecInitializer; +import ratpack.exec.ExecInterceptor; +import ratpack.handling.Handler; +import ratpack.handling.HandlerDecorator; +import ratpack.http.Request; +import ratpack.http.Response; +import ratpack.registry.RegistrySpec; + +/** + * Entrypoint for instrumenting Ratpack server. + * + *

To apply OpenTelemetry instrumentation to a server, configure the {@link RegistrySpec} using + * {@link #configureRegistry(RegistrySpec)}. + * + *

{@code
+ * RatpackServerTelemetry telemetry = RatpackServerTelemetry.create(OpenTelemetrySdk.builder()
+ *   ...
+ *   .build());
+ * RatpackServer.start(server -> {
+ *   server.registryOf(telemetry::configureRegistry);
+ *   server.handlers(chain -> ...);
+ * });
+ * }
+ */ +public final class RatpackServerTelemetry { + + /** + * Returns a new {@link RatpackServerTelemetry} configured with the given {@link OpenTelemetry}. + */ + public static RatpackServerTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + /** + * Returns a new {@link RatpackServerTelemetryBuilder} configured with the given {@link + * OpenTelemetry}. + */ + public static RatpackServerTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new RatpackServerTelemetryBuilder(openTelemetry); + } + + private final OpenTelemetryServerHandler serverHandler; + + RatpackServerTelemetry(Instrumenter serverInstrumenter) { + serverHandler = new OpenTelemetryServerHandler(serverInstrumenter); + } + + /** Returns a {@link Handler} to support Ratpack Registry binding. */ + public Handler getHandler() { + return serverHandler; + } + + /** Returns instance of {@link ExecInterceptor} to support Ratpack Registry binding. */ + public ExecInterceptor getExecInterceptor() { + return OpenTelemetryExecInterceptor.INSTANCE; + } + + /** Returns instance of {@link ExecInitializer} to support Ratpack Registry binding. */ + public ExecInitializer getExecInitializer() { + return OpenTelemetryExecInitializer.INSTANCE; + } + + /** Configures the {@link RegistrySpec} with OpenTelemetry. */ + public void configureRegistry(RegistrySpec registry) { + registry.add(HandlerDecorator.prepend(serverHandler)); + registry.add(OpenTelemetryExecInterceptor.INSTANCE); + } +} diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java new file mode 100644 index 000000000000..536d4ff06ab2 --- /dev/null +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java @@ -0,0 +1,107 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.ratpack.v1_7; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.Experimental; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.RatpackServerInstrumenterBuilderFactory; +import java.util.List; +import java.util.Set; +import java.util.function.Function; +import ratpack.http.Request; +import ratpack.http.Response; + +/** A builder for {@link RatpackServerTelemetry}. */ +public final class RatpackServerTelemetryBuilder { + + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.ratpack-1.7"; + + private final DefaultHttpServerInstrumenterBuilder serverBuilder; + + RatpackServerTelemetryBuilder(OpenTelemetry openTelemetry) { + serverBuilder = + RatpackServerInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); + } + + /** + * Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented + * items. The {@link AttributesExtractor} will be executed after all default extractors. + */ + @CanIgnoreReturnValue + public RatpackServerTelemetryBuilder addAttributeExtractor( + AttributesExtractor attributesExtractor) { + serverBuilder.addAttributesExtractor(attributesExtractor); + return this; + } + + /** + * Configures the HTTP server request headers that will be captured as span attributes. + * + * @param requestHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public RatpackServerTelemetryBuilder setCapturedRequestHeaders(List requestHeaders) { + serverBuilder.setCapturedRequestHeaders(requestHeaders); + return this; + } + + /** + * Configures the HTTP server response headers that will be captured as span attributes. + * + * @param responseHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public RatpackServerTelemetryBuilder setCapturedResponseHeaders(List responseHeaders) { + serverBuilder.setCapturedResponseHeaders(responseHeaders); + return this; + } + + /** + * Configures the instrumentation to recognize an alternative set of HTTP request methods. + * + *

By default, this instrumentation defines "known" methods as the ones listed in RFC9110 and the PATCH + * method defined in RFC5789. + * + *

Note: calling this method overrides the default known method sets completely; it does + * not supplement it. + * + * @param knownMethods A set of recognized HTTP request methods. + * @see HttpServerAttributesExtractorBuilder#setKnownMethods(Set) + */ + @CanIgnoreReturnValue + public RatpackServerTelemetryBuilder setKnownMethods(Set knownMethods) { + serverBuilder.setKnownMethods(knownMethods); + return this; + } + + /** Sets custom server {@link SpanNameExtractor} via transform function. */ + @CanIgnoreReturnValue + public RatpackServerTelemetryBuilder setSpanNameExtractor( + Function, ? extends SpanNameExtractor> + serverSpanNameExtractor) { + serverBuilder.setSpanNameExtractor(serverSpanNameExtractor); + return this; + } + + /** + * Can be used via the unstable method {@link + * Experimental#setEmitExperimentalTelemetry(RatpackServerTelemetryBuilder, boolean)}. + */ + void setEmitExperimentalHttpServerMetrics(boolean emitExperimentalHttpServerMetrics) { + serverBuilder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics); + } + + /** Returns a new {@link RatpackServerTelemetry} with the configuration of this builder. */ + public RatpackServerTelemetry build() { + return new RatpackServerTelemetry(serverBuilder.build()); + } +} diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetry.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetry.java index 95ea733c4fe7..f3ff0a4d82c0 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetry.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetry.java @@ -46,17 +46,30 @@ * .build()); * HttpClient instrumentedHttpClient = telemetry.instrumentHttpClient(httpClient); * } + * + * @deprecated Use {@link RatpackClientTelemetry} and {@link RatpackServerTelemetry} instead. */ +@Deprecated public final class RatpackTelemetry { - /** Returns a new {@link RatpackTelemetry} configured with the given {@link OpenTelemetry}. */ + /** + * Returns a new {@link RatpackTelemetry} configured with the given {@link OpenTelemetry}. + * + * @deprecated Use {@link RatpackClientTelemetry#create(OpenTelemetry)} and {@link + * RatpackServerTelemetry#create(OpenTelemetry)} instead. + */ + @Deprecated public static RatpackTelemetry create(OpenTelemetry openTelemetry) { return builder(openTelemetry).build(); } /** * Returns a new {@link RatpackTelemetryBuilder} configured with the given {@link OpenTelemetry}. + * + * @deprecated Use {@link RatpackClientTelemetry#builder(OpenTelemetry)} and {@link + * RatpackServerTelemetry#builder(OpenTelemetry)} instead. */ + @Deprecated public static RatpackTelemetryBuilder builder(OpenTelemetry openTelemetry) { return new RatpackTelemetryBuilder(openTelemetry); } @@ -71,29 +84,54 @@ public static RatpackTelemetryBuilder builder(OpenTelemetry openTelemetry) { httpClientInstrumenter = new OpenTelemetryHttpClient(clientInstrumenter); } - /** Returns instance of {@link OpenTelemetryServerHandler} to support Ratpack Registry binding. */ + /** + * Returns instance of {@link OpenTelemetryServerHandler} to support Ratpack Registry binding. + * + * @deprecated Use {@link RatpackServerTelemetry#getHandler()} instead. + */ + @Deprecated public OpenTelemetryServerHandler getOpenTelemetryServerHandler() { return serverHandler; } - /** Returns instance of {@link ExecInterceptor} to support Ratpack Registry binding. */ + /** + * Returns instance of {@link ExecInterceptor} to support Ratpack Registry binding. + * + * @deprecated Use {@link RatpackServerTelemetry#getExecInterceptor()} instead. + */ + @Deprecated public ExecInterceptor getOpenTelemetryExecInterceptor() { return OpenTelemetryExecInterceptor.INSTANCE; } - /** Returns instance of {@link ExecInitializer} to support Ratpack Registry binding. */ + /** + * Returns instance of {@link ExecInitializer} to support Ratpack Registry binding. + * + * @deprecated Use {@link RatpackServerTelemetry#getExecInitializer()} instead. + */ + @Deprecated public ExecInitializer getOpenTelemetryExecInitializer() { return OpenTelemetryExecInitializer.INSTANCE; } - /** Configures the {@link RegistrySpec} with OpenTelemetry. */ + /** + * Configures the {@link RegistrySpec} with OpenTelemetry. + * + * @deprecated Use {@link RatpackServerTelemetry#configureRegistry(RegistrySpec)} instead. + */ + @Deprecated public void configureServerRegistry(RegistrySpec registry) { registry.add(HandlerDecorator.prepend(serverHandler)); registry.add(OpenTelemetryExecInterceptor.INSTANCE); registry.add(OpenTelemetryExecInitializer.INSTANCE); } - /** Returns instrumented instance of {@link HttpClient} with OpenTelemetry. */ + /** + * Returns instrumented instance of {@link HttpClient} with OpenTelemetry. + * + * @deprecated Use {@link RatpackClientTelemetry#instrument(HttpClient)} instead. + */ + @Deprecated public HttpClient instrumentHttpClient(HttpClient httpClient) throws Exception { return httpClientInstrumenter.instrument(httpClient); } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java index 1192a8d8d936..4e10af5c9117 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java @@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.ratpack.v1_7.internal.Experimental; import io.opentelemetry.instrumentation.ratpack.v1_7.internal.RatpackClientInstrumenterBuilderFactory; import io.opentelemetry.instrumentation.ratpack.v1_7.internal.RatpackServerInstrumenterBuilderFactory; import java.util.List; @@ -23,7 +24,13 @@ import ratpack.http.client.HttpResponse; import ratpack.http.client.RequestSpec; -/** A builder for {@link RatpackTelemetry}. */ +/** + * A builder for {@link RatpackTelemetry}. + * + * @deprecated Use {@link RatpackClientTelemetryBuilder} and {@link RatpackServerTelemetryBuilder} + * instead. + */ +@Deprecated public final class RatpackTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.ratpack-1.7"; @@ -41,7 +48,11 @@ public final class RatpackTelemetryBuilder { /** * Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented * items. The {@link AttributesExtractor} will be executed after all default extractors. + * + * @deprecated Use {@link + * RatpackServerTelemetryBuilder#addAttributeExtractor(AttributesExtractor)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder addAttributeExtractor( AttributesExtractor attributesExtractor) { @@ -49,6 +60,11 @@ public RatpackTelemetryBuilder addAttributeExtractor( return this; } + /** + * @deprecated Use {@link + * RatpackClientTelemetryBuilder#addAttributeExtractor(AttributesExtractor)} instead. + */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder addClientAttributeExtractor( AttributesExtractor attributesExtractor) { @@ -60,7 +76,9 @@ public RatpackTelemetryBuilder addClientAttributeExtractor( * Configures the HTTP server request headers that will be captured as span attributes. * * @param requestHeaders A list of HTTP header names. + * @deprecated Use {@link RatpackServerTelemetryBuilder#setCapturedRequestHeaders(List)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setCapturedServerRequestHeaders(List requestHeaders) { serverBuilder.setCapturedRequestHeaders(requestHeaders); @@ -71,7 +89,9 @@ public RatpackTelemetryBuilder setCapturedServerRequestHeaders(List requ * Configures the HTTP server response headers that will be captured as span attributes. * * @param responseHeaders A list of HTTP header names. + * @deprecated Use {@link RatpackServerTelemetryBuilder#setCapturedResponseHeaders(List)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setCapturedServerResponseHeaders(List responseHeaders) { serverBuilder.setCapturedResponseHeaders(responseHeaders); @@ -82,7 +102,9 @@ public RatpackTelemetryBuilder setCapturedServerResponseHeaders(List res * Configures the HTTP client request headers that will be captured as span attributes. * * @param requestHeaders A list of HTTP header names. + * @deprecated Use {@link RatpackClientTelemetryBuilder#setCapturedRequestHeaders(List)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setCapturedClientRequestHeaders(List requestHeaders) { clientBuilder.setCapturedRequestHeaders(requestHeaders); @@ -93,7 +115,9 @@ public RatpackTelemetryBuilder setCapturedClientRequestHeaders(List requ * Configures the HTTP client response headers that will be captured as span attributes. * * @param responseHeaders A list of HTTP header names. + * @deprecated Use {@link RatpackClientTelemetryBuilder#setCapturedResponseHeaders(List)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setCapturedClientResponseHeaders(List responseHeaders) { clientBuilder.setCapturedResponseHeaders(responseHeaders); @@ -113,7 +137,10 @@ public RatpackTelemetryBuilder setCapturedClientResponseHeaders(List res * @param knownMethods A set of recognized HTTP request methods. * @see HttpClientAttributesExtractorBuilder#setKnownMethods(Set) * @see HttpServerAttributesExtractorBuilder#setKnownMethods(Set) + * @deprecated Use {@link RatpackServerTelemetryBuilder#setKnownMethods(Set)} and {@link + * RatpackClientTelemetryBuilder#setKnownMethods(Set)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setKnownMethods(Set knownMethods) { clientBuilder.setKnownMethods(knownMethods); @@ -126,7 +153,10 @@ public RatpackTelemetryBuilder setKnownMethods(Set knownMethods) { * * @param emitExperimentalHttpClientMetrics {@code true} if the experimental HTTP client metrics * are to be emitted. + * @deprecated Use {@link Experimental#setEmitExperimentalTelemetry(RatpackClientTelemetryBuilder, + * boolean)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setEmitExperimentalHttpClientMetrics( boolean emitExperimentalHttpClientMetrics) { @@ -139,7 +169,10 @@ public RatpackTelemetryBuilder setEmitExperimentalHttpClientMetrics( * * @param emitExperimentalHttpServerMetrics {@code true} if the experimental HTTP server metrics * are to be emitted. + * @deprecated Use {@link Experimental#setEmitExperimentalTelemetry(RatpackServerTelemetryBuilder, + * boolean)} instead. */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setEmitExperimentalHttpServerMetrics( boolean emitExperimentalHttpServerMetrics) { @@ -147,7 +180,12 @@ public RatpackTelemetryBuilder setEmitExperimentalHttpServerMetrics( return this; } - /** Sets custom client {@link SpanNameExtractor} via transform function. */ + /** + * Sets custom client {@link SpanNameExtractor} via transform function. + * + * @deprecated Use {@link RatpackClientTelemetryBuilder#setSpanNameExtractor(Function)} instead. + */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setClientSpanNameExtractor( Function< @@ -158,7 +196,12 @@ public RatpackTelemetryBuilder setClientSpanNameExtractor( return this; } - /** Sets custom server {@link SpanNameExtractor} via transform function. */ + /** + * Sets custom server {@link SpanNameExtractor} via transform function. + * + * @deprecated Use {@link RatpackServerTelemetryBuilder#setSpanNameExtractor(Function)} instead. + */ + @Deprecated @CanIgnoreReturnValue public RatpackTelemetryBuilder setServerSpanNameExtractor( Function, ? extends SpanNameExtractor> @@ -167,7 +210,13 @@ public RatpackTelemetryBuilder setServerSpanNameExtractor( return this; } - /** Returns a new {@link RatpackTelemetry} with the configuration of this builder. */ + /** + * Returns a new {@link RatpackTelemetry} with the configuration of this builder. + * + * @deprecated Use {@link RatpackClientTelemetryBuilder#build()} and {@link + * RatpackServerTelemetryBuilder#build()} instead. + */ + @Deprecated public RatpackTelemetry build() { return new RatpackTelemetry(serverBuilder.build(), clientBuilder.build()); } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java new file mode 100644 index 000000000000..ec9f1ea5e1d1 --- /dev/null +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java @@ -0,0 +1,86 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.ratpack.v1_7.internal; + +import static java.util.logging.Level.FINE; + +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackClientTelemetryBuilder; +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetryBuilder; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +// TODO (trask) update the above javadoc similar to +// https://github.com/open-telemetry/opentelemetry-java/pull/6886 +public class Experimental { + + private static final Logger logger = Logger.getLogger(Experimental.class.getName()); + + @Nullable + private static final Method emitExperimentalClientTelemetryMethod = + getEmitExperimentalClientTelemetryMethod(); + + @Nullable + private static final Method emitExperimentalServerTelemetryMethod = + getEmitExperimentalServerTelemetryMethod(); + + public void setEmitExperimentalTelemetry( + RatpackClientTelemetryBuilder builder, boolean emitExperimentalTelemetry) { + + if (emitExperimentalClientTelemetryMethod != null) { + try { + emitExperimentalClientTelemetryMethod.invoke(builder, emitExperimentalTelemetry); + } catch (IllegalAccessException | InvocationTargetException e) { + logger.log(FINE, e.getMessage(), e); + } + } + } + + public void setEmitExperimentalTelemetry( + RatpackServerTelemetryBuilder builder, boolean emitExperimentalTelemetry) { + + if (emitExperimentalServerTelemetryMethod != null) { + try { + emitExperimentalServerTelemetryMethod.invoke(builder, emitExperimentalTelemetry); + } catch (IllegalAccessException | InvocationTargetException e) { + logger.log(FINE, e.getMessage(), e); + } + } + } + + @Nullable + private static Method getEmitExperimentalClientTelemetryMethod() { + try { + Method method = + RatpackClientTelemetryBuilder.class.getDeclaredMethod( + "setEmitExperimentalHttpClientMetrics", boolean.class); + method.setAccessible(true); + return method; + } catch (NoSuchMethodException e) { + logger.log(FINE, e.getMessage(), e); + return null; + } + } + + @Nullable + private static Method getEmitExperimentalServerTelemetryMethod() { + try { + Method method = + RatpackServerTelemetryBuilder.class.getDeclaredMethod( + "setEmitExperimentalHttpServerMetrics", boolean.class); + method.setAccessible(true); + return method; + } catch (NoSuchMethodException e) { + logger.log(FINE, e.getMessage(), e); + return null; + } + } +} diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy index 7a6de6f3d980..943ddd84adec 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy @@ -11,7 +11,8 @@ import io.opentelemetry.api.trace.Tracer import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator import io.opentelemetry.context.Context import io.opentelemetry.context.propagation.ContextPropagators -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackClientTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetry import io.opentelemetry.sdk.OpenTelemetrySdk import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter import io.opentelemetry.sdk.trace.SdkTracerProvider @@ -34,9 +35,7 @@ import java.util.concurrent.TimeUnit import static io.opentelemetry.api.trace.SpanKind.CLIENT import static io.opentelemetry.api.trace.SpanKind.SERVER -import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD -import static io.opentelemetry.semconv.HttpAttributes.HTTP_ROUTE -import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE +import static io.opentelemetry.semconv.HttpAttributes.* class InstrumentedHttpClientTest extends Specification { @@ -49,7 +48,8 @@ class InstrumentedHttpClientTest extends Specification { .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .setTracerProvider(tracerProvider).build() - RatpackTelemetry telemetry = RatpackTelemetry.create(openTelemetry) + RatpackClientTelemetry telemetry = RatpackClientTelemetry.create(openTelemetry) + RatpackServerTelemetry serverTelemetry = RatpackServerTelemetry.create(openTelemetry) def cleanup() { spanExporter.reset() @@ -60,7 +60,8 @@ class InstrumentedHttpClientTest extends Specification { def otherApp = EmbeddedApp.of { spec -> spec.registry( Guice.registry { bindings -> - telemetry.configureServerRegistry(bindings) + serverTelemetry.configureRegistry(bindings) + telemetry.configureRegistry(bindings) } ) spec.handlers { @@ -71,8 +72,9 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( Guice.registry { bindings -> - telemetry.configureServerRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrumentHttpClient(HttpClient.of(Action.noop()))) + serverTelemetry.configureRegistry(bindings) + telemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) } ) @@ -132,8 +134,9 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( Guice.registry { bindings -> - telemetry.configureServerRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrumentHttpClient(HttpClient.of(Action.noop()))) + serverTelemetry.configureRegistry(bindings) + telemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) } ) @@ -197,8 +200,9 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( Guice.registry { bindings -> - telemetry.configureServerRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrumentHttpClient( + serverTelemetry.configureRegistry(bindings) + telemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument( HttpClient.of { s -> s.readTimeout(Duration.ofMillis(10)) }) ) } @@ -254,8 +258,9 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( Guice.registry { bindings -> - telemetry.configureServerRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrumentHttpClient(HttpClient.of(Action.noop()))) + serverTelemetry.configureRegistry(bindings) + telemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) bindings.bindInstance(new BarService(latch, "${otherApp.address}foo", openTelemetry)) }, ) @@ -287,8 +292,9 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( Guice.registry { bindings -> - telemetry.configureServerRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrumentHttpClient(HttpClient.of(Action.noop()))) + serverTelemetry.configureRegistry(bindings) + telemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) bindings.bindInstance(new BarForkService(latch, "${otherApp.address}foo", openTelemetry)) }, ) @@ -341,7 +347,6 @@ class BarService implements Service { } } - class BarForkService implements Service { private final String url private final CountDownLatch latch diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackAsyncHttpServerTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackAsyncHttpServerTest.groovy index c391c85a5ec3..cc18bc735592 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackAsyncHttpServerTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackAsyncHttpServerTest.groovy @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.ratpack.v1_7.server import io.opentelemetry.instrumentation.ratpack.server.AbstractRatpackAsyncHttpServerTest -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetry import io.opentelemetry.instrumentation.test.LibraryTestTrait import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint @@ -15,12 +15,12 @@ import ratpack.server.RatpackServerSpec class RatpackAsyncHttpServerTest extends AbstractRatpackAsyncHttpServerTest implements LibraryTestTrait { @Override void configure(RatpackServerSpec serverSpec) { - RatpackTelemetry telemetry = RatpackTelemetry.builder(openTelemetry) - .setCapturedServerRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) - .setCapturedServerResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) + RatpackServerTelemetry telemetry = RatpackServerTelemetry.builder(openTelemetry) + .setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) + .setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) .build() serverSpec.registryOf { - telemetry.configureServerRegistry(it) + telemetry.configureRegistry(it) } } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackForkedHttpServerTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackForkedHttpServerTest.groovy index a5e5657074d3..1cf178ecec20 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackForkedHttpServerTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackForkedHttpServerTest.groovy @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.ratpack.v1_7.server import io.opentelemetry.instrumentation.ratpack.server.AbstractRatpackForkedHttpServerTest -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetry import io.opentelemetry.instrumentation.test.LibraryTestTrait import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint @@ -15,12 +15,12 @@ import ratpack.server.RatpackServerSpec class RatpackForkedHttpServerTest extends AbstractRatpackForkedHttpServerTest implements LibraryTestTrait { @Override void configure(RatpackServerSpec serverSpec) { - RatpackTelemetry telemetry = RatpackTelemetry.builder(openTelemetry) - .setCapturedServerRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) - .setCapturedServerResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) + RatpackServerTelemetry telemetry = RatpackServerTelemetry.builder(openTelemetry) + .setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) + .setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) .build() serverSpec.registryOf { - telemetry.configureServerRegistry(it) + telemetry.configureRegistry(it) } } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.groovy index 72f1a0f43189..7e07e86c9a8a 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.groovy @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.ratpack.v1_7.server import io.opentelemetry.instrumentation.ratpack.server.AbstractRatpackHttpServerTest -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetry import io.opentelemetry.instrumentation.test.LibraryTestTrait import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest import io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint @@ -15,12 +15,12 @@ import ratpack.server.RatpackServerSpec class RatpackHttpServerTest extends AbstractRatpackHttpServerTest implements LibraryTestTrait { @Override void configure(RatpackServerSpec serverSpec) { - RatpackTelemetry telemetry = RatpackTelemetry.builder(openTelemetry) - .setCapturedServerRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) - .setCapturedServerResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) + RatpackServerTelemetry telemetry = RatpackServerTelemetry.builder(openTelemetry) + .setCapturedRequestHeaders([AbstractHttpServerTest.TEST_REQUEST_HEADER]) + .setCapturedResponseHeaders([AbstractHttpServerTest.TEST_RESPONSE_HEADER]) .build() serverSpec.registryOf { - telemetry.configureServerRegistry(it) + telemetry.configureRegistry(it) } } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackRoutesTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackRoutesTest.groovy index 0d5004b71050..d4c3677f499a 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackRoutesTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackRoutesTest.groovy @@ -6,16 +6,16 @@ package io.opentelemetry.instrumentation.ratpack.v1_7.server import io.opentelemetry.instrumentation.ratpack.server.AbstractRatpackRoutesTest -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetry import io.opentelemetry.instrumentation.test.LibraryTestTrait import ratpack.server.RatpackServerSpec class RatpackRoutesTest extends AbstractRatpackRoutesTest implements LibraryTestTrait { @Override void configure(RatpackServerSpec serverSpec) { - RatpackTelemetry telemetry = RatpackTelemetry.create(openTelemetry) + RatpackServerTelemetry telemetry = RatpackServerTelemetry.create(openTelemetry) serverSpec.registryOf { - telemetry.configureServerRegistry(it) + telemetry.configureRegistry(it) } } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerApplicationTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerApplicationTest.groovy index 3e0ed088f401..d2ca21755a9c 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerApplicationTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerApplicationTest.groovy @@ -10,9 +10,9 @@ import com.google.inject.Provides import groovy.transform.CompileStatic import io.opentelemetry.api.OpenTelemetry import io.opentelemetry.api.trace.SpanKind -import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryServerHandler +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackClientTelemetry import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackFunctionalTest -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetry import io.opentelemetry.sdk.OpenTelemetrySdk import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter import io.opentelemetry.sdk.trace.SdkTracerProvider @@ -21,6 +21,7 @@ import io.opentelemetry.sdk.trace.export.SpanExporter import ratpack.exec.ExecInitializer import ratpack.exec.ExecInterceptor import ratpack.guice.Guice +import ratpack.handling.Handler import ratpack.http.client.HttpClient import ratpack.server.RatpackServer import spock.lang.Specification @@ -28,9 +29,7 @@ import spock.util.concurrent.PollingConditions import javax.inject.Singleton -import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD -import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE -import static io.opentelemetry.semconv.HttpAttributes.HTTP_ROUTE +import static io.opentelemetry.semconv.HttpAttributes.* import static io.opentelemetry.semconv.UrlAttributes.URL_PATH class RatpackServerApplicationTest extends Specification { @@ -104,20 +103,26 @@ class OpenTelemetryModule extends AbstractModule { @Singleton @Provides - RatpackTelemetry ratpackTracing(OpenTelemetry openTelemetry) { - return RatpackTelemetry.create(openTelemetry) + RatpackClientTelemetry ratpackClientTelemetry(OpenTelemetry openTelemetry) { + return RatpackClientTelemetry.create(openTelemetry) } @Singleton @Provides - OpenTelemetryServerHandler ratpackServerHandler(RatpackTelemetry ratpackTracing) { - return ratpackTracing.getOpenTelemetryServerHandler() + RatpackServerTelemetry ratpackServerTelemetry(OpenTelemetry openTelemetry) { + return RatpackServerTelemetry.create(openTelemetry) } @Singleton @Provides - ExecInterceptor ratpackExecInterceptor(RatpackTelemetry ratpackTracing) { - return ratpackTracing.getOpenTelemetryExecInterceptor() + Handler ratpackServerHandler(RatpackServerTelemetry ratpackTracing) { + return ratpackTracing.getHandler() + } + + @Singleton + @Provides + ExecInterceptor ratpackExecInterceptor(RatpackServerTelemetry ratpackTracing) { + return ratpackTracing.getExecInterceptor() } @Provides @@ -131,14 +136,14 @@ class OpenTelemetryModule extends AbstractModule { @Singleton @Provides - HttpClient instrumentedHttpClient(RatpackTelemetry ratpackTracing) { - return ratpackTracing.instrumentHttpClient(HttpClient.of {}) + HttpClient instrumentedHttpClient(RatpackClientTelemetry ratpackTracing) { + return ratpackTracing.instrument(HttpClient.of {}) } @Singleton @Provides - ExecInitializer ratpackExecInitializer(RatpackTelemetry ratpackTracing) { - return ratpackTracing.getOpenTelemetryExecInitializer() + ExecInitializer ratpackExecInitializer(RatpackServerTelemetry ratpackTracing) { + return ratpackTracing.getExecInitializer() } } @@ -152,7 +157,7 @@ class RatpackApp { .handlers { chain -> chain .get("ignore") { ctx -> ctx.render("ignored") } - .all(OpenTelemetryServerHandler) + .all(Handler) .get("foo") { ctx -> ctx.render("hi-foo") } .get("bar") { ctx -> ctx.get(HttpClient).get(ctx.get(URI)) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerTest.groovy index f04d97f458ee..19cb6d22e5ac 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackServerTest.groovy @@ -8,7 +8,7 @@ package io.opentelemetry.instrumentation.ratpack.v1_7.server import io.opentelemetry.api.trace.SpanKind import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator import io.opentelemetry.context.propagation.ContextPropagators -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetry import io.opentelemetry.sdk.OpenTelemetrySdk import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter import io.opentelemetry.sdk.trace.SdkTracerProvider @@ -32,7 +32,7 @@ class RatpackServerTest extends Specification { .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .setTracerProvider(tracerProvider).build() - def telemetry = RatpackTelemetry.create(openTelemetry) + def telemetry = RatpackServerTelemetry.create(openTelemetry) def cleanup() { spanExporter.reset() @@ -41,7 +41,7 @@ class RatpackServerTest extends Specification { def "add span on handlers"() { given: def app = EmbeddedApp.of { spec -> - spec.registry { Registry.of { telemetry.configureServerRegistry(it) } } + spec.registry { Registry.of { telemetry.configureRegistry(it) } } spec.handlers { chain -> chain.get("foo") { ctx -> ctx.render("hi-foo") } } @@ -67,7 +67,7 @@ class RatpackServerTest extends Specification { def "propagate trace with instrumented async operations"() { expect: def app = EmbeddedApp.of { spec -> - spec.registry { Registry.of { telemetry.configureServerRegistry(it) } } + spec.registry { Registry.of { telemetry.configureRegistry(it) } } spec.handlers { chain -> chain.get("foo") { ctx -> ctx.render("hi-foo") @@ -106,7 +106,7 @@ class RatpackServerTest extends Specification { def "propagate trace with instrumented async concurrent operations"() { expect: def app = EmbeddedApp.of { spec -> - spec.registry { Registry.of { telemetry.configureServerRegistry(it) } } + spec.registry { Registry.of { telemetry.configureRegistry(it) } } spec.handlers { chain -> chain.get("bar") { ctx -> ctx.render("hi-bar") diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientTest.java index 49ceb3e976e2..b993de02489b 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientTest.java @@ -21,18 +21,18 @@ class RatpackHttpClientTest extends AbstractRatpackHttpClientTest { @Override protected HttpClient buildHttpClient() throws Exception { - return RatpackTelemetry.builder(testing.getOpenTelemetry()) - .setCapturedClientRequestHeaders( + return RatpackClientTelemetry.builder(testing.getOpenTelemetry()) + .setCapturedRequestHeaders( Collections.singletonList(AbstractHttpClientTest.TEST_REQUEST_HEADER)) - .setCapturedClientResponseHeaders( + .setCapturedResponseHeaders( Collections.singletonList(AbstractHttpClientTest.TEST_RESPONSE_HEADER)) .build() - .instrumentHttpClient(HttpClient.of(Action.noop())); + .instrument(HttpClient.of(Action.noop())); } @Override protected HttpClient buildHttpClient(Action action) throws Exception { - return RatpackTelemetry.create(testing.getOpenTelemetry()) - .instrumentHttpClient(HttpClient.of(action)); + return RatpackClientTelemetry.create(testing.getOpenTelemetry()) + .instrument(HttpClient.of(action)); } } From 7c8516b9bf399004641147984f39095a5b4bcd35 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 9 Dec 2024 14:18:53 -0800 Subject: [PATCH 02/13] Fix javadoc todo --- .../ratpack/v1_7/internal/Experimental.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java index ec9f1ea5e1d1..f7ad2b2e2746 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java @@ -15,11 +15,10 @@ import javax.annotation.Nullable; /** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. + * This class is internal and experimental. Its APIs are unstable and can change at any time. Its + * APIs (or a version of them) may be promoted to the public stable API in the future, but no + * guarantees are made. */ -// TODO (trask) update the above javadoc similar to -// https://github.com/open-telemetry/opentelemetry-java/pull/6886 public class Experimental { private static final Logger logger = Logger.getLogger(Experimental.class.getName()); From 21fcc5b94fa0b118df2afc3d08cc751dece09783 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 9 Dec 2024 19:04:10 -0800 Subject: [PATCH 03/13] fix naming --- .../ratpack/v1_7/RatpackClientTelemetryBuilder.java | 2 +- .../ratpack/v1_7/RatpackServerTelemetryBuilder.java | 2 +- .../instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java index a292a388f6cd..895e7e9b10bc 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java @@ -32,7 +32,7 @@ public final class RatpackClientTelemetryBuilder { } @CanIgnoreReturnValue - public RatpackClientTelemetryBuilder addAttributeExtractor( + public RatpackClientTelemetryBuilder addAttributesExtractor( AttributesExtractor attributesExtractor) { clientBuilder.addAttributeExtractor(attributesExtractor); return this; diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java index 536d4ff06ab2..a5208b9c486e 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java @@ -36,7 +36,7 @@ public final class RatpackServerTelemetryBuilder { * items. The {@link AttributesExtractor} will be executed after all default extractors. */ @CanIgnoreReturnValue - public RatpackServerTelemetryBuilder addAttributeExtractor( + public RatpackServerTelemetryBuilder addAttributesExtractor( AttributesExtractor attributesExtractor) { serverBuilder.addAttributesExtractor(attributesExtractor); return this; diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java index 4e10af5c9117..1e51bcf352ce 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java @@ -50,7 +50,7 @@ public final class RatpackTelemetryBuilder { * items. The {@link AttributesExtractor} will be executed after all default extractors. * * @deprecated Use {@link - * RatpackServerTelemetryBuilder#addAttributeExtractor(AttributesExtractor)} instead. + * RatpackServerTelemetryBuilder#addAttributesExtractor(AttributesExtractor)} instead. */ @Deprecated @CanIgnoreReturnValue @@ -62,7 +62,7 @@ public RatpackTelemetryBuilder addAttributeExtractor( /** * @deprecated Use {@link - * RatpackClientTelemetryBuilder#addAttributeExtractor(AttributesExtractor)} instead. + * RatpackClientTelemetryBuilder#addAttributesExtractor(AttributesExtractor)} instead. */ @Deprecated @CanIgnoreReturnValue From 528e8db110b3c4a8c14d51899cfbec88e86dc084 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 9 Dec 2024 19:05:59 -0800 Subject: [PATCH 04/13] simplify --- .../v1_7/RatpackClientTelemetryBuilder.java | 18 +++++++++--------- .../v1_7/RatpackServerTelemetryBuilder.java | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java index 895e7e9b10bc..556b505728e6 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java @@ -24,17 +24,17 @@ public final class RatpackClientTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.ratpack-1.7"; - private final DefaultHttpClientInstrumenterBuilder clientBuilder; + private final DefaultHttpClientInstrumenterBuilder builder; RatpackClientTelemetryBuilder(OpenTelemetry openTelemetry) { - clientBuilder = + builder = RatpackClientInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); } @CanIgnoreReturnValue public RatpackClientTelemetryBuilder addAttributesExtractor( AttributesExtractor attributesExtractor) { - clientBuilder.addAttributeExtractor(attributesExtractor); + builder.addAttributeExtractor(attributesExtractor); return this; } @@ -45,7 +45,7 @@ public RatpackClientTelemetryBuilder addAttributesExtractor( */ @CanIgnoreReturnValue public RatpackClientTelemetryBuilder setCapturedRequestHeaders(List requestHeaders) { - clientBuilder.setCapturedRequestHeaders(requestHeaders); + builder.setCapturedRequestHeaders(requestHeaders); return this; } @@ -56,7 +56,7 @@ public RatpackClientTelemetryBuilder setCapturedRequestHeaders(List requ */ @CanIgnoreReturnValue public RatpackClientTelemetryBuilder setCapturedResponseHeaders(List responseHeaders) { - clientBuilder.setCapturedResponseHeaders(responseHeaders); + builder.setCapturedResponseHeaders(responseHeaders); return this; } @@ -75,7 +75,7 @@ public RatpackClientTelemetryBuilder setCapturedResponseHeaders(List res */ @CanIgnoreReturnValue public RatpackClientTelemetryBuilder setKnownMethods(Set knownMethods) { - clientBuilder.setKnownMethods(knownMethods); + builder.setKnownMethods(knownMethods); return this; } @@ -86,7 +86,7 @@ public RatpackClientTelemetryBuilder setSpanNameExtractor( SpanNameExtractor, ? extends SpanNameExtractor> clientSpanNameExtractor) { - clientBuilder.setSpanNameExtractor(clientSpanNameExtractor); + builder.setSpanNameExtractor(clientSpanNameExtractor); return this; } @@ -95,11 +95,11 @@ public RatpackClientTelemetryBuilder setSpanNameExtractor( * Experimental#setEmitExperimentalTelemetry(RatpackClientTelemetryBuilder, boolean)}. */ void setEmitExperimentalHttpClientMetrics(boolean emitExperimentalHttpClientMetrics) { - clientBuilder.setEmitExperimentalHttpClientMetrics(emitExperimentalHttpClientMetrics); + builder.setEmitExperimentalHttpClientMetrics(emitExperimentalHttpClientMetrics); } /** Returns a new {@link RatpackClientTelemetry} with the configuration of this builder. */ public RatpackClientTelemetry build() { - return new RatpackClientTelemetry(clientBuilder.build()); + return new RatpackClientTelemetry(builder.build()); } } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java index a5208b9c486e..a5edadd98d91 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java @@ -24,10 +24,10 @@ public final class RatpackServerTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.ratpack-1.7"; - private final DefaultHttpServerInstrumenterBuilder serverBuilder; + private final DefaultHttpServerInstrumenterBuilder builder; RatpackServerTelemetryBuilder(OpenTelemetry openTelemetry) { - serverBuilder = + builder = RatpackServerInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); } @@ -38,7 +38,7 @@ public final class RatpackServerTelemetryBuilder { @CanIgnoreReturnValue public RatpackServerTelemetryBuilder addAttributesExtractor( AttributesExtractor attributesExtractor) { - serverBuilder.addAttributesExtractor(attributesExtractor); + builder.addAttributesExtractor(attributesExtractor); return this; } @@ -49,7 +49,7 @@ public RatpackServerTelemetryBuilder addAttributesExtractor( */ @CanIgnoreReturnValue public RatpackServerTelemetryBuilder setCapturedRequestHeaders(List requestHeaders) { - serverBuilder.setCapturedRequestHeaders(requestHeaders); + builder.setCapturedRequestHeaders(requestHeaders); return this; } @@ -60,7 +60,7 @@ public RatpackServerTelemetryBuilder setCapturedRequestHeaders(List requ */ @CanIgnoreReturnValue public RatpackServerTelemetryBuilder setCapturedResponseHeaders(List responseHeaders) { - serverBuilder.setCapturedResponseHeaders(responseHeaders); + builder.setCapturedResponseHeaders(responseHeaders); return this; } @@ -79,7 +79,7 @@ public RatpackServerTelemetryBuilder setCapturedResponseHeaders(List res */ @CanIgnoreReturnValue public RatpackServerTelemetryBuilder setKnownMethods(Set knownMethods) { - serverBuilder.setKnownMethods(knownMethods); + builder.setKnownMethods(knownMethods); return this; } @@ -88,7 +88,7 @@ public RatpackServerTelemetryBuilder setKnownMethods(Set knownMethods) { public RatpackServerTelemetryBuilder setSpanNameExtractor( Function, ? extends SpanNameExtractor> serverSpanNameExtractor) { - serverBuilder.setSpanNameExtractor(serverSpanNameExtractor); + builder.setSpanNameExtractor(serverSpanNameExtractor); return this; } @@ -97,11 +97,11 @@ public RatpackServerTelemetryBuilder setSpanNameExtractor( * Experimental#setEmitExperimentalTelemetry(RatpackServerTelemetryBuilder, boolean)}. */ void setEmitExperimentalHttpServerMetrics(boolean emitExperimentalHttpServerMetrics) { - serverBuilder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics); + builder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics); } /** Returns a new {@link RatpackServerTelemetry} with the configuration of this builder. */ public RatpackServerTelemetry build() { - return new RatpackServerTelemetry(serverBuilder.build()); + return new RatpackServerTelemetry(builder.build()); } } From cd4d8cd3d65283ede51cb1827699a94e5fbb635c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 9 Dec 2024 19:44:59 -0800 Subject: [PATCH 05/13] spotless --- .../ratpack/v1_7/RatpackClientTelemetryBuilder.java | 3 +-- .../ratpack/v1_7/RatpackServerTelemetryBuilder.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java index 556b505728e6..95975fd4d01e 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java @@ -27,8 +27,7 @@ public final class RatpackClientTelemetryBuilder { private final DefaultHttpClientInstrumenterBuilder builder; RatpackClientTelemetryBuilder(OpenTelemetry openTelemetry) { - builder = - RatpackClientInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); + builder = RatpackClientInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); } @CanIgnoreReturnValue diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java index a5edadd98d91..f40300fde907 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java @@ -27,8 +27,7 @@ public final class RatpackServerTelemetryBuilder { private final DefaultHttpServerInstrumenterBuilder builder; RatpackServerTelemetryBuilder(OpenTelemetry openTelemetry) { - builder = - RatpackServerInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); + builder = RatpackServerInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); } /** From de3239970c1f6367fc4bace0c844e7c2e4d50d4e Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 10 Dec 2024 18:57:03 -0800 Subject: [PATCH 06/13] remove reflection --- .../v1_7/RatpackClientTelemetryBuilder.java | 7 +- .../v1_7/RatpackServerTelemetryBuilder.java | 5 ++ .../ratpack/v1_7/internal/Experimental.java | 64 +++++-------------- 3 files changed, 26 insertions(+), 50 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java index 95975fd4d01e..0358a17cb330 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java @@ -26,6 +26,11 @@ public final class RatpackClientTelemetryBuilder { private final DefaultHttpClientInstrumenterBuilder builder; + static { + Experimental.setSetEmitExperimentalClientTelemetry( + (builder, emit) -> builder.builder.setEmitExperimentalHttpClientMetrics(emit)); + } + RatpackClientTelemetryBuilder(OpenTelemetry openTelemetry) { builder = RatpackClientInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); } @@ -33,7 +38,7 @@ public final class RatpackClientTelemetryBuilder { @CanIgnoreReturnValue public RatpackClientTelemetryBuilder addAttributesExtractor( AttributesExtractor attributesExtractor) { - builder.addAttributeExtractor(attributesExtractor); + builder.addAttributesExtractor(attributesExtractor); return this; } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java index f40300fde907..d4a4deb8163d 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java @@ -26,6 +26,11 @@ public final class RatpackServerTelemetryBuilder { private final DefaultHttpServerInstrumenterBuilder builder; + static { + Experimental.setSetEmitExperimentalServerTelemetry( + (builder, emit) -> builder.builder.setEmitExperimentalHttpServerMetrics(emit)); + } + RatpackServerTelemetryBuilder(OpenTelemetry openTelemetry) { builder = RatpackServerInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java index f7ad2b2e2746..6811f1b56cb1 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java @@ -5,13 +5,9 @@ package io.opentelemetry.instrumentation.ratpack.v1_7.internal; -import static java.util.logging.Level.FINE; - import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackClientTelemetryBuilder; import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackServerTelemetryBuilder; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.logging.Logger; +import java.util.function.BiConsumer; import javax.annotation.Nullable; /** @@ -21,65 +17,35 @@ */ public class Experimental { - private static final Logger logger = Logger.getLogger(Experimental.class.getName()); - @Nullable - private static final Method emitExperimentalClientTelemetryMethod = - getEmitExperimentalClientTelemetryMethod(); + private static BiConsumer + setEmitExperimentalClientTelemetry; @Nullable - private static final Method emitExperimentalServerTelemetryMethod = - getEmitExperimentalServerTelemetryMethod(); + private static BiConsumer + setEmitExperimentalServerTelemetry; public void setEmitExperimentalTelemetry( RatpackClientTelemetryBuilder builder, boolean emitExperimentalTelemetry) { - - if (emitExperimentalClientTelemetryMethod != null) { - try { - emitExperimentalClientTelemetryMethod.invoke(builder, emitExperimentalTelemetry); - } catch (IllegalAccessException | InvocationTargetException e) { - logger.log(FINE, e.getMessage(), e); - } + if (setEmitExperimentalClientTelemetry != null) { + setEmitExperimentalClientTelemetry.accept(builder, emitExperimentalTelemetry); } } public void setEmitExperimentalTelemetry( RatpackServerTelemetryBuilder builder, boolean emitExperimentalTelemetry) { - - if (emitExperimentalServerTelemetryMethod != null) { - try { - emitExperimentalServerTelemetryMethod.invoke(builder, emitExperimentalTelemetry); - } catch (IllegalAccessException | InvocationTargetException e) { - logger.log(FINE, e.getMessage(), e); - } + if (setEmitExperimentalServerTelemetry != null) { + setEmitExperimentalServerTelemetry.accept(builder, emitExperimentalTelemetry); } } - @Nullable - private static Method getEmitExperimentalClientTelemetryMethod() { - try { - Method method = - RatpackClientTelemetryBuilder.class.getDeclaredMethod( - "setEmitExperimentalHttpClientMetrics", boolean.class); - method.setAccessible(true); - return method; - } catch (NoSuchMethodException e) { - logger.log(FINE, e.getMessage(), e); - return null; - } + public static void setSetEmitExperimentalClientTelemetry( + BiConsumer setEmitExperimentalClientTelemetry) { + Experimental.setEmitExperimentalClientTelemetry = setEmitExperimentalClientTelemetry; } - @Nullable - private static Method getEmitExperimentalServerTelemetryMethod() { - try { - Method method = - RatpackServerTelemetryBuilder.class.getDeclaredMethod( - "setEmitExperimentalHttpServerMetrics", boolean.class); - method.setAccessible(true); - return method; - } catch (NoSuchMethodException e) { - logger.log(FINE, e.getMessage(), e); - return null; - } + public static void setSetEmitExperimentalServerTelemetry( + BiConsumer setEmitExperimentalServerTelemetry) { + Experimental.setEmitExperimentalServerTelemetry = setEmitExperimentalServerTelemetry; } } From 8290ca44107b32b87d0ea7beaf66c8e53e3cd6d1 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 10 Dec 2024 19:54:38 -0800 Subject: [PATCH 07/13] volatile --- .../instrumentation/ratpack/v1_7/internal/Experimental.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java index 6811f1b56cb1..86798b057538 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java @@ -18,11 +18,11 @@ public class Experimental { @Nullable - private static BiConsumer + private static volatile BiConsumer setEmitExperimentalClientTelemetry; @Nullable - private static BiConsumer + private static volatile BiConsumer setEmitExperimentalServerTelemetry; public void setEmitExperimentalTelemetry( From e90c6eb93adac2a311e4e4f32422640e162ef4f5 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 10 Dec 2024 20:30:29 -0800 Subject: [PATCH 08/13] static --- .../ratpack/v1_7/internal/Experimental.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java index 86798b057538..acddd6cd710c 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/internal/Experimental.java @@ -15,7 +15,7 @@ * APIs (or a version of them) may be promoted to the public stable API in the future, but no * guarantees are made. */ -public class Experimental { +public final class Experimental { @Nullable private static volatile BiConsumer @@ -25,14 +25,14 @@ public class Experimental { private static volatile BiConsumer setEmitExperimentalServerTelemetry; - public void setEmitExperimentalTelemetry( + public static void setEmitExperimentalTelemetry( RatpackClientTelemetryBuilder builder, boolean emitExperimentalTelemetry) { if (setEmitExperimentalClientTelemetry != null) { setEmitExperimentalClientTelemetry.accept(builder, emitExperimentalTelemetry); } } - public void setEmitExperimentalTelemetry( + public static void setEmitExperimentalTelemetry( RatpackServerTelemetryBuilder builder, boolean emitExperimentalTelemetry) { if (setEmitExperimentalServerTelemetry != null) { setEmitExperimentalServerTelemetry.accept(builder, emitExperimentalTelemetry); @@ -48,4 +48,6 @@ public static void setSetEmitExperimentalServerTelemetry( BiConsumer setEmitExperimentalServerTelemetry) { Experimental.setEmitExperimentalServerTelemetry = setEmitExperimentalServerTelemetry; } + + private Experimental() {} } From 38448c5380209c6afa65cf3dcaa3e5941cedc496 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Wed, 11 Dec 2024 09:03:24 -0800 Subject: [PATCH 09/13] remove unused --- .../ratpack/v1_7/RatpackClientTelemetryBuilder.java | 8 -------- .../ratpack/v1_7/RatpackServerTelemetryBuilder.java | 8 -------- 2 files changed, 16 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java index 0358a17cb330..f2f077b76fa0 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java @@ -94,14 +94,6 @@ public RatpackClientTelemetryBuilder setSpanNameExtractor( return this; } - /** - * Can be used via the unstable method {@link - * Experimental#setEmitExperimentalTelemetry(RatpackClientTelemetryBuilder, boolean)}. - */ - void setEmitExperimentalHttpClientMetrics(boolean emitExperimentalHttpClientMetrics) { - builder.setEmitExperimentalHttpClientMetrics(emitExperimentalHttpClientMetrics); - } - /** Returns a new {@link RatpackClientTelemetry} with the configuration of this builder. */ public RatpackClientTelemetry build() { return new RatpackClientTelemetry(builder.build()); diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java index d4a4deb8163d..20cc6201af0b 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java @@ -96,14 +96,6 @@ public RatpackServerTelemetryBuilder setSpanNameExtractor( return this; } - /** - * Can be used via the unstable method {@link - * Experimental#setEmitExperimentalTelemetry(RatpackServerTelemetryBuilder, boolean)}. - */ - void setEmitExperimentalHttpServerMetrics(boolean emitExperimentalHttpServerMetrics) { - builder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics); - } - /** Returns a new {@link RatpackServerTelemetry} with the configuration of this builder. */ public RatpackServerTelemetry build() { return new RatpackServerTelemetry(builder.build()); From 3e8e235205cb0edfb2bf99bd7c547e7e10d2b8a2 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 12 Dec 2024 14:15:47 -0800 Subject: [PATCH 10/13] add tests for deprecated code --- .../v1_7/RatpackHttpClientOldTest.java | 39 ++++++++++++++++ .../v1_7/server/RatpackHttpServerOldTest.java | 44 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java create mode 100644 instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java new file mode 100644 index 000000000000..0915f47eabee --- /dev/null +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java @@ -0,0 +1,39 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.ratpack.v1_7; + +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; +import java.util.Collections; +import org.junit.jupiter.api.extension.RegisterExtension; +import ratpack.func.Action; +import ratpack.http.client.HttpClient; +import ratpack.http.client.HttpClientSpec; + +@SuppressWarnings("deprecation") +class RatpackHttpClientOldTest extends AbstractRatpackHttpClientTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forLibrary(); + + @Override + protected HttpClient buildHttpClient() throws Exception { + return RatpackTelemetry.builder(testing.getOpenTelemetry()) + .setCapturedClientRequestHeaders( + Collections.singletonList(AbstractHttpClientTest.TEST_REQUEST_HEADER)) + .setCapturedClientResponseHeaders( + Collections.singletonList(AbstractHttpClientTest.TEST_RESPONSE_HEADER)) + .build() + .instrumentHttpClient(HttpClient.of(Action.noop())); + } + + @Override + protected HttpClient buildHttpClient(Action action) throws Exception { + return RatpackClientTelemetry.create(testing.getOpenTelemetry()) + .instrument(HttpClient.of(action)); + } +} diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java new file mode 100644 index 000000000000..a78801815bb9 --- /dev/null +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java @@ -0,0 +1,44 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.ratpack.v1_7.server; + +import static java.util.Collections.singletonList; + +import io.opentelemetry.instrumentation.ratpack.server.AbstractRatpackHttpServerTest; +import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.junit.jupiter.api.extension.RegisterExtension; +import ratpack.server.RatpackServerSpec; + +@SuppressWarnings("deprecation") +class RatpackHttpServerOldTest extends AbstractRatpackHttpServerTest { + + @RegisterExtension + public static final InstrumentationExtension testing = + HttpServerInstrumentationExtension.forLibrary(); + + @Override + protected void configure(RatpackServerSpec serverSpec) throws Exception { + RatpackTelemetry telemetry = + RatpackTelemetry.builder(testing.getOpenTelemetry()) + .setCapturedServerRequestHeaders( + singletonList(AbstractHttpServerTest.TEST_REQUEST_HEADER)) + .setCapturedServerResponseHeaders( + singletonList(AbstractHttpServerTest.TEST_RESPONSE_HEADER)) + .build(); + serverSpec.registryOf(telemetry::configureServerRegistry); + } + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + + options.setHasHandlerSpan(endpoint -> false); + } +} From 192a5dcfb0eb69f26004840c6821df41292fa966 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 12 Dec 2024 14:48:37 -0800 Subject: [PATCH 11/13] fix --- .../ratpack/v1_7/RatpackHttpClientOldTest.java | 2 +- .../ratpack/v1_7/server/RatpackHttpServerOldTest.java | 2 +- .../ratpack/v1_7/server/RatpackHttpServerTest.java | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java index 0915f47eabee..dff44ee98fb8 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackHttpClientOldTest.java @@ -14,7 +14,7 @@ import ratpack.http.client.HttpClient; import ratpack.http.client.HttpClientSpec; -@SuppressWarnings("deprecation") +@SuppressWarnings("deprecation") // testing deprecated API class RatpackHttpClientOldTest extends AbstractRatpackHttpClientTest { @RegisterExtension diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java index a78801815bb9..57708a527b6c 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java @@ -16,7 +16,7 @@ import org.junit.jupiter.api.extension.RegisterExtension; import ratpack.server.RatpackServerSpec; -@SuppressWarnings("deprecation") +@SuppressWarnings("deprecation") // testing deprecated API class RatpackHttpServerOldTest extends AbstractRatpackHttpServerTest { @RegisterExtension diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.java b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.java index 452b3f3d1367..ddc615054a51 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerTest.java @@ -26,10 +26,8 @@ class RatpackHttpServerTest extends AbstractRatpackHttpServerTest { protected void configure(RatpackServerSpec serverSpec) throws Exception { RatpackServerTelemetry telemetry = RatpackServerTelemetry.builder(testing.getOpenTelemetry()) - .setCapturedRequestHeaders( - singletonList(AbstractHttpServerTest.TEST_REQUEST_HEADER)) - .setCapturedResponseHeaders( - singletonList(AbstractHttpServerTest.TEST_RESPONSE_HEADER)) + .setCapturedRequestHeaders(singletonList(AbstractHttpServerTest.TEST_REQUEST_HEADER)) + .setCapturedResponseHeaders(singletonList(AbstractHttpServerTest.TEST_RESPONSE_HEADER)) .build(); serverSpec.registryOf(telemetry::configureRegistry); } From bf2df2cf70793efd4ea46e2b0876f0e596e81c96 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 12 Dec 2024 17:16:41 -0800 Subject: [PATCH 12/13] fix --- .../ratpack/v1_7/server/RatpackHttpServerOldTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java index 57708a527b6c..3fda1eaa1efb 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/java/io/opentelemetry/instrumentation/ratpack/v1_7/server/RatpackHttpServerOldTest.java @@ -8,7 +8,6 @@ import static java.util.Collections.singletonList; import io.opentelemetry.instrumentation.ratpack.server.AbstractRatpackHttpServerTest; -import io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; @@ -25,8 +24,9 @@ class RatpackHttpServerOldTest extends AbstractRatpackHttpServerTest { @Override protected void configure(RatpackServerSpec serverSpec) throws Exception { - RatpackTelemetry telemetry = - RatpackTelemetry.builder(testing.getOpenTelemetry()) + io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry telemetry = + io.opentelemetry.instrumentation.ratpack.v1_7.RatpackTelemetry.builder( + testing.getOpenTelemetry()) .setCapturedServerRequestHeaders( singletonList(AbstractHttpServerTest.TEST_REQUEST_HEADER)) .setCapturedServerResponseHeaders( From d53abb85e30afabe2c27df05bf65da958dfd0f6d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 13 Dec 2024 13:52:27 -0800 Subject: [PATCH 13/13] configureRegistry is only for server --- .../ratpack/v1_7/RatpackClientTelemetry.java | 7 -- .../ratpack/v1_7/RatpackServerTelemetry.java | 1 + .../client/InstrumentedHttpClientTest.groovy | 104 +++++++++--------- 3 files changed, 50 insertions(+), 62 deletions(-) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java index e8300fdd4cd7..e7c609d79520 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java @@ -7,12 +7,10 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryExecInitializer; import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryHttpClient; import ratpack.http.client.HttpClient; import ratpack.http.client.HttpResponse; import ratpack.http.client.RequestSpec; -import ratpack.registry.RegistrySpec; /** * Entrypoint for instrumenting Ratpack http client. @@ -54,9 +52,4 @@ public static RatpackClientTelemetryBuilder builder(OpenTelemetry openTelemetry) public HttpClient instrument(HttpClient httpClient) throws Exception { return httpClientInstrumenter.instrument(httpClient); } - - /** Configures the {@link RegistrySpec} with OpenTelemetry. */ - public void configureRegistry(RegistrySpec registry) { - registry.add(OpenTelemetryExecInitializer.INSTANCE); - } } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java index 988d3b140c4e..b4d56aa1b1ed 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java @@ -76,5 +76,6 @@ public ExecInitializer getExecInitializer() { public void configureRegistry(RegistrySpec registry) { registry.add(HandlerDecorator.prepend(serverHandler)); registry.add(OpenTelemetryExecInterceptor.INSTANCE); + registry.add(OpenTelemetryExecInitializer.INSTANCE); } } diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy index 943ddd84adec..bd4f7c1a57d4 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy +++ b/instrumentation/ratpack/ratpack-1.7/library/src/test/groovy/io/opentelemetry/instrumentation/ratpack/v1_7/client/InstrumentedHttpClientTest.groovy @@ -41,12 +41,12 @@ class InstrumentedHttpClientTest extends Specification { def spanExporter = InMemorySpanExporter.create() def tracerProvider = SdkTracerProvider.builder() - .addSpanProcessor(SimpleSpanProcessor.create(spanExporter)) - .build() + .addSpanProcessor(SimpleSpanProcessor.create(spanExporter)) + .build() def openTelemetry = OpenTelemetrySdk.builder() - .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) - .setTracerProvider(tracerProvider).build() + .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) + .setTracerProvider(tracerProvider).build() RatpackClientTelemetry telemetry = RatpackClientTelemetry.create(openTelemetry) RatpackServerTelemetry serverTelemetry = RatpackServerTelemetry.create(openTelemetry) @@ -59,10 +59,9 @@ class InstrumentedHttpClientTest extends Specification { expect: def otherApp = EmbeddedApp.of { spec -> spec.registry( - Guice.registry { bindings -> - serverTelemetry.configureRegistry(bindings) - telemetry.configureRegistry(bindings) - } + Guice.registry { bindings -> + serverTelemetry.configureRegistry(bindings) + } ) spec.handlers { it.get("bar") { ctx -> ctx.render("foo") } @@ -71,18 +70,17 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( - Guice.registry { bindings -> - serverTelemetry.configureRegistry(bindings) - telemetry.configureRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) - } + Guice.registry { bindings -> + serverTelemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) + } ) spec.handlers { chain -> chain.get("foo") { ctx -> HttpClient instrumentedHttpClient = ctx.get(HttpClient) instrumentedHttpClient.get(new URI("${otherApp.address}bar")) - .then { ctx.render("bar") } + .then { ctx.render("bar") } } } } @@ -133,11 +131,10 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( - Guice.registry { bindings -> - serverTelemetry.configureRegistry(bindings) - telemetry.configureRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) - } + Guice.registry { bindings -> + serverTelemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) + } ) spec.handlers { chain -> @@ -192,28 +189,27 @@ class InstrumentedHttpClientTest extends Specification { spec.handlers { it.get("foo") { ctx -> Promise.value("bar").defer(Duration.ofSeconds(1L)) - .then { ctx.render("bar") } + .then { ctx.render("bar") } } } } def app = EmbeddedApp.of { spec -> spec.registry( - Guice.registry { bindings -> - serverTelemetry.configureRegistry(bindings) - telemetry.configureRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrument( - HttpClient.of { s -> s.readTimeout(Duration.ofMillis(10)) }) - ) - } + Guice.registry { bindings -> + serverTelemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument( + HttpClient.of { s -> s.readTimeout(Duration.ofMillis(10)) }) + ) + } ) spec.handlers { chain -> chain.get("path-name") { ctx -> def instrumentedHttpClient = ctx.get(HttpClient) instrumentedHttpClient.get(new URI("${otherApp.address}foo")) - .onError { ctx.render("error") } - .then { ctx.render("hello") } + .onError { ctx.render("error") } + .then { ctx.render("hello") } } } } @@ -257,12 +253,11 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( - Guice.registry { bindings -> - serverTelemetry.configureRegistry(bindings) - telemetry.configureRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) - bindings.bindInstance(new BarService(latch, "${otherApp.address}foo", openTelemetry)) - }, + Guice.registry { bindings -> + serverTelemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) + bindings.bindInstance(new BarService(latch, "${otherApp.address}foo", openTelemetry)) + }, ) spec.handlers { chain -> chain.get("foo") { ctx -> ctx.render("bar") } @@ -291,12 +286,11 @@ class InstrumentedHttpClientTest extends Specification { def app = EmbeddedApp.of { spec -> spec.registry( - Guice.registry { bindings -> - serverTelemetry.configureRegistry(bindings) - telemetry.configureRegistry(bindings) - bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) - bindings.bindInstance(new BarForkService(latch, "${otherApp.address}foo", openTelemetry)) - }, + Guice.registry { bindings -> + serverTelemetry.configureRegistry(bindings) + bindings.bindInstance(HttpClient, telemetry.instrument(HttpClient.of(Action.noop()))) + bindings.bindInstance(new BarForkService(latch, "${otherApp.address}foo", openTelemetry)) + }, ) spec.handlers { chain -> chain.get("foo") { ctx -> ctx.render("bar") } @@ -330,19 +324,19 @@ class BarService implements Service { void onStart(StartEvent event) { def parentContext = Context.current() def span = tracer.spanBuilder("a-span") - .setParent(parentContext) - .startSpan() + .setParent(parentContext) + .startSpan() Context otelContext = parentContext.with(span) otelContext.makeCurrent().withCloseable { Execution.current().add(Context, otelContext) def httpClient = event.registry.get(HttpClient) httpClient.get(new URI(url)) - .flatMap { httpClient.get(new URI(url)) } - .then { - span.end() - latch.countDown() - } + .flatMap { httpClient.get(new URI(url)) } + .then { + span.end() + latch.countDown() + } } } } @@ -364,19 +358,19 @@ class BarForkService implements Service { Execution.fork().start { def parentContext = Context.current() def span = tracer.spanBuilder("a-span") - .setParent(parentContext) - .startSpan() + .setParent(parentContext) + .startSpan() Context otelContext = parentContext.with(span) otelContext.makeCurrent().withCloseable { Execution.current().add(Context, otelContext) def httpClient = event.registry.get(HttpClient) httpClient.get(new URI(url)) - .flatMap { httpClient.get(new URI(url)) } - .then { - span.end() - latch.countDown() - } + .flatMap { httpClient.get(new URI(url)) } + .then { + span.end() + latch.countDown() + } } } }