-
Notifications
You must be signed in to change notification settings - Fork 1k
Split ratpack into client and server #12853
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
b3d0926
Split ratpack into client and server
trask 2506476
Merge remote-tracking branch 'upstream/main' into split-ratpack
trask 7c8516b
Fix javadoc todo
trask 21fcc5b
fix naming
trask 528e8db
simplify
trask cd4d8cd
spotless
trask 829fd47
Merge remote-tracking branch 'upstream/main' into split-ratpack
trask de32399
remove reflection
trask 8290ca4
volatile
trask e90c6eb
static
trask 38448c5
remove unused
trask 9e65539
Merge remote-tracking branch 'upstream/main' into split-ratpack
trask 3e8e235
add tests for deprecated code
trask 192a5dc
fix
trask bf2df2c
fix
trask 44d3731
Merge remote-tracking branch 'upstream/main' into split-ratpack
trask d53abb8
configureRegistry is only for server
trask File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
62 changes: 62 additions & 0 deletions
62
...y/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetry.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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. | ||
| * | ||
| * <p>To apply OpenTelemetry instrumentation to a http client, wrap the {@link HttpClient} using | ||
| * {@link #instrument(HttpClient)}. | ||
| * | ||
| * <pre>{@code | ||
| * RatpackClientTelemetry telemetry = RatpackClientTelemetry.create(OpenTelemetrySdk.builder() | ||
| * ... | ||
| * .build()); | ||
| * HttpClient instrumentedHttpClient = telemetry.instrument(httpClient); | ||
| * }</pre> | ||
| */ | ||
| 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<RequestSpec, HttpResponse> 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); | ||
| } | ||
| } | ||
105 changes: 105 additions & 0 deletions
105
...ain/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackClientTelemetryBuilder.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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<RequestSpec, HttpResponse> clientBuilder; | ||
|
|
||
| RatpackClientTelemetryBuilder(OpenTelemetry openTelemetry) { | ||
| clientBuilder = | ||
| RatpackClientInstrumenterBuilderFactory.create(INSTRUMENTATION_NAME, openTelemetry); | ||
| } | ||
|
|
||
| @CanIgnoreReturnValue | ||
| public RatpackClientTelemetryBuilder addAttributeExtractor( | ||
| AttributesExtractor<? super RequestSpec, ? super HttpResponse> 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<String> 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<String> responseHeaders) { | ||
| clientBuilder.setCapturedResponseHeaders(responseHeaders); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Configures the instrumentation to recognize an alternative set of HTTP request methods. | ||
| * | ||
| * <p>By default, this instrumentation defines "known" methods as the ones listed in <a | ||
| * href="https://www.rfc-editor.org/rfc/rfc9110.html#name-methods">RFC9110</a> and the PATCH | ||
| * method defined in <a href="https://www.rfc-editor.org/rfc/rfc5789.html">RFC5789</a>. | ||
| * | ||
| * <p>Note: calling this method <b>overrides</b> 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<String> knownMethods) { | ||
| clientBuilder.setKnownMethods(knownMethods); | ||
| return this; | ||
| } | ||
|
|
||
| /** Sets custom client {@link SpanNameExtractor} via transform function. */ | ||
| @CanIgnoreReturnValue | ||
| public RatpackClientTelemetryBuilder setSpanNameExtractor( | ||
| Function< | ||
| SpanNameExtractor<? super RequestSpec>, | ||
| ? extends SpanNameExtractor<? super RequestSpec>> | ||
| 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()); | ||
| } | ||
| } |
80 changes: 80 additions & 0 deletions
80
...y/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetry.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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. | ||
| * | ||
| * <p>To apply OpenTelemetry instrumentation to a server, configure the {@link RegistrySpec} using | ||
| * {@link #configureRegistry(RegistrySpec)}. | ||
| * | ||
| * <pre>{@code | ||
| * RatpackServerTelemetry telemetry = RatpackServerTelemetry.create(OpenTelemetrySdk.builder() | ||
| * ... | ||
| * .build()); | ||
| * RatpackServer.start(server -> { | ||
| * server.registryOf(telemetry::configureRegistry); | ||
| * server.handlers(chain -> ...); | ||
| * }); | ||
| * }</pre> | ||
| */ | ||
| 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<Request, Response> 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); | ||
| } | ||
trask marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| } | ||
107 changes: 107 additions & 0 deletions
107
...ain/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackServerTelemetryBuilder.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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<Request, Response> 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<? super Request, ? super Response> 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<String> 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<String> responseHeaders) { | ||
| serverBuilder.setCapturedResponseHeaders(responseHeaders); | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Configures the instrumentation to recognize an alternative set of HTTP request methods. | ||
| * | ||
| * <p>By default, this instrumentation defines "known" methods as the ones listed in <a | ||
| * href="https://www.rfc-editor.org/rfc/rfc9110.html#name-methods">RFC9110</a> and the PATCH | ||
| * method defined in <a href="https://www.rfc-editor.org/rfc/rfc5789.html">RFC5789</a>. | ||
| * | ||
| * <p>Note: calling this method <b>overrides</b> 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<String> knownMethods) { | ||
| serverBuilder.setKnownMethods(knownMethods); | ||
| return this; | ||
| } | ||
|
|
||
| /** Sets custom server {@link SpanNameExtractor} via transform function. */ | ||
| @CanIgnoreReturnValue | ||
| public RatpackServerTelemetryBuilder setSpanNameExtractor( | ||
| Function<SpanNameExtractor<? super Request>, ? extends SpanNameExtractor<? super Request>> | ||
| 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()); | ||
| } | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.