From 9678009cc558b880d3d151744e3fb553dc661997 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:47:01 -0400 Subject: [PATCH 01/17] start --- .../helidon-4.2.0/javaagent/build.gradle.kts | 22 +++ .../helidon/HelidonInstrumentation.java | 43 +++++ .../helidon/HelidonInstrumentationModule.java | 27 +++ .../helidon/HelidonServerResponseMutator.java | 18 ++ .../helidon/HelidonSingletons.java | 34 ++++ .../helidon/ResponseCustomizingFilter.java | 27 +++ .../javahttpserver/JavaHttpServerTest.java | 25 +++ .../helidon/helidon-4.2.0/library/README.md | 63 +++++++ .../helidon-4.2.0/library/build.gradle.kts | 12 ++ .../helidon/HelidonAttributesGetter.java | 92 ++++++++++ .../helidon/HelidonRequestGetter.java | 46 +++++ .../helidon/HelidonTelemetry.java | 37 ++++ .../helidon/HelidonTelemetryBuilder.java | 118 +++++++++++++ .../helidon/OpenTelemetryFilter.java | 47 ++++++ .../helidon/internal/Experimental.java | 34 ++++ .../HelidonInstrumenterBuilderUtil.java | 43 +++++ .../helidon/AbstractHelidonTest.java | 159 ++++++++++++++++++ .../helidon/HelidonServerTest.java | 32 ++++ .../helidon-4.2.0/testing/.factorypath | 3 + .../helidon-4.2.0/testing/build.gradle.kts | 12 ++ .../helidon/AbstractHelidonTest.java | 159 ++++++++++++++++++ settings.gradle.kts | 4 + 22 files changed, 1057 insertions(+) create mode 100644 instrumentation/helidon/helidon-4.2.0/javaagent/build.gradle.kts create mode 100644 instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java create mode 100644 instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java create mode 100644 instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java create mode 100644 instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java create mode 100644 instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java create mode 100644 instrumentation/helidon/helidon-4.2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/README.md create mode 100644 instrumentation/helidon/helidon-4.2.0/library/build.gradle.kts create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java create mode 100644 instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java create mode 100644 instrumentation/helidon/helidon-4.2.0/testing/.factorypath create mode 100644 instrumentation/helidon/helidon-4.2.0/testing/build.gradle.kts create mode 100644 instrumentation/helidon/helidon-4.2.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/build.gradle.kts b/instrumentation/helidon/helidon-4.2.0/javaagent/build.gradle.kts new file mode 100644 index 000000000000..ad1afb9be85d --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/javaagent/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + id("otel.javaagent-instrumentation") +} + +muzzle { + pass { + group.set("io.helidon.webserver") + module.set("helidon-webserver") + versions.set("[4.2.0,)") + assertInverse.set(true) + } +} + +otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_21) +} + +dependencies { + library("io.helidon.webserver:helidon-webserver:4.2.0") + implementation(project(":instrumentation:helidon:helidon-4.2.0:library")) + testImplementation(project(":instrumentation:helidon:helidon-4.2.0:testing")) +} diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java new file mode 100644 index 000000000000..81c8bb42ef95 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java @@ -0,0 +1,43 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.helidon; + +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.extendsClass; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; +import static net.bytebuddy.matcher.ElementMatchers.isPublic; +import static net.bytebuddy.matcher.ElementMatchers.isStatic; +import static net.bytebuddy.matcher.ElementMatchers.named; + +import io.helidon.webserver.http.HttpRouting; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.matcher.ElementMatcher; + +public class HelidonInstrumentation implements TypeInstrumentation { + + @Override + public ElementMatcher typeMatcher() { + return extendsClass(named("io.helidon.webserver.http.HttpRouting")); + } + + @Override + public void transform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + isMethod().and(isPublic()).and(isStatic()).and(named("builder")), + HelidonInstrumentation.class.getName() + "$BuildAdvice"); + } + + @SuppressWarnings("unused") + public static class BuildAdvice { + + @Advice.OnMethodExit(suppress = Throwable.class) + public static void onExit(@Advice.Return HttpRouting.Builder httpContext) { + HelidonSingletons.FILTERS.forEach(httpContext::addFeature); + } + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java new file mode 100644 index 000000000000..ac0b9e332424 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java @@ -0,0 +1,27 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.helidon; + +import static java.util.Collections.singletonList; + +import java.util.List; + +import com.google.auto.service.AutoService; + +import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; + +@AutoService(InstrumentationModule.class) +public class HelidonInstrumentationModule extends InstrumentationModule { + public HelidonInstrumentationModule() { + super("helidon"); + } + + @Override + public List typeInstrumentations() { + return singletonList(new HelidonInstrumentation()); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java new file mode 100644 index 000000000000..6fdf1ab025e0 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.helidon; + +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseMutator; + +enum HelidonServerResponseMutator implements HttpServerResponseMutator { + INSTANCE; + + @Override + public void appendHeader(ServerResponse res, String name, String value) { + res.header(name, value); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java new file mode 100644 index 000000000000..5daf602f3506 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java @@ -0,0 +1,34 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.helidon; + +import java.util.Arrays; +import java.util.List; + +import io.helidon.webserver.http.HttpFeature; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.helidon.HelidonTelemetry; +import io.opentelemetry.instrumentation.helidon.internal.HelidonInstrumenterBuilderUtil; +import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; + +public final class HelidonSingletons { + + public static final List FILTERS; + + static { + var config = AgentCommonConfig.get(); + + var serverBuilder = HelidonTelemetry.builder(GlobalOpenTelemetry.get()); + HelidonInstrumenterBuilderUtil.getServerBuilderExtractor() + .apply(serverBuilder) + .configure(config); + var serverTelemetry = serverBuilder.build(); + + FILTERS = Arrays.asList(serverTelemetry, r -> r.addFilter(new ResponseCustomizingFilter())); + } + + private HelidonSingletons() {} +} diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java new file mode 100644 index 000000000000..74bc9607a5c7 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java @@ -0,0 +1,27 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.helidon; + +import io.helidon.webserver.http.Filter; +import io.helidon.webserver.http.FilterChain; +import io.helidon.webserver.http.RoutingRequest; +import io.helidon.webserver.http.RoutingResponse; +import io.opentelemetry.context.Context; +import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder; + +final class ResponseCustomizingFilter implements Filter { + + ResponseCustomizingFilter() {} + + @Override + public void filter(FilterChain chain, RoutingRequest req, RoutingResponse res) { + + Context context = Context.current(); + HttpServerResponseCustomizerHolder.getCustomizer() + .customize(context, res, HelidonServerResponseMutator.INSTANCE); + chain.proceed(); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java b/instrumentation/helidon/helidon-4.2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java new file mode 100644 index 000000000000..445b4d0bc07a --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.javahttpserver; + +import io.opentelemetry.instrumentation.javahttpserver.AbstractJavaHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.junit.jupiter.api.extension.RegisterExtension; + +class JavaHttpServerTest extends AbstractJavaHttpServerTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); + + @Override + protected void configure(HttpServerTestOptions options) { + super.configure(options); + + options.setHasResponseCustomizer(serverEndpoint -> true); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/README.md b/instrumentation/helidon/helidon-4.2.0/library/README.md new file mode 100644 index 000000000000..c4d6d9382dc8 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/README.md @@ -0,0 +1,63 @@ +# Library Instrumentation for Java HTTP Server + +Provides OpenTelemetry instrumentation for [Java HTTP Server](https://docs.oracle.com/en/java/javase/21/docs/api/jdk.httpserver/module-summary.html). + +## Quickstart + +### Add these dependencies to your project + +Replace `OPENTELEMETRY_VERSION` with the [latest +release](https://search.maven.org/search?q=g:io.opentelemetry.instrumentation%20AND%20a:opentelemetry-java-http-server). + +For Maven, add to your `pom.xml` dependencies: + +```xml + + + io.opentelemetry.instrumentation + opentelemetry-java-http-server + OPENTELEMETRY_VERSION + + +``` + +For Gradle, add to your dependencies: + +```groovy +implementation("io.opentelemetry.instrumentation:opentelemetry-java-http-server:OPENTELEMETRY_VERSION") +``` + +### Usage + +The instrumentation library contains a `Filter` wrapper that provides OpenTelemetry-based spans +and context propagation. + +```java + +import java.io.IOException; +import java.net.InetSocketAddress; + +import com.sun.net.httpserver.HttpContext; +import com.sun.net.httpserver.HttpServer; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.OpenTelemetrySdk; + +public class Application { + + static void main(String args) throws IOException { + + final HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); + final HttpContext context = + server.createContext( + "/", + ctx -> { + // http logic + }); + + OpenTelemetry openTelemetry = //... + + JavaHttpServerTelemetry.create(openTelemetry).configure(context); + } +} +``` diff --git a/instrumentation/helidon/helidon-4.2.0/library/build.gradle.kts b/instrumentation/helidon/helidon-4.2.0/library/build.gradle.kts new file mode 100644 index 000000000000..6bd1ccf84502 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + id("otel.library-instrumentation") +} + +otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_21) +} + +dependencies { + implementation("io.helidon.webserver:helidon-webserver:4.2.0") + testImplementation(project(":instrumentation:helidon:helidon-4.2.0:testing")) +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java new file mode 100644 index 000000000000..0e50473b0e51 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java @@ -0,0 +1,92 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import java.net.InetSocketAddress; +import java.util.List; +import java.util.Objects; + +import javax.annotation.Nullable; + +import io.helidon.http.HeaderNames; +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; + +enum HelidonAttributesGetter implements HttpServerAttributesGetter { + INSTANCE; + + @Override + public String getHttpRequestMethod(ServerRequest exchange) { + return exchange.prologue().method().text(); + } + + @Override + public String getUrlScheme(ServerRequest exchange) { + return exchange.requestedUri().scheme(); + } + + @Override + public String getUrlPath(ServerRequest exchange) { + return exchange.path().rawPath(); + } + + @Nullable + @Override + public String getUrlQuery(ServerRequest exchange) { + return exchange.query().rawValue(); + } + + @Override + public List getHttpRequestHeader(ServerRequest req, String name) { + return req.headers().values(HeaderNames.create(name)); + } + + @Nullable + @Override + public Integer getHttpResponseStatusCode( + ServerRequest req, @Nullable ServerResponse res, @Nullable Throwable error) { + + return Objects.requireNonNull(res).status().code(); + } + + @Override + public List getHttpResponseHeader( + ServerRequest req, @Nullable ServerResponse res, String name) { + return Objects.requireNonNull(res).headers().values(HeaderNames.create(name)); + } + + @Nullable + @Override + public String getHttpRoute(ServerRequest req) { + // TODO Wait for helidon + return null; + } + + @Override + public String getNetworkProtocolName(ServerRequest req, @Nullable ServerResponse res) { + return req.prologue().protocol(); + } + + @Override + public String getNetworkProtocolVersion(ServerRequest req, @Nullable ServerResponse res) { + return req.prologue().protocolVersion(); + } + + @Override + public InetSocketAddress getNetworkPeerInetSocketAddress( + ServerRequest req, @Nullable ServerResponse res) { + var address = req.remotePeer().address(); + return address instanceof InetSocketAddress s ? s : null; + } + + @Override + public InetSocketAddress getNetworkLocalInetSocketAddress( + ServerRequest req, @Nullable ServerResponse res) { + var address = req.localPeer().address(); + return address instanceof InetSocketAddress s ? s : null; + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java new file mode 100644 index 000000000000..d62e02ba2811 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java @@ -0,0 +1,46 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import static java.util.Collections.emptyIterator; +import static java.util.Collections.emptyList; + +import io.helidon.http.Header; +import io.helidon.http.HeaderNames; +import io.helidon.webserver.http.ServerRequest; +import io.opentelemetry.context.propagation.internal.ExtendedTextMapGetter; +import java.util.Iterator; +import javax.annotation.Nullable; + +enum HelidonRequestGetter implements ExtendedTextMapGetter { + INSTANCE; + + @Override + public Iterable keys(@Nullable ServerRequest exchange) { + if (exchange == null) { + return emptyList(); + } + return () -> exchange.headers().stream().map(Header::name).iterator(); + } + + @Override + public String get(@Nullable ServerRequest carrier, String key) { + if (carrier == null) { + return ""; + } + + return carrier.headers().first(HeaderNames.create(key)).orElse(""); + } + + @Override + public Iterator getAll(@Nullable ServerRequest carrier, String key) { + if (carrier == null) { + return emptyIterator(); + } + + return carrier.headers().values(HeaderNames.create(key)).iterator(); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java new file mode 100644 index 000000000000..36df3bb21a5d --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java @@ -0,0 +1,37 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import io.helidon.webserver.http.HttpFeature; +import io.helidon.webserver.http.HttpRouting; +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; + +/** Entrypoint for instrumenting Java HTTP Server services. */ +public final class HelidonTelemetry implements HttpFeature { + + /** Returns a new {@link HelidonTelemetry} configured with the given {@link OpenTelemetry}. */ + public static HelidonTelemetry create(OpenTelemetry openTelemetry) { + return builder(openTelemetry).build(); + } + + public static HelidonTelemetryBuilder builder(OpenTelemetry openTelemetry) { + return new HelidonTelemetryBuilder(openTelemetry); + } + + private final Instrumenter instrumenter; + + HelidonTelemetry(Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + + @Override + public void setup(HttpRouting.Builder routing) { + routing.addFilter(new OpenTelemetryFilter(instrumenter)); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java new file mode 100644 index 000000000000..387a575c4f81 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java @@ -0,0 +1,118 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +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.instrumenter.SpanStatusExtractor; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.helidon.internal.Experimental; +import io.opentelemetry.instrumentation.helidon.internal.HelidonInstrumenterBuilderUtil; +import java.util.Collection; +import java.util.function.Function; +import java.util.function.UnaryOperator; + +public final class HelidonTelemetryBuilder { + + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.helidon-4.2.0"; + + private final DefaultHttpServerInstrumenterBuilder builder; + + static { + HelidonInstrumenterBuilderUtil.setServerBuilderExtractor(builder -> builder.builder); + Experimental.internalSetEmitExperimentalTelemetry( + (builder, emit) -> builder.builder.setEmitExperimentalHttpServerTelemetry(emit)); + } + + HelidonTelemetryBuilder(OpenTelemetry openTelemetry) { + builder = + DefaultHttpServerInstrumenterBuilder.create( + INSTRUMENTATION_NAME, + openTelemetry, + HelidonAttributesGetter.INSTANCE, + HelidonRequestGetter.INSTANCE); + } + + /** Sets the status extractor for server spans. */ + @CanIgnoreReturnValue + public HelidonTelemetryBuilder setStatusExtractor( + Function< + SpanStatusExtractor, + SpanStatusExtractor> + statusExtractor) { + builder.setStatusExtractor(statusExtractor); + return this; + } + + /** + * Adds an extra {@link AttributesExtractor} to invoke to set attributes to instrumented items. + * The {@link AttributesExtractor} will be executed after all default extractors. + */ + @CanIgnoreReturnValue + public HelidonTelemetryBuilder addAttributesExtractor( + AttributesExtractor attributesExtractor) { + builder.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 HelidonTelemetryBuilder setCapturedRequestHeaders(Collection requestHeaders) { + builder.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 HelidonTelemetryBuilder setCapturedResponseHeaders(Collection responseHeaders) { + builder.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(Collection) + */ + @CanIgnoreReturnValue + public HelidonTelemetryBuilder setKnownMethods(Collection knownMethods) { + builder.setKnownMethods(knownMethods); + return this; + } + + /** Sets custom server {@link SpanNameExtractor} via transform function. */ + @CanIgnoreReturnValue + public HelidonTelemetryBuilder setSpanNameExtractor( + UnaryOperator> serverSpanNameExtractor) { + builder.setSpanNameExtractor(serverSpanNameExtractor); + return this; + } + + public HelidonTelemetry build() { + return new HelidonTelemetry(builder.build()); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java new file mode 100644 index 000000000000..ad23fa2d7921 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java @@ -0,0 +1,47 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import io.helidon.webserver.http.Filter; +import io.helidon.webserver.http.FilterChain; +import io.helidon.webserver.http.RoutingRequest; +import io.helidon.webserver.http.RoutingResponse; +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; + +final class OpenTelemetryFilter implements Filter { + + private final Instrumenter instrumenter; + + OpenTelemetryFilter(Instrumenter instrumenter) { + this.instrumenter = instrumenter; + } + + @Override + public void filter(FilterChain chain, RoutingRequest req, RoutingResponse res) { + + Context parentContext = Context.current(); + if (!instrumenter.shouldStart(parentContext, req)) { + chain.proceed(); + return; + } + + Context context = instrumenter.start(parentContext, req); + + Throwable error = null; + try (Scope ignored = context.makeCurrent()) { + chain.proceed(); + } catch (Throwable t) { + error = t; + throw t; + } finally { + instrumenter.end(context, req, res, error); + } + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java new file mode 100644 index 000000000000..8a296fa4c691 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java @@ -0,0 +1,34 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon.internal; + +import io.opentelemetry.instrumentation.helidon.HelidonTelemetryBuilder; +import java.util.function.BiConsumer; +import javax.annotation.Nullable; + +/** + * 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. + */ +public final class Experimental { + @Nullable + private static volatile BiConsumer setEmitExperimentalTelemetry; + + public static void setEmitExperimentalTelemetry( + HelidonTelemetryBuilder builder, boolean emitExperimentalTelemetry) { + if (setEmitExperimentalTelemetry != null) { + setEmitExperimentalTelemetry.accept(builder, emitExperimentalTelemetry); + } + } + + public static void internalSetEmitExperimentalTelemetry( + BiConsumer setEmitExperimentalTelemetry) { + Experimental.setEmitExperimentalTelemetry = setEmitExperimentalTelemetry; + } + + private Experimental() {} +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java new file mode 100644 index 000000000000..2da0feb2de21 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java @@ -0,0 +1,43 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon.internal; + +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; +import io.opentelemetry.instrumentation.helidon.HelidonTelemetryBuilder; +import java.util.function.Function; +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. + */ +public class HelidonInstrumenterBuilderUtil { + private HelidonInstrumenterBuilderUtil() {} + + @Nullable + private static Function< + HelidonTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + serverBuilderExtractor; + + @Nullable + public static Function< + HelidonTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + getServerBuilderExtractor() { + return serverBuilderExtractor; + } + + public static void setServerBuilderExtractor( + Function< + HelidonTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + serverBuilderExtractor) { + HelidonInstrumenterBuilderUtil.serverBuilderExtractor = serverBuilderExtractor; + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java new file mode 100644 index 000000000000..6bb946190687 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java @@ -0,0 +1,159 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.helidon.http.HeaderNames; +import io.helidon.webserver.WebServer; +import io.helidon.webserver.http.HttpRouting; +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.testing.internal.armeria.common.QueryParams; +import java.util.Collections; +import java.util.Map; + +public abstract class AbstractHelidonTest extends AbstractHttpServerTest { + + protected void configureContexts(HttpRouting.Builder routing) {} + + static void sendResponse(ServerResponse exchange, int status, String response) { + sendResponse(exchange, status, Collections.emptyMap(), response); + } + + static void sendResponse(ServerResponse exchange, int status, Map headers) { + sendResponse(exchange, status, headers, ""); + } + + static void sendResponse( + ServerResponse exchange, int status, Map headers, String response) { + + exchange.header("Content-Type", "text/plain"); + headers.forEach(exchange::header); + exchange.send(response); + } + + private static String getUrlQuery(ServerRequest exchange) { + return exchange.query().rawValue(); + } + + @Override + protected WebServer setupServer() { + var server = WebServer.builder().port(port); + var routing = HttpRouting.builder(); + + routing.get( + SUCCESS.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", () -> sendResponse(res, SUCCESS.getStatus(), SUCCESS.getBody()))); + + routing.get( + REDIRECT.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> + sendResponse( + res, + REDIRECT.getStatus(), + Collections.singletonMap("Location", REDIRECT.getBody())))); + + routing.get( + ERROR.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", () -> sendResponse(res, ERROR.getStatus(), ERROR.getBody()))); + + routing.get( + QUERY_PARAM.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> + sendResponse( + res, + QUERY_PARAM.getStatus(), + "some=" + QueryParams.fromQueryString(getUrlQuery(req)).get("some")))); + + routing.get( + INDEXED_CHILD.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> { + INDEXED_CHILD.collectSpanAttributes( + name -> QueryParams.fromQueryString(getUrlQuery(req)).get(name)); + + sendResponse(res, INDEXED_CHILD.getStatus(), INDEXED_CHILD.getBody()); + })); + + routing.get( + "/captureHeaders", + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> + sendResponse( + res, + CAPTURE_HEADERS.getStatus(), + Collections.singletonMap( + "X-Test-Response", + req.headers().get(HeaderNames.create("X-Test-Request")).get()), + CAPTURE_HEADERS.getBody()))); + + routing.get( + EXCEPTION.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> { + sendResponse(res, EXCEPTION.getStatus(), EXCEPTION.getBody()); + throw new IllegalStateException(EXCEPTION.getBody()); + })); + + routing.get("/", (req, res) -> sendResponse(res, NOT_FOUND.getStatus(), NOT_FOUND.getBody())); + + configureContexts(routing); + + return server.routing(routing).build().start(); + } + + @Override + protected void stopServer(WebServer server) { + server.stop(); + } + + @Override + protected void configure(HttpServerTestOptions options) { + // filter isn't called for non-standard method + options.disableTestNonStandardHttpMethod(); + options.setTestHttpPipelining(true); + options.setExpectedHttpRoute( + (endpoint, method) -> { + if (NOT_FOUND.equals(endpoint)) { + return "/"; + } + return expectedHttpRoute(endpoint, method); + }); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java new file mode 100644 index 000000000000..da7ef696d3f8 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java @@ -0,0 +1,32 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import io.helidon.webserver.http.HttpRouting; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import java.util.Collections; +import org.junit.jupiter.api.extension.RegisterExtension; + +class HelidonServerTest extends AbstractHelidonTest { + + @RegisterExtension + static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forLibrary(); + + @Override + protected void configureContexts(HttpRouting.Builder routing) { + + var feature = + HelidonTelemetry.builder(testing.getOpenTelemetry()) + .setCapturedRequestHeaders( + Collections.singletonList(AbstractHttpServerTest.TEST_REQUEST_HEADER)) + .setCapturedResponseHeaders( + Collections.singletonList(AbstractHttpServerTest.TEST_RESPONSE_HEADER)) + .build(); + routing.addFeature(feature); + } +} diff --git a/instrumentation/helidon/helidon-4.2.0/testing/.factorypath b/instrumentation/helidon/helidon-4.2.0/testing/.factorypath new file mode 100644 index 000000000000..82dd47831ab3 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/testing/.factorypath @@ -0,0 +1,3 @@ + + + diff --git a/instrumentation/helidon/helidon-4.2.0/testing/build.gradle.kts b/instrumentation/helidon/helidon-4.2.0/testing/build.gradle.kts new file mode 100644 index 000000000000..bd263434123c --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/testing/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + id("otel.java-conventions") +} + +otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_21) +} + +dependencies { + api(project(":testing-common")) + implementation("io.helidon.webserver:helidon-webserver:4.2.0") +} diff --git a/instrumentation/helidon/helidon-4.2.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon/helidon-4.2.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java new file mode 100644 index 000000000000..6bb946190687 --- /dev/null +++ b/instrumentation/helidon/helidon-4.2.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java @@ -0,0 +1,159 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.helidon; + +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; +import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; + +import io.helidon.http.HeaderNames; +import io.helidon.webserver.WebServer; +import io.helidon.webserver.http.HttpRouting; +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; +import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import io.opentelemetry.testing.internal.armeria.common.QueryParams; +import java.util.Collections; +import java.util.Map; + +public abstract class AbstractHelidonTest extends AbstractHttpServerTest { + + protected void configureContexts(HttpRouting.Builder routing) {} + + static void sendResponse(ServerResponse exchange, int status, String response) { + sendResponse(exchange, status, Collections.emptyMap(), response); + } + + static void sendResponse(ServerResponse exchange, int status, Map headers) { + sendResponse(exchange, status, headers, ""); + } + + static void sendResponse( + ServerResponse exchange, int status, Map headers, String response) { + + exchange.header("Content-Type", "text/plain"); + headers.forEach(exchange::header); + exchange.send(response); + } + + private static String getUrlQuery(ServerRequest exchange) { + return exchange.query().rawValue(); + } + + @Override + protected WebServer setupServer() { + var server = WebServer.builder().port(port); + var routing = HttpRouting.builder(); + + routing.get( + SUCCESS.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", () -> sendResponse(res, SUCCESS.getStatus(), SUCCESS.getBody()))); + + routing.get( + REDIRECT.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> + sendResponse( + res, + REDIRECT.getStatus(), + Collections.singletonMap("Location", REDIRECT.getBody())))); + + routing.get( + ERROR.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", () -> sendResponse(res, ERROR.getStatus(), ERROR.getBody()))); + + routing.get( + QUERY_PARAM.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> + sendResponse( + res, + QUERY_PARAM.getStatus(), + "some=" + QueryParams.fromQueryString(getUrlQuery(req)).get("some")))); + + routing.get( + INDEXED_CHILD.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> { + INDEXED_CHILD.collectSpanAttributes( + name -> QueryParams.fromQueryString(getUrlQuery(req)).get(name)); + + sendResponse(res, INDEXED_CHILD.getStatus(), INDEXED_CHILD.getBody()); + })); + + routing.get( + "/captureHeaders", + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> + sendResponse( + res, + CAPTURE_HEADERS.getStatus(), + Collections.singletonMap( + "X-Test-Response", + req.headers().get(HeaderNames.create("X-Test-Request")).get()), + CAPTURE_HEADERS.getBody()))); + + routing.get( + EXCEPTION.getPath(), + (req, res) -> + testing() + .runWithSpan( + "controller", + () -> { + sendResponse(res, EXCEPTION.getStatus(), EXCEPTION.getBody()); + throw new IllegalStateException(EXCEPTION.getBody()); + })); + + routing.get("/", (req, res) -> sendResponse(res, NOT_FOUND.getStatus(), NOT_FOUND.getBody())); + + configureContexts(routing); + + return server.routing(routing).build().start(); + } + + @Override + protected void stopServer(WebServer server) { + server.stop(); + } + + @Override + protected void configure(HttpServerTestOptions options) { + // filter isn't called for non-standard method + options.disableTestNonStandardHttpMethod(); + options.setTestHttpPipelining(true); + options.setExpectedHttpRoute( + (endpoint, method) -> { + if (NOT_FOUND.equals(endpoint)) { + return "/"; + } + return expectedHttpRoute(endpoint, method); + }); + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 017d01a06d54..0dc71f1d4cbe 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -248,6 +248,10 @@ include(":instrumentation:grpc-1.6:testing") include(":instrumentation:guava-10.0:javaagent") include(":instrumentation:guava-10.0:library") include(":instrumentation:gwt-2.0:javaagent") +include(":instrumentation:helidon:helidon-4.2.0:javaagent") +include(":instrumentation:helidon:helidon-4.2.0:library") +include(":instrumentation:helidon:helidon-4.2.0:testing") +include(":instrumentation:ktor:ktor-3.0:library") include(":instrumentation:hibernate:hibernate-3.3:javaagent") include(":instrumentation:hibernate:hibernate-4.0:javaagent") include(":instrumentation:hibernate:hibernate-6.0:javaagent") From 6ec80d0139b9eb295ad12153e64bf2ba7a0c9afc Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Thu, 24 Apr 2025 12:29:53 -0400 Subject: [PATCH 02/17] use matching --- .../helidon/helidon-4.2.0/testing/.factorypath | 3 --- .../javaagent/build.gradle.kts | 8 ++++---- .../instrumentation/helidon/HelidonInstrumentation.java | 0 .../helidon/HelidonInstrumentationModule.java | 0 .../helidon/HelidonServerResponseMutator.java | 0 .../instrumentation/helidon/HelidonSingletons.java | 0 .../helidon/ResponseCustomizingFilter.java | 0 .../javahttpserver/JavaHttpServerTest.java | 0 .../{helidon-4.2.0 => helidon-4.3.0}/library/README.md | 0 .../library/build.gradle.kts | 4 ++-- .../instrumentation/helidon/HelidonAttributesGetter.java | 4 ++-- .../instrumentation/helidon/HelidonRequestGetter.java | 0 .../instrumentation/helidon/HelidonTelemetry.java | 0 .../instrumentation/helidon/HelidonTelemetryBuilder.java | 2 +- .../instrumentation/helidon/OpenTelemetryFilter.java | 0 .../instrumentation/helidon/internal/Experimental.java | 0 .../helidon/internal/HelidonInstrumenterBuilderUtil.java | 0 .../instrumentation/helidon/AbstractHelidonTest.java | 0 .../instrumentation/helidon/HelidonServerTest.java | 0 .../testing/build.gradle.kts | 2 +- .../instrumentation/helidon/AbstractHelidonTest.java | 0 settings.gradle.kts | 6 +++--- 22 files changed, 13 insertions(+), 16 deletions(-) delete mode 100644 instrumentation/helidon/helidon-4.2.0/testing/.factorypath rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/javaagent/build.gradle.kts (67%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/README.md (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/build.gradle.kts (71%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java (98%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java (99%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java (100%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/testing/build.gradle.kts (71%) rename instrumentation/helidon/{helidon-4.2.0 => helidon-4.3.0}/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java (100%) diff --git a/instrumentation/helidon/helidon-4.2.0/testing/.factorypath b/instrumentation/helidon/helidon-4.2.0/testing/.factorypath deleted file mode 100644 index 82dd47831ab3..000000000000 --- a/instrumentation/helidon/helidon-4.2.0/testing/.factorypath +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts similarity index 67% rename from instrumentation/helidon/helidon-4.2.0/javaagent/build.gradle.kts rename to instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts index ad1afb9be85d..2db16406e5ad 100644 --- a/instrumentation/helidon/helidon-4.2.0/javaagent/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts @@ -6,7 +6,7 @@ muzzle { pass { group.set("io.helidon.webserver") module.set("helidon-webserver") - versions.set("[4.2.0,)") + versions.set("[4.3.0,)") assertInverse.set(true) } } @@ -16,7 +16,7 @@ otelJava { } dependencies { - library("io.helidon.webserver:helidon-webserver:4.2.0") - implementation(project(":instrumentation:helidon:helidon-4.2.0:library")) - testImplementation(project(":instrumentation:helidon:helidon-4.2.0:testing")) + library("io.helidon.webserver:helidon-webserver:4.3.0") + implementation(project(":instrumentation:helidon:helidon-4.3.0:library")) + testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java diff --git a/instrumentation/helidon/helidon-4.2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java diff --git a/instrumentation/helidon/helidon-4.2.0/library/README.md b/instrumentation/helidon/helidon-4.3.0/library/README.md similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/README.md rename to instrumentation/helidon/helidon-4.3.0/library/README.md diff --git a/instrumentation/helidon/helidon-4.2.0/library/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts similarity index 71% rename from instrumentation/helidon/helidon-4.2.0/library/build.gradle.kts rename to instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts index 6bd1ccf84502..e013a58e5175 100644 --- a/instrumentation/helidon/helidon-4.2.0/library/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts @@ -7,6 +7,6 @@ otelJava { } dependencies { - implementation("io.helidon.webserver:helidon-webserver:4.2.0") - testImplementation(project(":instrumentation:helidon:helidon-4.2.0:testing")) + implementation("io.helidon.webserver:helidon-webserver:4.3.0") + testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java similarity index 98% rename from instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java rename to instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java index 0e50473b0e51..667f68f93cd8 100644 --- a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java @@ -62,8 +62,8 @@ public List getHttpResponseHeader( @Nullable @Override public String getHttpRoute(ServerRequest req) { - // TODO Wait for helidon - return null; + + return req.matchingPattern().orElse(null); } @Override diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java rename to instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java rename to instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java similarity index 99% rename from instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java rename to instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java index 387a575c4f81..f314e4de6dde 100644 --- a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java @@ -22,7 +22,7 @@ public final class HelidonTelemetryBuilder { - private static final String INSTRUMENTATION_NAME = "io.opentelemetry.helidon-4.2.0"; + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.helidon-4.3.0"; private final DefaultHttpServerInstrumenterBuilder builder; diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java rename to instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java rename to instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java rename to instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java rename to instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java diff --git a/instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java rename to instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java diff --git a/instrumentation/helidon/helidon-4.2.0/testing/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts similarity index 71% rename from instrumentation/helidon/helidon-4.2.0/testing/build.gradle.kts rename to instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts index bd263434123c..56c8d2889546 100644 --- a/instrumentation/helidon/helidon-4.2.0/testing/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts @@ -8,5 +8,5 @@ otelJava { dependencies { api(project(":testing-common")) - implementation("io.helidon.webserver:helidon-webserver:4.2.0") + implementation("io.helidon.webserver:helidon-webserver:4.3.0") } diff --git a/instrumentation/helidon/helidon-4.2.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java similarity index 100% rename from instrumentation/helidon/helidon-4.2.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java rename to instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java diff --git a/settings.gradle.kts b/settings.gradle.kts index 0dc71f1d4cbe..16caef288e07 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -248,9 +248,9 @@ include(":instrumentation:grpc-1.6:testing") include(":instrumentation:guava-10.0:javaagent") include(":instrumentation:guava-10.0:library") include(":instrumentation:gwt-2.0:javaagent") -include(":instrumentation:helidon:helidon-4.2.0:javaagent") -include(":instrumentation:helidon:helidon-4.2.0:library") -include(":instrumentation:helidon:helidon-4.2.0:testing") +include(":instrumentation:helidon:helidon-4.3.0:javaagent") +include(":instrumentation:helidon:helidon-4.3.0:library") +include(":instrumentation:helidon:helidon-4.3.0:testing") include(":instrumentation:ktor:ktor-3.0:library") include(":instrumentation:hibernate:hibernate-3.3:javaagent") include(":instrumentation:hibernate:hibernate-4.0:javaagent") From 14e272513b312f3a25fa418391511ae1f7b13e2d Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Thu, 24 Apr 2025 16:47:53 -0400 Subject: [PATCH 03/17] update route --- .../helidon/HelidonAttributesGetter.java | 12 +++++------- .../instrumentation/helidon/OpenTelemetryFilter.java | 7 +++++++ .../instrumentation/helidon/AbstractHelidonTest.java | 3 ++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java index 667f68f93cd8..bac773272349 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java @@ -5,16 +5,14 @@ package io.opentelemetry.instrumentation.helidon; -import java.net.InetSocketAddress; -import java.util.List; -import java.util.Objects; - -import javax.annotation.Nullable; - import io.helidon.http.HeaderNames; import io.helidon.webserver.http.ServerRequest; import io.helidon.webserver.http.ServerResponse; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; +import java.net.InetSocketAddress; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; enum HelidonAttributesGetter implements HttpServerAttributesGetter { INSTANCE; @@ -63,7 +61,7 @@ public List getHttpResponseHeader( @Override public String getHttpRoute(ServerRequest req) { - return req.matchingPattern().orElse(null); + return null; } @Override diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java index ad23fa2d7921..1e4e2c45c1fd 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java @@ -14,6 +14,8 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; final class OpenTelemetryFilter implements Filter { @@ -41,6 +43,11 @@ public void filter(FilterChain chain, RoutingRequest req, RoutingResponse res) { error = t; throw t; } finally { + + HttpServerRoute.update( + context, + HttpServerRouteSource.CONTROLLER, + res.status().code() == 404 ? "/" : req.matchingPattern().orElse(null)); instrumenter.end(context, req, res, error); } } diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java index 6bb946190687..74b728338045 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java @@ -42,7 +42,7 @@ static void sendResponse( exchange.header("Content-Type", "text/plain"); headers.forEach(exchange::header); - exchange.send(response); + exchange.status(status).send(response); } private static String getUrlQuery(ServerRequest exchange) { @@ -147,6 +147,7 @@ protected void stopServer(WebServer server) { protected void configure(HttpServerTestOptions options) { // filter isn't called for non-standard method options.disableTestNonStandardHttpMethod(); + options.setTestException(false); options.setTestHttpPipelining(true); options.setExpectedHttpRoute( (endpoint, method) -> { From 87963ba49ddb8e376e3707febc463a0d6c1c175c Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Fri, 25 Apr 2025 20:51:04 -0400 Subject: [PATCH 04/17] update docs --- .../JavaHttpServerTest.java | 2 +- .../helidon/helidon-4.3.0/library/README.md | 38 ++++++++----------- 2 files changed, 16 insertions(+), 24 deletions(-) rename instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/{javahttpserver => helidon}/JavaHttpServerTest.java (92%) diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/JavaHttpServerTest.java similarity index 92% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/JavaHttpServerTest.java index 445b4d0bc07a..cc5a7ce2d5e0 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerTest.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/JavaHttpServerTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.javahttpserver; +package io.opentelemetry.javaagent.instrumentation.helidon; import io.opentelemetry.instrumentation.javahttpserver.AbstractJavaHttpServerTest; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; diff --git a/instrumentation/helidon/helidon-4.3.0/library/README.md b/instrumentation/helidon/helidon-4.3.0/library/README.md index c4d6d9382dc8..52da86b8e6ac 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/README.md +++ b/instrumentation/helidon/helidon-4.3.0/library/README.md @@ -1,13 +1,13 @@ -# Library Instrumentation for Java HTTP Server +# Library Instrumentation for Helidon -Provides OpenTelemetry instrumentation for [Java HTTP Server](https://docs.oracle.com/en/java/javase/21/docs/api/jdk.httpserver/module-summary.html). +Provides OpenTelemetry instrumentation for [Helidon](https://helidon.io/). ## Quickstart ### Add these dependencies to your project Replace `OPENTELEMETRY_VERSION` with the [latest -release](https://search.maven.org/search?q=g:io.opentelemetry.instrumentation%20AND%20a:opentelemetry-java-http-server). +release](https://search.maven.org/search?q=g:io.opentelemetry.instrumentation%20AND%20a:opentelemetry-helidon-4.3.0). For Maven, add to your `pom.xml` dependencies: @@ -15,7 +15,7 @@ For Maven, add to your `pom.xml` dependencies: io.opentelemetry.instrumentation - opentelemetry-java-http-server + opentelemetry-helidon-4.3.0 OPENTELEMETRY_VERSION @@ -24,40 +24,32 @@ For Maven, add to your `pom.xml` dependencies: For Gradle, add to your dependencies: ```groovy -implementation("io.opentelemetry.instrumentation:opentelemetry-java-http-server:OPENTELEMETRY_VERSION") +implementation("io.opentelemetry.instrumentation:opentelemetry-helidon-4.3.0:OPENTELEMETRY_VERSION") ``` ### Usage -The instrumentation library contains a `Filter` wrapper that provides OpenTelemetry-based spans +The instrumentation library contains an `HttpFeature` that provides OpenTelemetry-based spans and context propagation. ```java - import java.io.IOException; -import java.net.InetSocketAddress; - -import com.sun.net.httpserver.HttpContext; -import com.sun.net.httpserver.HttpServer; +import io.helidon.webserver.WebServer; +import io.helidon.webserver.http.HttpRouting; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.sdk.OpenTelemetrySdk; public class Application { static void main(String args) throws IOException { - final HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); - final HttpContext context = - server.createContext( - "/", - ctx -> { - // http logic - }); - - OpenTelemetry openTelemetry = //... - - JavaHttpServerTelemetry.create(openTelemetry).configure(context); + OpenTelemetry openTelemetry = // ... + WebServer.builder() + .addRouting( + HttpRouting.builder() + .addFeature(HelidonTelemetry.create(openTelemetry)) + .get("/greet", (req, res) -> res.send("Hello World!"))) + .build(); } } ``` From 6644c394e7907fe154c6dd7be18a9b2062b71ade Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Fri, 25 Apr 2025 23:35:21 -0400 Subject: [PATCH 05/17] use filter directly --- .fossa.yml | 6 ++++++ .../helidon/HelidonInstrumentation.java | 5 ++--- .../helidon/HelidonInstrumentationModule.java | 6 ++---- .../instrumentation/helidon/HelidonSingletons.java | 7 +++---- .../helidon/ResponseCustomizingFilter.java | 2 +- ...{JavaHttpServerTest.java => HelidonServerTest.java} | 8 +++++--- .../instrumentation/helidon/HelidonTelemetry.java | 10 ++++------ .../instrumentation/helidon/HelidonServerTest.java | 8 +++++--- 8 files changed, 28 insertions(+), 24 deletions(-) rename instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/{JavaHttpServerTest.java => HelidonServerTest.java} (82%) diff --git a/.fossa.yml b/.fossa.yml index 6301cc302700..2df505f0ebe2 100644 --- a/.fossa.yml +++ b/.fossa.yml @@ -472,6 +472,12 @@ targets: - type: gradle path: ./ target: ':instrumentation:graphql-java:graphql-java-common:library' + - type: gradle + path: ./ + target: ':instrumentation:helidon:helidon-4.3.0:javaagent' + - type: gradle + path: ./ + target: ':instrumentation:helidon:helidon-4.3.0:library' - type: gradle path: ./ target: ':instrumentation:hibernate:hibernate-3.3:javaagent' diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java index 81c8bb42ef95..622b8e790fc4 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.helidon; -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.extendsClass; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.isStatic; @@ -22,7 +21,7 @@ public class HelidonInstrumentation implements TypeInstrumentation { @Override public ElementMatcher typeMatcher() { - return extendsClass(named("io.helidon.webserver.http.HttpRouting")); + return named("io.helidon.webserver.http.HttpRouting"); } @Override @@ -37,7 +36,7 @@ public static class BuildAdvice { @Advice.OnMethodExit(suppress = Throwable.class) public static void onExit(@Advice.Return HttpRouting.Builder httpContext) { - HelidonSingletons.FILTERS.forEach(httpContext::addFeature); + HelidonSingletons.FILTERS.forEach(httpContext::addFilter); } } } diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java index ac0b9e332424..35af6860c329 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java @@ -7,17 +7,15 @@ import static java.util.Collections.singletonList; -import java.util.List; - import com.google.auto.service.AutoService; - import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import java.util.List; @AutoService(InstrumentationModule.class) public class HelidonInstrumentationModule extends InstrumentationModule { public HelidonInstrumentationModule() { - super("helidon"); + super("helidon", "helidon-4.3.0"); } @Override diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java index 5daf602f3506..1cad2d3fe0d6 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java @@ -5,10 +5,9 @@ package io.opentelemetry.javaagent.instrumentation.helidon; -import java.util.Arrays; import java.util.List; -import io.helidon.webserver.http.HttpFeature; +import io.helidon.webserver.http.Filter; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.helidon.HelidonTelemetry; import io.opentelemetry.instrumentation.helidon.internal.HelidonInstrumenterBuilderUtil; @@ -16,7 +15,7 @@ public final class HelidonSingletons { - public static final List FILTERS; + public static final List FILTERS; static { var config = AgentCommonConfig.get(); @@ -27,7 +26,7 @@ public final class HelidonSingletons { .configure(config); var serverTelemetry = serverBuilder.build(); - FILTERS = Arrays.asList(serverTelemetry, r -> r.addFilter(new ResponseCustomizingFilter())); + FILTERS = List.of(serverTelemetry.createFilter(), new ResponseCustomizingFilter()); } private HelidonSingletons() {} diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java index 74bc9607a5c7..9fae60758cba 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java @@ -19,7 +19,7 @@ final class ResponseCustomizingFilter implements Filter { @Override public void filter(FilterChain chain, RoutingRequest req, RoutingResponse res) { - Context context = Context.current(); + var context = Context.current(); HttpServerResponseCustomizerHolder.getCustomizer() .customize(context, res, HelidonServerResponseMutator.INSTANCE); chain.proceed(); diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/JavaHttpServerTest.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java similarity index 82% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/JavaHttpServerTest.java rename to instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java index cc5a7ce2d5e0..2eecec470b36 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/JavaHttpServerTest.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java @@ -5,13 +5,14 @@ package io.opentelemetry.javaagent.instrumentation.helidon; -import io.opentelemetry.instrumentation.javahttpserver.AbstractJavaHttpServerTest; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.opentelemetry.instrumentation.helidon.AbstractHelidonTest; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; -import org.junit.jupiter.api.extension.RegisterExtension; -class JavaHttpServerTest extends AbstractJavaHttpServerTest { +class HelidonServerTest extends AbstractHelidonTest { @RegisterExtension static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forAgent(); @@ -21,5 +22,6 @@ protected void configure(HttpServerTestOptions options) { super.configure(options); options.setHasResponseCustomizer(serverEndpoint -> true); + options.setTestException(false); } } diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java index 36df3bb21a5d..0b9d375b6733 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java @@ -5,15 +5,14 @@ package io.opentelemetry.instrumentation.helidon; -import io.helidon.webserver.http.HttpFeature; -import io.helidon.webserver.http.HttpRouting; +import io.helidon.webserver.http.Filter; import io.helidon.webserver.http.ServerRequest; import io.helidon.webserver.http.ServerResponse; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; /** Entrypoint for instrumenting Java HTTP Server services. */ -public final class HelidonTelemetry implements HttpFeature { +public final class HelidonTelemetry { /** Returns a new {@link HelidonTelemetry} configured with the given {@link OpenTelemetry}. */ public static HelidonTelemetry create(OpenTelemetry openTelemetry) { @@ -30,8 +29,7 @@ public static HelidonTelemetryBuilder builder(OpenTelemetry openTelemetry) { this.instrumenter = instrumenter; } - @Override - public void setup(HttpRouting.Builder routing) { - routing.addFilter(new OpenTelemetryFilter(instrumenter)); + public Filter createFilter() { + return new OpenTelemetryFilter(instrumenter); } } diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java index da7ef696d3f8..47d4de28d80e 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java @@ -5,12 +5,14 @@ package io.opentelemetry.instrumentation.helidon; +import java.util.Collections; + +import org.junit.jupiter.api.extension.RegisterExtension; + import io.helidon.webserver.http.HttpRouting; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; -import java.util.Collections; -import org.junit.jupiter.api.extension.RegisterExtension; class HelidonServerTest extends AbstractHelidonTest { @@ -27,6 +29,6 @@ protected void configureContexts(HttpRouting.Builder routing) { .setCapturedResponseHeaders( Collections.singletonList(AbstractHttpServerTest.TEST_RESPONSE_HEADER)) .build(); - routing.addFeature(feature); + routing.addFilter(feature.createFilter()); } } From e0bbc556eaa4d863b3f525690dbcd7ad6f33b13d Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Sat, 26 Apr 2025 01:19:20 -0400 Subject: [PATCH 06/17] working agent test --- .../helidon/HelidonSingletons.java | 3 +- .../helidon/HelidonServerTest.java | 7 +- .../helidon/HelidonAttributesGetter.java | 27 +-- .../helidon/HelidonRequestGetter.java | 12 +- .../helidon/HelidonTelemetry.java | 2 +- .../helidon/AbstractHelidonTest.java | 160 ------------------ .../helidon/HelidonServerTest.java | 2 +- .../helidon/AbstractHelidonTest.java | 26 +-- 8 files changed, 40 insertions(+), 199 deletions(-) delete mode 100644 instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java index 1cad2d3fe0d6..c54ea35a4371 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java @@ -5,13 +5,12 @@ package io.opentelemetry.javaagent.instrumentation.helidon; -import java.util.List; - import io.helidon.webserver.http.Filter; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.helidon.HelidonTelemetry; import io.opentelemetry.instrumentation.helidon.internal.HelidonInstrumenterBuilderUtil; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +import java.util.List; public final class HelidonSingletons { diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java index 2eecec470b36..2a6797a0717a 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java @@ -5,12 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.helidon; -import org.junit.jupiter.api.extension.RegisterExtension; - import io.opentelemetry.instrumentation.helidon.AbstractHelidonTest; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; +import org.junit.jupiter.api.extension.RegisterExtension; class HelidonServerTest extends AbstractHelidonTest { @@ -20,8 +19,8 @@ class HelidonServerTest extends AbstractHelidonTest { @Override protected void configure(HttpServerTestOptions options) { super.configure(options); - options.setHasResponseCustomizer(serverEndpoint -> true); - options.setTestException(false); + + options.setTestNotFound(false); } } diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java index bac773272349..cecfedc4ae51 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java @@ -5,37 +5,39 @@ package io.opentelemetry.instrumentation.helidon; -import io.helidon.http.HeaderNames; -import io.helidon.webserver.http.ServerRequest; -import io.helidon.webserver.http.ServerResponse; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; import java.net.InetSocketAddress; import java.util.List; import java.util.Objects; + import javax.annotation.Nullable; +import io.helidon.http.HeaderNames; +import io.helidon.webserver.http.ServerRequest; +import io.helidon.webserver.http.ServerResponse; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; + enum HelidonAttributesGetter implements HttpServerAttributesGetter { INSTANCE; @Override - public String getHttpRequestMethod(ServerRequest exchange) { - return exchange.prologue().method().text(); + public String getHttpRequestMethod(ServerRequest req) { + return req.prologue().method().text(); } @Override - public String getUrlScheme(ServerRequest exchange) { - return exchange.requestedUri().scheme(); + public String getUrlScheme(ServerRequest req) { + return req.requestedUri().scheme(); } @Override - public String getUrlPath(ServerRequest exchange) { - return exchange.path().rawPath(); + public String getUrlPath(ServerRequest req) { + return req.path().rawPath(); } @Nullable @Override - public String getUrlQuery(ServerRequest exchange) { - return exchange.query().rawValue(); + public String getUrlQuery(ServerRequest req) { + return req.query().rawValue(); } @Override @@ -60,7 +62,6 @@ public List getHttpResponseHeader( @Nullable @Override public String getHttpRoute(ServerRequest req) { - return null; } diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java index d62e02ba2811..a567761d1060 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java @@ -8,22 +8,24 @@ import static java.util.Collections.emptyIterator; import static java.util.Collections.emptyList; +import java.util.Iterator; + +import javax.annotation.Nullable; + import io.helidon.http.Header; import io.helidon.http.HeaderNames; import io.helidon.webserver.http.ServerRequest; import io.opentelemetry.context.propagation.internal.ExtendedTextMapGetter; -import java.util.Iterator; -import javax.annotation.Nullable; enum HelidonRequestGetter implements ExtendedTextMapGetter { INSTANCE; @Override - public Iterable keys(@Nullable ServerRequest exchange) { - if (exchange == null) { + public Iterable keys(@Nullable ServerRequest req) { + if (req == null) { return emptyList(); } - return () -> exchange.headers().stream().map(Header::name).iterator(); + return () -> req.headers().stream().map(Header::name).iterator(); } @Override diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java index 0b9d375b6733..7ccd2ce8fc85 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java @@ -11,7 +11,7 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -/** Entrypoint for instrumenting Java HTTP Server services. */ +/** Entrypoint for instrumenting Helidon services. */ public final class HelidonTelemetry { /** Returns a new {@link HelidonTelemetry} configured with the given {@link OpenTelemetry}. */ diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java deleted file mode 100644 index 74b728338045..000000000000 --- a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.helidon; - -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.EXCEPTION; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.INDEXED_CHILD; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.NOT_FOUND; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.QUERY_PARAM; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; -import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; - -import io.helidon.http.HeaderNames; -import io.helidon.webserver.WebServer; -import io.helidon.webserver.http.HttpRouting; -import io.helidon.webserver.http.ServerRequest; -import io.helidon.webserver.http.ServerResponse; -import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; -import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; -import io.opentelemetry.testing.internal.armeria.common.QueryParams; -import java.util.Collections; -import java.util.Map; - -public abstract class AbstractHelidonTest extends AbstractHttpServerTest { - - protected void configureContexts(HttpRouting.Builder routing) {} - - static void sendResponse(ServerResponse exchange, int status, String response) { - sendResponse(exchange, status, Collections.emptyMap(), response); - } - - static void sendResponse(ServerResponse exchange, int status, Map headers) { - sendResponse(exchange, status, headers, ""); - } - - static void sendResponse( - ServerResponse exchange, int status, Map headers, String response) { - - exchange.header("Content-Type", "text/plain"); - headers.forEach(exchange::header); - exchange.status(status).send(response); - } - - private static String getUrlQuery(ServerRequest exchange) { - return exchange.query().rawValue(); - } - - @Override - protected WebServer setupServer() { - var server = WebServer.builder().port(port); - var routing = HttpRouting.builder(); - - routing.get( - SUCCESS.getPath(), - (req, res) -> - testing() - .runWithSpan( - "controller", () -> sendResponse(res, SUCCESS.getStatus(), SUCCESS.getBody()))); - - routing.get( - REDIRECT.getPath(), - (req, res) -> - testing() - .runWithSpan( - "controller", - () -> - sendResponse( - res, - REDIRECT.getStatus(), - Collections.singletonMap("Location", REDIRECT.getBody())))); - - routing.get( - ERROR.getPath(), - (req, res) -> - testing() - .runWithSpan( - "controller", () -> sendResponse(res, ERROR.getStatus(), ERROR.getBody()))); - - routing.get( - QUERY_PARAM.getPath(), - (req, res) -> - testing() - .runWithSpan( - "controller", - () -> - sendResponse( - res, - QUERY_PARAM.getStatus(), - "some=" + QueryParams.fromQueryString(getUrlQuery(req)).get("some")))); - - routing.get( - INDEXED_CHILD.getPath(), - (req, res) -> - testing() - .runWithSpan( - "controller", - () -> { - INDEXED_CHILD.collectSpanAttributes( - name -> QueryParams.fromQueryString(getUrlQuery(req)).get(name)); - - sendResponse(res, INDEXED_CHILD.getStatus(), INDEXED_CHILD.getBody()); - })); - - routing.get( - "/captureHeaders", - (req, res) -> - testing() - .runWithSpan( - "controller", - () -> - sendResponse( - res, - CAPTURE_HEADERS.getStatus(), - Collections.singletonMap( - "X-Test-Response", - req.headers().get(HeaderNames.create("X-Test-Request")).get()), - CAPTURE_HEADERS.getBody()))); - - routing.get( - EXCEPTION.getPath(), - (req, res) -> - testing() - .runWithSpan( - "controller", - () -> { - sendResponse(res, EXCEPTION.getStatus(), EXCEPTION.getBody()); - throw new IllegalStateException(EXCEPTION.getBody()); - })); - - routing.get("/", (req, res) -> sendResponse(res, NOT_FOUND.getStatus(), NOT_FOUND.getBody())); - - configureContexts(routing); - - return server.routing(routing).build().start(); - } - - @Override - protected void stopServer(WebServer server) { - server.stop(); - } - - @Override - protected void configure(HttpServerTestOptions options) { - // filter isn't called for non-standard method - options.disableTestNonStandardHttpMethod(); - options.setTestException(false); - options.setTestHttpPipelining(true); - options.setExpectedHttpRoute( - (endpoint, method) -> { - if (NOT_FOUND.equals(endpoint)) { - return "/"; - } - return expectedHttpRoute(endpoint, method); - }); - } -} diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java index 47d4de28d80e..657db5efc597 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java @@ -20,7 +20,7 @@ class HelidonServerTest extends AbstractHelidonTest { static final InstrumentationExtension testing = HttpServerInstrumentationExtension.forLibrary(); @Override - protected void configureContexts(HttpRouting.Builder routing) { + protected void configureRoutes(HttpRouting.Builder routing) { var feature = HelidonTelemetry.builder(testing.getOpenTelemetry()) diff --git a/instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java index 6bb946190687..2666102c24f3 100644 --- a/instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java +++ b/instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java @@ -27,26 +27,26 @@ public abstract class AbstractHelidonTest extends AbstractHttpServerTest { - protected void configureContexts(HttpRouting.Builder routing) {} + protected void configureRoutes(HttpRouting.Builder routing) {} - static void sendResponse(ServerResponse exchange, int status, String response) { - sendResponse(exchange, status, Collections.emptyMap(), response); + static void sendResponse(ServerResponse res, int status, String response) { + sendResponse(res, status, Collections.emptyMap(), response); } - static void sendResponse(ServerResponse exchange, int status, Map headers) { - sendResponse(exchange, status, headers, ""); + static void sendResponse(ServerResponse res, int status, Map headers) { + sendResponse(res, status, headers, ""); } static void sendResponse( - ServerResponse exchange, int status, Map headers, String response) { + ServerResponse res, int status, Map headers, String response) { - exchange.header("Content-Type", "text/plain"); - headers.forEach(exchange::header); - exchange.send(response); + res.header("Content-Type", "text/plain"); + headers.forEach(res::header); + res.status(status).send(response); } - private static String getUrlQuery(ServerRequest exchange) { - return exchange.query().rawValue(); + private static String getUrlQuery(ServerRequest req) { + return req.query().rawValue(); } @Override @@ -132,8 +132,7 @@ protected WebServer setupServer() { })); routing.get("/", (req, res) -> sendResponse(res, NOT_FOUND.getStatus(), NOT_FOUND.getBody())); - - configureContexts(routing); + configureRoutes(routing); return server.routing(routing).build().start(); } @@ -147,6 +146,7 @@ protected void stopServer(WebServer server) { protected void configure(HttpServerTestOptions options) { // filter isn't called for non-standard method options.disableTestNonStandardHttpMethod(); + options.setTestException(false); options.setTestHttpPipelining(true); options.setExpectedHttpRoute( (endpoint, method) -> { From 2b4d6d42b4de329d377f02bfa73bacacff0aa54b Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:52:08 -0400 Subject: [PATCH 07/17] M1 --- .../helidon/helidon-4.3.0/javaagent/build.gradle.kts | 2 +- instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts | 2 +- instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts index 2db16406e5ad..ace60ae6e20a 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts @@ -16,7 +16,7 @@ otelJava { } dependencies { - library("io.helidon.webserver:helidon-webserver:4.3.0") + library("io.helidon.webserver:helidon-webserver:4.3.0-M1") implementation(project(":instrumentation:helidon:helidon-4.3.0:library")) testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } diff --git a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts index e013a58e5175..703ea993f212 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts @@ -7,6 +7,6 @@ otelJava { } dependencies { - implementation("io.helidon.webserver:helidon-webserver:4.3.0") + implementation("io.helidon.webserver:helidon-webserver:4.3.0-M1") testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } diff --git a/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts index 56c8d2889546..ef43ab951829 100644 --- a/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts @@ -8,5 +8,5 @@ otelJava { dependencies { api(project(":testing-common")) - implementation("io.helidon.webserver:helidon-webserver:4.3.0") + implementation("io.helidon.webserver:helidon-webserver:4.3.0-M1") } From b2dbe620469cad487ac32b6260db67ce7f3c4fd6 Mon Sep 17 00:00:00 2001 From: otelbot <197425009+otelbot@users.noreply.github.com> Date: Wed, 27 Aug 2025 21:58:51 +0000 Subject: [PATCH 08/17] ./gradlew spotlessApply --- .../helidon/HelidonAttributesGetter.java | 10 ++++------ .../instrumentation/helidon/HelidonRequestGetter.java | 6 ++---- .../instrumentation/helidon/HelidonServerTest.java | 6 ++---- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java index cecfedc4ae51..b16d32fc283e 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java @@ -5,16 +5,14 @@ package io.opentelemetry.instrumentation.helidon; -import java.net.InetSocketAddress; -import java.util.List; -import java.util.Objects; - -import javax.annotation.Nullable; - import io.helidon.http.HeaderNames; import io.helidon.webserver.http.ServerRequest; import io.helidon.webserver.http.ServerResponse; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; +import java.net.InetSocketAddress; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; enum HelidonAttributesGetter implements HttpServerAttributesGetter { INSTANCE; diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java index a567761d1060..d34287ee10d0 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java @@ -8,14 +8,12 @@ import static java.util.Collections.emptyIterator; import static java.util.Collections.emptyList; -import java.util.Iterator; - -import javax.annotation.Nullable; - import io.helidon.http.Header; import io.helidon.http.HeaderNames; import io.helidon.webserver.http.ServerRequest; import io.opentelemetry.context.propagation.internal.ExtendedTextMapGetter; +import java.util.Iterator; +import javax.annotation.Nullable; enum HelidonRequestGetter implements ExtendedTextMapGetter { INSTANCE; diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java index 657db5efc597..5d66c3551e16 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java @@ -5,14 +5,12 @@ package io.opentelemetry.instrumentation.helidon; -import java.util.Collections; - -import org.junit.jupiter.api.extension.RegisterExtension; - import io.helidon.webserver.http.HttpRouting; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpServerTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; +import java.util.Collections; +import org.junit.jupiter.api.extension.RegisterExtension; class HelidonServerTest extends AbstractHelidonTest { From 4c7d96c75961ec06187e729cb3f3420e1d89ee73 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Mon, 29 Sep 2025 10:15:07 -0400 Subject: [PATCH 09/17] Revert "M1" This reverts commit c8012930367a899f208a4660c13c297009a33319. --- .../helidon/helidon-4.3.0/javaagent/build.gradle.kts | 2 +- instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts | 2 +- instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts index ace60ae6e20a..2db16406e5ad 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts @@ -16,7 +16,7 @@ otelJava { } dependencies { - library("io.helidon.webserver:helidon-webserver:4.3.0-M1") + library("io.helidon.webserver:helidon-webserver:4.3.0") implementation(project(":instrumentation:helidon:helidon-4.3.0:library")) testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } diff --git a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts index 703ea993f212..e013a58e5175 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts @@ -7,6 +7,6 @@ otelJava { } dependencies { - implementation("io.helidon.webserver:helidon-webserver:4.3.0-M1") + implementation("io.helidon.webserver:helidon-webserver:4.3.0") testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } diff --git a/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts index ef43ab951829..56c8d2889546 100644 --- a/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts @@ -8,5 +8,5 @@ otelJava { dependencies { api(project(":testing-common")) - implementation("io.helidon.webserver:helidon-webserver:4.3.0-M1") + implementation("io.helidon.webserver:helidon-webserver:4.3.0") } From 59d9cb13eba1648b396e85576a2fbabc8ab99775 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Tue, 30 Sep 2025 00:47:50 -0400 Subject: [PATCH 10/17] Create metadata.yaml --- .../helidon/helidon-4.3.0/metadata.yaml | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 instrumentation/helidon/helidon-4.3.0/metadata.yaml diff --git a/instrumentation/helidon/helidon-4.3.0/metadata.yaml b/instrumentation/helidon/helidon-4.3.0/metadata.yaml new file mode 100644 index 000000000000..5e8ff68ef74a --- /dev/null +++ b/instrumentation/helidon/helidon-4.3.0/metadata.yaml @@ -0,0 +1,28 @@ +description: This instrumentation enables HTTP server spans and HTTP server metrics for the Helidon HTTP server. +library_link: https://helidon.io/ +configurations: + - name: otel.instrumentation.http.known-methods + description: > + Configures the instrumentation to recognize an alternative set of HTTP request methods. All + other methods will be treated as `_OTHER`. + type: list + default: "CONNECT,DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT,TRACE" + - name: otel.instrumentation.http.server.capture-request-headers + description: List of HTTP request headers to capture in HTTP server telemetry. + type: list + default: "" + - name: otel.instrumentation.http.server.capture-response-headers + description: List of HTTP response headers to capture in HTTP server telemetry. + type: list + default: "" + - name: otel.instrumentation.common.peer-service-mapping + description: Used to specify a mapping from host names or IP addresses to peer services. + type: map + default: "" + - name: otel.instrumentation.http.server.emit-experimental-telemetry + description: > + Enable the capture of experimental HTTP server telemetry. Adds the `http.request.body.size` and + `http.response.body.size` attributes to spans, and records `http.server.request.body.size` + and `http.server.response.body.size` metrics. + type: boolean + default: false From 6ddd3acf780779856f9ed7d43191d6f25979a8c0 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Tue, 30 Sep 2025 09:25:52 -0400 Subject: [PATCH 11/17] pr comments --- .../helidon/helidon-4.3.0/javaagent/build.gradle.kts | 2 +- .../javaagent/instrumentation/helidon/HelidonSingletons.java | 4 +--- .../instrumentation/helidon/HelidonTelemetryBuilder.java | 2 +- settings.gradle.kts | 1 - 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts index 2db16406e5ad..e3f93b97347e 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts @@ -17,6 +17,6 @@ otelJava { dependencies { library("io.helidon.webserver:helidon-webserver:4.3.0") - implementation(project(":instrumentation:helidon:helidon-4.3.0:library")) + library(project(":instrumentation:helidon:helidon-4.3.0:library")) testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java index c54ea35a4371..90604578644f 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java @@ -17,12 +17,10 @@ public final class HelidonSingletons { public static final List FILTERS; static { - var config = AgentCommonConfig.get(); - var serverBuilder = HelidonTelemetry.builder(GlobalOpenTelemetry.get()); HelidonInstrumenterBuilderUtil.getServerBuilderExtractor() .apply(serverBuilder) - .configure(config); + .configure(AgentCommonConfig.get()); var serverTelemetry = serverBuilder.build(); FILTERS = List.of(serverTelemetry.createFilter(), new ResponseCustomizingFilter()); diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java index f314e4de6dde..d8f8f5844191 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java +++ b/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java @@ -22,7 +22,7 @@ public final class HelidonTelemetryBuilder { - private static final String INSTRUMENTATION_NAME = "io.opentelemetry.helidon-4.3.0"; + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.helidon-4.3"; private final DefaultHttpServerInstrumenterBuilder builder; diff --git a/settings.gradle.kts b/settings.gradle.kts index ad15ff3e0706..6f313fbd0317 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -250,7 +250,6 @@ include(":instrumentation:gwt-2.0:javaagent") include(":instrumentation:helidon:helidon-4.3.0:javaagent") include(":instrumentation:helidon:helidon-4.3.0:library") include(":instrumentation:helidon:helidon-4.3.0:testing") -include(":instrumentation:ktor:ktor-3.0:library") include(":instrumentation:hibernate:hibernate-3.3:javaagent") include(":instrumentation:hibernate:hibernate-4.0:javaagent") include(":instrumentation:hibernate:hibernate-6.0:javaagent") From 7fa94ef1f4b759fd2c49c650f612926ac68190a2 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:18:20 -0400 Subject: [PATCH 12/17] Update build.gradle.kts --- instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts index e013a58e5175..f0904afdb079 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts @@ -7,6 +7,6 @@ otelJava { } dependencies { - implementation("io.helidon.webserver:helidon-webserver:4.3.0") + library("io.helidon.webserver:helidon-webserver:4.3.0") testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } From 778c3fcaa6ff02583ef4977424450eb53ac0b576 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:10:19 -0400 Subject: [PATCH 13/17] Update build.gradle.kts --- .../helidon/helidon-4.3.0/javaagent/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts index e3f93b97347e..2db16406e5ad 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts +++ b/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts @@ -17,6 +17,6 @@ otelJava { dependencies { library("io.helidon.webserver:helidon-webserver:4.3.0") - library(project(":instrumentation:helidon:helidon-4.3.0:library")) + implementation(project(":instrumentation:helidon:helidon-4.3.0:library")) testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) } From c1ed23cfad3565f4d4fe7ab54bfa12e9631aec37 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Thu, 2 Oct 2025 11:54:55 +0300 Subject: [PATCH 14/17] review --- .fossa.yml | 12 ++++++------ docs/supported-libraries.md | 1 + .../javaagent/build.gradle.kts | 4 ++-- .../helidon/HelidonInstrumentation.java | 0 .../helidon/HelidonInstrumentationModule.java | 2 +- .../helidon/HelidonServerResponseMutator.java | 0 .../instrumentation/helidon/HelidonSingletons.java | 0 .../helidon/ResponseCustomizingFilter.java | 0 .../instrumentation/helidon/HelidonServerTest.java | 0 .../helidon-4.3.0 => helidon-4.3}/library/README.md | 6 +++--- .../library/build.gradle.kts | 2 +- .../helidon/HelidonAttributesGetter.java | 0 .../helidon/HelidonRequestGetter.java | 4 ++-- .../instrumentation/helidon/HelidonTelemetry.java | 0 .../helidon/HelidonTelemetryBuilder.java | 0 .../instrumentation/helidon/OpenTelemetryFilter.java | 8 ++------ .../helidon/internal/Experimental.java | 0 .../internal/HelidonInstrumenterBuilderUtil.java | 0 .../instrumentation/helidon/HelidonServerTest.java | 1 - .../helidon-4.3.0 => helidon-4.3}/metadata.yaml | 0 .../testing/build.gradle.kts | 0 .../instrumentation/helidon/AbstractHelidonTest.java | 8 -------- settings.gradle.kts | 6 +++--- 23 files changed, 21 insertions(+), 33 deletions(-) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/javaagent/build.gradle.kts (69%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java (94%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/README.md (89%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/build.gradle.kts (70%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java (97%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java (89%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java (99%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/metadata.yaml (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/testing/build.gradle.kts (100%) rename instrumentation/{helidon/helidon-4.3.0 => helidon-4.3}/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java (96%) diff --git a/.fossa.yml b/.fossa.yml index cb8681c69660..2f3eead41100 100644 --- a/.fossa.yml +++ b/.fossa.yml @@ -136,6 +136,12 @@ targets: - type: gradle path: ./ target: ':instrumentation:gwt-2.0:javaagent' + - type: gradle + path: ./ + target: ':instrumentation:helidon-4.3:javaagent' + - type: gradle + path: ./ + target: ':instrumentation:helidon-4.3:library' - type: gradle path: ./ target: ':instrumentation:hikaricp-3.0:javaagent' @@ -475,12 +481,6 @@ targets: - type: gradle path: ./ target: ':instrumentation:graphql-java:graphql-java-common:library' - - type: gradle - path: ./ - target: ':instrumentation:helidon:helidon-4.3.0:javaagent' - - type: gradle - path: ./ - target: ':instrumentation:helidon:helidon-4.3.0:library' - type: gradle path: ./ target: ':instrumentation:hibernate:hibernate-3.3:javaagent' diff --git a/docs/supported-libraries.md b/docs/supported-libraries.md index b9b686070ffd..ae53756a383c 100644 --- a/docs/supported-libraries.md +++ b/docs/supported-libraries.md @@ -76,6 +76,7 @@ These are the supported libraries and frameworks: | [gRPC](https://github.com/grpc/grpc-java) | 1.6+ | [opentelemetry-grpc-1.6](../instrumentation/grpc-1.6/library) | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] | | [Guava ListenableFuture](https://guava.dev/releases/snapshot/api/docs/com/google/common/util/concurrent/ListenableFuture.html) | 10.0+ | [opentelemetry-guava-10.0](../instrumentation/guava-10.0/library) | Context propagation | | [GWT](https://www.gwtproject.org/) | 2.0+ | N/A | [RPC Server Spans] | +| [Helidon](https://helidon.io/) | 4.3+ | [opentelemetry-helidon-4.3](../instrumentation/helidon-4.3/library) | [HTTP Server Spans], [HTTP Server Metrics], Provides `http.route` [2] | | [Hibernate](https://github.com/hibernate/hibernate-orm) | 3.3+ | N/A | none | | [Hibernate Reactive](https://hibernate.org/reactive) | 1.0+ | N/A | none | | [HikariCP](https://github.com/brettwooldridge/HikariCP) | 3.0+ | [opentelemetry-hikaricp-3.0](../instrumentation/hikaricp-3.0/library) | [Database Pool Metrics] | diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts b/instrumentation/helidon-4.3/javaagent/build.gradle.kts similarity index 69% rename from instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts rename to instrumentation/helidon-4.3/javaagent/build.gradle.kts index 2db16406e5ad..6ffe73c6c849 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/build.gradle.kts +++ b/instrumentation/helidon-4.3/javaagent/build.gradle.kts @@ -17,6 +17,6 @@ otelJava { dependencies { library("io.helidon.webserver:helidon-webserver:4.3.0") - implementation(project(":instrumentation:helidon:helidon-4.3.0:library")) - testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) + implementation(project(":instrumentation:helidon-4.3:library")) + testImplementation(project(":instrumentation:helidon-4.3:testing")) } diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java similarity index 94% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java index 35af6860c329..93c57b75da54 100644 --- a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java +++ b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java @@ -15,7 +15,7 @@ @AutoService(InstrumentationModule.class) public class HelidonInstrumentationModule extends InstrumentationModule { public HelidonInstrumentationModule() { - super("helidon", "helidon-4.3.0"); + super("helidon", "helidon-4.3"); } @Override diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java diff --git a/instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java rename to instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java diff --git a/instrumentation/helidon/helidon-4.3.0/library/README.md b/instrumentation/helidon-4.3/library/README.md similarity index 89% rename from instrumentation/helidon/helidon-4.3.0/library/README.md rename to instrumentation/helidon-4.3/library/README.md index 52da86b8e6ac..f2400174d5d1 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/README.md +++ b/instrumentation/helidon-4.3/library/README.md @@ -7,7 +7,7 @@ Provides OpenTelemetry instrumentation for [Helidon](https://helidon.io/). ### Add these dependencies to your project Replace `OPENTELEMETRY_VERSION` with the [latest -release](https://search.maven.org/search?q=g:io.opentelemetry.instrumentation%20AND%20a:opentelemetry-helidon-4.3.0). +release](https://search.maven.org/search?q=g:io.opentelemetry.instrumentation%20AND%20a:opentelemetry-helidon-4.3). For Maven, add to your `pom.xml` dependencies: @@ -15,7 +15,7 @@ For Maven, add to your `pom.xml` dependencies: io.opentelemetry.instrumentation - opentelemetry-helidon-4.3.0 + opentelemetry-helidon-4.3 OPENTELEMETRY_VERSION @@ -24,7 +24,7 @@ For Maven, add to your `pom.xml` dependencies: For Gradle, add to your dependencies: ```groovy -implementation("io.opentelemetry.instrumentation:opentelemetry-helidon-4.3.0:OPENTELEMETRY_VERSION") +implementation("io.opentelemetry.instrumentation:opentelemetry-helidon-4.3:OPENTELEMETRY_VERSION") ``` ### Usage diff --git a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts b/instrumentation/helidon-4.3/library/build.gradle.kts similarity index 70% rename from instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts rename to instrumentation/helidon-4.3/library/build.gradle.kts index f0904afdb079..518d425eaac8 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/build.gradle.kts +++ b/instrumentation/helidon-4.3/library/build.gradle.kts @@ -8,5 +8,5 @@ otelJava { dependencies { library("io.helidon.webserver:helidon-webserver:4.3.0") - testImplementation(project(":instrumentation:helidon:helidon-4.3.0:testing")) + testImplementation(project(":instrumentation:helidon-4.3:testing")) } diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java similarity index 97% rename from instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java index d34287ee10d0..7ed584831b5a 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java @@ -29,10 +29,10 @@ public Iterable keys(@Nullable ServerRequest req) { @Override public String get(@Nullable ServerRequest carrier, String key) { if (carrier == null) { - return ""; + return null; } - return carrier.headers().first(HeaderNames.create(key)).orElse(""); + return carrier.headers().first(HeaderNames.create(key)).orElse(null); } @Override diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java similarity index 89% rename from instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java index 1e4e2c45c1fd..534c2dbbf2ec 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java @@ -27,7 +27,6 @@ final class OpenTelemetryFilter implements Filter { @Override public void filter(FilterChain chain, RoutingRequest req, RoutingResponse res) { - Context parentContext = Context.current(); if (!instrumenter.shouldStart(parentContext, req)) { chain.proceed(); @@ -43,11 +42,8 @@ public void filter(FilterChain chain, RoutingRequest req, RoutingResponse res) { error = t; throw t; } finally { - - HttpServerRoute.update( - context, - HttpServerRouteSource.CONTROLLER, - res.status().code() == 404 ? "/" : req.matchingPattern().orElse(null)); + req.matchingPattern() + .ifPresent(route -> HttpServerRoute.update(context, HttpServerRouteSource.SERVER, route)); instrumenter.end(context, req, res, error); } } diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java diff --git a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java similarity index 99% rename from instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java rename to instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java index 5d66c3551e16..6ce15d571214 100644 --- a/instrumentation/helidon/helidon-4.3.0/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java +++ b/instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java @@ -19,7 +19,6 @@ class HelidonServerTest extends AbstractHelidonTest { @Override protected void configureRoutes(HttpRouting.Builder routing) { - var feature = HelidonTelemetry.builder(testing.getOpenTelemetry()) .setCapturedRequestHeaders( diff --git a/instrumentation/helidon/helidon-4.3.0/metadata.yaml b/instrumentation/helidon-4.3/metadata.yaml similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/metadata.yaml rename to instrumentation/helidon-4.3/metadata.yaml diff --git a/instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts b/instrumentation/helidon-4.3/testing/build.gradle.kts similarity index 100% rename from instrumentation/helidon/helidon-4.3.0/testing/build.gradle.kts rename to instrumentation/helidon-4.3/testing/build.gradle.kts diff --git a/instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java similarity index 96% rename from instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java rename to instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java index 2666102c24f3..92024fb7e0f1 100644 --- a/instrumentation/helidon/helidon-4.3.0/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java +++ b/instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java @@ -39,7 +39,6 @@ static void sendResponse(ServerResponse res, int status, Map hea static void sendResponse( ServerResponse res, int status, Map headers, String response) { - res.header("Content-Type", "text/plain"); headers.forEach(res::header); res.status(status).send(response); @@ -148,12 +147,5 @@ protected void configure(HttpServerTestOptions options) { options.disableTestNonStandardHttpMethod(); options.setTestException(false); options.setTestHttpPipelining(true); - options.setExpectedHttpRoute( - (endpoint, method) -> { - if (NOT_FOUND.equals(endpoint)) { - return "/"; - } - return expectedHttpRoute(endpoint, method); - }); } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 6f313fbd0317..c74c628fab0a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -247,9 +247,9 @@ include(":instrumentation:grpc-1.6:testing") include(":instrumentation:guava-10.0:javaagent") include(":instrumentation:guava-10.0:library") include(":instrumentation:gwt-2.0:javaagent") -include(":instrumentation:helidon:helidon-4.3.0:javaagent") -include(":instrumentation:helidon:helidon-4.3.0:library") -include(":instrumentation:helidon:helidon-4.3.0:testing") +include(":instrumentation:helidon-4.3:javaagent") +include(":instrumentation:helidon-4.3:library") +include(":instrumentation:helidon-4.3:testing") include(":instrumentation:hibernate:hibernate-3.3:javaagent") include(":instrumentation:hibernate:hibernate-4.0:javaagent") include(":instrumentation:hibernate:hibernate-6.0:javaagent") From bb51f068c042cdc5c137e32dafa579e3893a5488 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Thu, 2 Oct 2025 12:17:31 +0300 Subject: [PATCH 15/17] review --- .../helidon/{ => v4_3}/HelidonInstrumentation.java | 2 +- .../helidon/{ => v4_3}/HelidonInstrumentationModule.java | 2 +- .../helidon/{ => v4_3}/HelidonServerResponseMutator.java | 2 +- .../helidon/{ => v4_3}/HelidonSingletons.java | 6 +++--- .../helidon/{ => v4_3}/ResponseCustomizingFilter.java | 2 +- .../helidon/{ => v4_3}/HelidonServerTest.java | 4 ++-- instrumentation/helidon-4.3/library/README.md | 1 + .../helidon/{ => v4_3}/HelidonAttributesGetter.java | 2 +- .../helidon/{ => v4_3}/HelidonRequestGetter.java | 2 +- .../helidon/{ => v4_3}/HelidonTelemetry.java | 2 +- .../helidon/{ => v4_3}/HelidonTelemetryBuilder.java | 6 +++--- .../helidon/{ => v4_3}/OpenTelemetryFilter.java | 2 +- .../helidon/{ => v4_3}/internal/Experimental.java | 4 ++-- .../{ => v4_3}/internal/HelidonInstrumenterBuilderUtil.java | 4 ++-- .../helidon/{ => v4_3}/HelidonServerTest.java | 2 +- .../helidon/{ => v4_3}/AbstractHelidonTest.java | 2 +- 16 files changed, 23 insertions(+), 22 deletions(-) rename instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/{ => v4_3}/HelidonInstrumentation.java (95%) rename instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/{ => v4_3}/HelidonInstrumentationModule.java (91%) rename instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/{ => v4_3}/HelidonServerResponseMutator.java (87%) rename instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/{ => v4_3}/HelidonSingletons.java (76%) rename instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/{ => v4_3}/ResponseCustomizingFilter.java (92%) rename instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/{ => v4_3}/HelidonServerTest.java (84%) rename instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/HelidonAttributesGetter.java (97%) rename instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/HelidonRequestGetter.java (95%) rename instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/HelidonTelemetry.java (95%) rename instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/HelidonTelemetryBuilder.java (95%) rename instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/OpenTelemetryFilter.java (96%) rename instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/internal/Experimental.java (88%) rename instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/internal/HelidonInstrumenterBuilderUtil.java (90%) rename instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/HelidonServerTest.java (95%) rename instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/{ => v4_3}/AbstractHelidonTest.java (98%) diff --git a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonInstrumentation.java similarity index 95% rename from instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonInstrumentation.java index 622b8e790fc4..6cc609914d41 100644 --- a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentation.java +++ b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonInstrumentation.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.helidon; +package io.opentelemetry.javaagent.instrumentation.helidon.v4_3; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; diff --git a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonInstrumentationModule.java similarity index 91% rename from instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonInstrumentationModule.java index 93c57b75da54..756282b5bcf3 100644 --- a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonInstrumentationModule.java +++ b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonInstrumentationModule.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.helidon; +package io.opentelemetry.javaagent.instrumentation.helidon.v4_3; import static java.util.Collections.singletonList; diff --git a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonServerResponseMutator.java similarity index 87% rename from instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonServerResponseMutator.java index 6fdf1ab025e0..e13a0a934f75 100644 --- a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerResponseMutator.java +++ b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonServerResponseMutator.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.helidon; +package io.opentelemetry.javaagent.instrumentation.helidon.v4_3; import io.helidon.webserver.http.ServerResponse; import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseMutator; diff --git a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonSingletons.java similarity index 76% rename from instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonSingletons.java index 90604578644f..c5ad2275ddde 100644 --- a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonSingletons.java +++ b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonSingletons.java @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.helidon; +package io.opentelemetry.javaagent.instrumentation.helidon.v4_3; import io.helidon.webserver.http.Filter; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.helidon.HelidonTelemetry; -import io.opentelemetry.instrumentation.helidon.internal.HelidonInstrumenterBuilderUtil; +import io.opentelemetry.instrumentation.helidon.v4_3.HelidonTelemetry; +import io.opentelemetry.instrumentation.helidon.v4_3.internal.HelidonInstrumenterBuilderUtil; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.util.List; diff --git a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/ResponseCustomizingFilter.java similarity index 92% rename from instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java rename to instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/ResponseCustomizingFilter.java index 9fae60758cba..1bcb5ef07673 100644 --- a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/ResponseCustomizingFilter.java +++ b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/ResponseCustomizingFilter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.helidon; +package io.opentelemetry.javaagent.instrumentation.helidon.v4_3; import io.helidon.webserver.http.Filter; import io.helidon.webserver.http.FilterChain; diff --git a/instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonServerTest.java similarity index 84% rename from instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java rename to instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonServerTest.java index 2a6797a0717a..a9b0287c8131 100644 --- a/instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/HelidonServerTest.java +++ b/instrumentation/helidon-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonServerTest.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.instrumentation.helidon; +package io.opentelemetry.javaagent.instrumentation.helidon.v4_3; -import io.opentelemetry.instrumentation.helidon.AbstractHelidonTest; +import io.opentelemetry.instrumentation.helidon.v4_3.AbstractHelidonTest; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpServerTestOptions; diff --git a/instrumentation/helidon-4.3/library/README.md b/instrumentation/helidon-4.3/library/README.md index f2400174d5d1..9d0fa680ac8d 100644 --- a/instrumentation/helidon-4.3/library/README.md +++ b/instrumentation/helidon-4.3/library/README.md @@ -38,6 +38,7 @@ import java.io.IOException; import io.helidon.webserver.WebServer; import io.helidon.webserver.http.HttpRouting; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.helidon.v4_3.HelidonTelemetry; public class Application { diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonAttributesGetter.java similarity index 97% rename from instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonAttributesGetter.java index b16d32fc283e..aca7a643873e 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonAttributesGetter.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonAttributesGetter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon; +package io.opentelemetry.instrumentation.helidon.v4_3; import io.helidon.http.HeaderNames; import io.helidon.webserver.http.ServerRequest; diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonRequestGetter.java similarity index 95% rename from instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonRequestGetter.java index 7ed584831b5a..0f56c702184d 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonRequestGetter.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonRequestGetter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon; +package io.opentelemetry.instrumentation.helidon.v4_3; import static java.util.Collections.emptyIterator; import static java.util.Collections.emptyList; diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetry.java similarity index 95% rename from instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetry.java index 7ccd2ce8fc85..7467c0471bc0 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetry.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetry.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon; +package io.opentelemetry.instrumentation.helidon.v4_3; import io.helidon.webserver.http.Filter; import io.helidon.webserver.http.ServerRequest; diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetryBuilder.java similarity index 95% rename from instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetryBuilder.java index d8f8f5844191..7f75b2c82589 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/HelidonTelemetryBuilder.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetryBuilder.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon; +package io.opentelemetry.instrumentation.helidon.v4_3; import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.helidon.webserver.http.ServerRequest; @@ -14,8 +14,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; -import io.opentelemetry.instrumentation.helidon.internal.Experimental; -import io.opentelemetry.instrumentation.helidon.internal.HelidonInstrumenterBuilderUtil; +import io.opentelemetry.instrumentation.helidon.v4_3.internal.Experimental; +import io.opentelemetry.instrumentation.helidon.v4_3.internal.HelidonInstrumenterBuilderUtil; import java.util.Collection; import java.util.function.Function; import java.util.function.UnaryOperator; diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/OpenTelemetryFilter.java similarity index 96% rename from instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/OpenTelemetryFilter.java index 534c2dbbf2ec..c05fb727a1d7 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/OpenTelemetryFilter.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/OpenTelemetryFilter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon; +package io.opentelemetry.instrumentation.helidon.v4_3; import io.helidon.webserver.http.Filter; import io.helidon.webserver.http.FilterChain; diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/internal/Experimental.java similarity index 88% rename from instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/internal/Experimental.java index 8a296fa4c691..16d1d44d8382 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/Experimental.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/internal/Experimental.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon.internal; +package io.opentelemetry.instrumentation.helidon.v4_3.internal; -import io.opentelemetry.instrumentation.helidon.HelidonTelemetryBuilder; +import io.opentelemetry.instrumentation.helidon.v4_3.HelidonTelemetryBuilder; import java.util.function.BiConsumer; import javax.annotation.Nullable; diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/internal/HelidonInstrumenterBuilderUtil.java similarity index 90% rename from instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java rename to instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/internal/HelidonInstrumenterBuilderUtil.java index 2da0feb2de21..6d60802f7768 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/internal/HelidonInstrumenterBuilderUtil.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/internal/HelidonInstrumenterBuilderUtil.java @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon.internal; +package io.opentelemetry.instrumentation.helidon.v4_3.internal; import io.helidon.webserver.http.ServerRequest; import io.helidon.webserver.http.ServerResponse; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; -import io.opentelemetry.instrumentation.helidon.HelidonTelemetryBuilder; +import io.opentelemetry.instrumentation.helidon.v4_3.HelidonTelemetryBuilder; import java.util.function.Function; import javax.annotation.Nullable; diff --git a/instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java b/instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonServerTest.java similarity index 95% rename from instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java rename to instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonServerTest.java index 6ce15d571214..1e19625e1da2 100644 --- a/instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/HelidonServerTest.java +++ b/instrumentation/helidon-4.3/library/src/test/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonServerTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon; +package io.opentelemetry.instrumentation.helidon.v4_3; import io.helidon.webserver.http.HttpRouting; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; diff --git a/instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java b/instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/AbstractHelidonTest.java similarity index 98% rename from instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java rename to instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/AbstractHelidonTest.java index 92024fb7e0f1..db33a78a5394 100644 --- a/instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/AbstractHelidonTest.java +++ b/instrumentation/helidon-4.3/testing/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/AbstractHelidonTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.helidon; +package io.opentelemetry.instrumentation.helidon.v4_3; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.CAPTURE_HEADERS; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.ERROR; From 2033b03d4c94e55e1152fc932d8a2597b6b73a48 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Thu, 2 Oct 2025 12:27:12 +0300 Subject: [PATCH 16/17] fix link --- .lychee.toml | 2 ++ instrumentation/helidon-4.3/library/README.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.lychee.toml b/.lychee.toml index 1f8e51a4d5ba..4c5992769dfa 100644 --- a/.lychee.toml +++ b/.lychee.toml @@ -21,4 +21,6 @@ exclude = [ '^http://code.google.com/p/concurrentlinkedhashmap$', '^https://softwareengineering.stackexchange.com/questions/29727.*', '^https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/io/opentelemetry/$', + # new artifact, remove after 2.21.0 release + '^https://central.sonatype.com/artifact/io.opentelemetry.instrumentation/opentelemetry-helidon-4.3$', ] diff --git a/instrumentation/helidon-4.3/library/README.md b/instrumentation/helidon-4.3/library/README.md index 9d0fa680ac8d..1114c94dbc72 100644 --- a/instrumentation/helidon-4.3/library/README.md +++ b/instrumentation/helidon-4.3/library/README.md @@ -7,7 +7,7 @@ Provides OpenTelemetry instrumentation for [Helidon](https://helidon.io/). ### Add these dependencies to your project Replace `OPENTELEMETRY_VERSION` with the [latest -release](https://search.maven.org/search?q=g:io.opentelemetry.instrumentation%20AND%20a:opentelemetry-helidon-4.3). +release](https://central.sonatype.com/artifact/io.opentelemetry.instrumentation/opentelemetry-helidon-4.3). For Maven, add to your `pom.xml` dependencies: From fe66ac1cbf51a622fe7108b04b19439f6b5d62fe Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Thu, 9 Oct 2025 13:48:31 +0300 Subject: [PATCH 17/17] review --- .../helidon/v4_3/HelidonAttributesGetter.java | 18 ++++-------------- .../helidon/v4_3/HelidonTelemetry.java | 5 +++++ .../helidon/v4_3/HelidonTelemetryBuilder.java | 6 +----- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonAttributesGetter.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonAttributesGetter.java index aca7a643873e..a3ba78a4e8ad 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonAttributesGetter.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonAttributesGetter.java @@ -11,7 +11,6 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; import java.net.InetSocketAddress; import java.util.List; -import java.util.Objects; import javax.annotation.Nullable; enum HelidonAttributesGetter implements HttpServerAttributesGetter { @@ -43,24 +42,15 @@ public List getHttpRequestHeader(ServerRequest req, String name) { return req.headers().values(HeaderNames.create(name)); } - @Nullable @Override public Integer getHttpResponseStatusCode( - ServerRequest req, @Nullable ServerResponse res, @Nullable Throwable error) { - - return Objects.requireNonNull(res).status().code(); - } - - @Override - public List getHttpResponseHeader( - ServerRequest req, @Nullable ServerResponse res, String name) { - return Objects.requireNonNull(res).headers().values(HeaderNames.create(name)); + ServerRequest req, ServerResponse res, @Nullable Throwable error) { + return res.status().code(); } - @Nullable @Override - public String getHttpRoute(ServerRequest req) { - return null; + public List getHttpResponseHeader(ServerRequest req, ServerResponse res, String name) { + return res.headers().values(HeaderNames.create(name)); } @Override diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetry.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetry.java index 7467c0471bc0..d9da6b16bb71 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetry.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetry.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.helidon.v4_3; import io.helidon.webserver.http.Filter; +import io.helidon.webserver.http.HttpRouting; import io.helidon.webserver.http.ServerRequest; import io.helidon.webserver.http.ServerResponse; import io.opentelemetry.api.OpenTelemetry; @@ -29,6 +30,10 @@ public static HelidonTelemetryBuilder builder(OpenTelemetry openTelemetry) { this.instrumenter = instrumenter; } + /** + * Construct a new OpenTelemetry enabled {@link Filter}. Add it with {@link + * HttpRouting.Builder#addFilter(Filter)} to start capturing telemetry. + */ public Filter createFilter() { return new OpenTelemetryFilter(instrumenter); } diff --git a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetryBuilder.java b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetryBuilder.java index 7f75b2c82589..abb032841919 100644 --- a/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetryBuilder.java +++ b/instrumentation/helidon-4.3/library/src/main/java/io/opentelemetry/instrumentation/helidon/v4_3/HelidonTelemetryBuilder.java @@ -17,7 +17,6 @@ import io.opentelemetry.instrumentation.helidon.v4_3.internal.Experimental; import io.opentelemetry.instrumentation.helidon.v4_3.internal.HelidonInstrumenterBuilderUtil; import java.util.Collection; -import java.util.function.Function; import java.util.function.UnaryOperator; public final class HelidonTelemetryBuilder { @@ -44,10 +43,7 @@ public final class HelidonTelemetryBuilder { /** Sets the status extractor for server spans. */ @CanIgnoreReturnValue public HelidonTelemetryBuilder setStatusExtractor( - Function< - SpanStatusExtractor, - SpanStatusExtractor> - statusExtractor) { + UnaryOperator> statusExtractor) { builder.setStatusExtractor(statusExtractor); return this; }