From 602aecb7fc72076ce43712a85f68a3b9399323f5 Mon Sep 17 00:00:00 2001 From: bradAtTraceable Date: Fri, 9 Sep 2022 08:42:30 -0700 Subject: [PATCH 1/2] Create 'otel.extension.library.version' attribute in all spans --- .../build.gradle.kts | 1 + .../apache-httpclient-4.0/build.gradle.kts | 1 + .../v4_0/ApacheHttpClientUtils.java | 3 + instrumentation/build.gradle.kts | 1 + instrumentation/grpc-1.6/build.gradle.kts | 1 + .../grpc/v1_6/GrpcSpanDecorator.java | 3 + ...ettyHttp2HeadersInstrumentationModule.java | 3 + .../v1_6/server/GrpcServerInterceptor.java | 2 + .../grpc-shaded-netty-1.9/build.gradle.kts | 1 + .../shaded/netty/utils/NettyUtils.java | 2 + instrumentation/java-streams/build.gradle.kts | 1 + .../java/inputstream/InputStreamUtils.java | 2 + .../jaxrs-client-2.0/build.gradle.kts | 1 + .../v2_0/JaxrsClientBodyCaptureFilter.java | 3 + .../v2_0/JaxrsClientEntityInterceptor.java | 2 + .../micronaut-1.0/build.gradle.kts | 1 + .../micronaut-3.0/build.gradle.kts | 1 + .../netty/netty-4.0/build.gradle.kts | 1 + .../netty/v4_0/DataCaptureUtils.java | 2 + .../HttpClientResponseTracingHandler.java | 3 + .../HttpServerResponseTracingHandler.java | 2 + .../netty/netty-4.1/build.gradle.kts | 1 + .../netty/v4_1/DataCaptureUtils.java | 2 + .../HttpClientResponseTracingHandler.java | 2 + .../HttpServerResponseTracingHandler.java | 2 + .../okhttp/okhttp-3.0/build.gradle.kts | 1 + .../okhttp/v3_0/OkHttpTracingInterceptor.java | 2 + .../servlet/servlet-3.0/build.gradle.kts | 1 + .../Servlet30AndFilterInstrumentation.java | 3 + .../servlet/v3_0/nowrapping/Utils.java | 3 + .../servlet/servlet-rw/build.gradle.kts | 1 + instrumentation/spark-2.3/build.gradle.kts | 1 + .../spring-webflux-5.0/build.gradle.kts | 1 + instrumentation/struts-2.3/build.gradle.kts | 1 + .../undertow/undertow-1.4/build.gradle.kts | 1 + ...dyCapturingExchangeCompletionListener.java | 2 + .../undertow-servlet-1.4/build.gradle.kts | 1 + instrumentation/utils/build.gradle.kts | 10 ++ .../hypertrace/utils/SpanUtils.java | 115 ++++++++++++++++++ .../hypertrace/utils/SpanUtilsTest.java | 112 +++++++++++++++++ .../vertx/vertx-web-3.0/build.gradle.kts | 1 + .../HttpRequestHandleInstrumentation.java | 2 + .../vertx/HttpRequestInstrumentation.java | 4 + .../vertx/ResponseBodyWrappingHandler.java | 3 + settings.gradle.kts | 2 + 45 files changed, 311 insertions(+) create mode 100644 instrumentation/utils/build.gradle.kts create mode 100644 instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtils.java create mode 100644 instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtilsTest.java diff --git a/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts b/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts index 957743c14..8ae735e9f 100644 --- a/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts +++ b/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts @@ -30,6 +30,7 @@ dependencies { api(project(":instrumentation:java-streams")) api(project(":instrumentation:apache-httpclient-4.0")) + implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-apache-httpasyncclient-4.1:${versions["opentelemetry_java_agent"]}") testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-apache-httpclient-4.0:${versions["opentelemetry_java_agent"]}") testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv:${versions["opentelemetry_semconv"]}") diff --git a/instrumentation/apache-httpclient-4.0/build.gradle.kts b/instrumentation/apache-httpclient-4.0/build.gradle.kts index bd0d8b337..cb6550893 100644 --- a/instrumentation/apache-httpclient-4.0/build.gradle.kts +++ b/instrumentation/apache-httpclient-4.0/build.gradle.kts @@ -43,6 +43,7 @@ dependencies { testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-apache-httpclient-4.0:${versions["opentelemetry_java_agent"]}") library("org.apache.httpcomponents:httpclient:4.0") + implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv:${versions["opentelemetry_semconv"]}") } diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java index 83c02d2ac..d847268f7 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java @@ -19,6 +19,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.apachehttpclient.v4_0.ApacheHttpClientObjectRegistry.SpanAndAttributeKey; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; @@ -48,10 +49,12 @@ private ApacheHttpClientUtils() {} public static void addResponseHeaders(Span span, HeaderIterator headerIterator) { addHeaders(span, headerIterator, HypertraceSemanticAttributes::httpResponseHeader); + SpanUtils.setSpanAttributes(span); } public static void addRequestHeaders(Span span, HeaderIterator headerIterator) { addHeaders(span, headerIterator, HypertraceSemanticAttributes::httpRequestHeader); + SpanUtils.setSpanAttributes(span); } private static void addHeaders( diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index 065d5736b..ad3aad250 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -4,6 +4,7 @@ plugins { } dependencies{ + implementation(project(":instrumentation:utils")) implementation(project(":instrumentation:servlet:servlet-rw")) implementation(project(":instrumentation:servlet:servlet-3.0")) implementation(project(":instrumentation:spark-2.3")) diff --git a/instrumentation/grpc-1.6/build.gradle.kts b/instrumentation/grpc-1.6/build.gradle.kts index 6babfafb1..22695d3e2 100644 --- a/instrumentation/grpc-1.6/build.gradle.kts +++ b/instrumentation/grpc-1.6/build.gradle.kts @@ -64,6 +64,7 @@ dependencies { testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-grpc-1.6:${versions["opentelemetry_java_agent"]}") implementation(project(":instrumentation:grpc-common")) implementation(project(":shaded-protobuf-java-util", "shadow")) + implementation(project(":instrumentation:utils")) compileOnly("io.grpc:grpc-core:${grpcVersion}") compileOnly("io.grpc:grpc-protobuf:${grpcVersion}") { diff --git a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java index a44289735..f31a37764 100644 --- a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java +++ b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java @@ -23,6 +23,7 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.com.google.protobuf.util.JsonFormat; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.GrpcSemanticAttributes; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; @@ -47,6 +48,7 @@ public static void addMessageAttribute(Object message, Span span, AttributeKey metadata, Span span) { diff --git a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java index 13ce76c43..aaca3f61f 100644 --- a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java +++ b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java @@ -30,6 +30,7 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.GrpcSemanticAttributes; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -119,6 +120,8 @@ public static void exit( GrpcSemanticAttributes.addColon(GrpcSemanticAttributes.METHOD)), method.toString()); } + + SpanUtils.setSpanAttributes(currentSpan); } } diff --git a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java index ee1630a2a..a5ceb1c19 100644 --- a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java +++ b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java @@ -27,6 +27,7 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.v1_6.GrpcInstrumentationName; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.v1_6.GrpcSpanDecorator; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.util.Map; import org.hypertrace.agent.core.config.InstrumentationConfig; import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes; @@ -51,6 +52,7 @@ public ServerCall.Listener interceptCall( if (instrumentationConfig.rpcMetadata().request()) { GrpcSpanDecorator.addMetadataAttributes(mapHeaders, currentSpan); } + SpanUtils.setSpanAttributes(currentSpan); boolean block = FilterRegistry.getFilter().evaluateRequestHeaders(currentSpan, mapHeaders); if (block) { diff --git a/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts b/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts index 2f5398c3e..3d63c6ca9 100644 --- a/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts +++ b/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts @@ -26,4 +26,5 @@ dependencies { compileOnly("io.grpc:grpc-core:1.9.0") compileOnly("io.grpc:grpc-netty-shaded:1.9.0") implementation(project(":instrumentation:grpc-common")) + implementation(project(":instrumentation:utils")) } \ No newline at end of file diff --git a/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java b/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java index e70afabf0..b9c7172b1 100644 --- a/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java +++ b/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java @@ -20,6 +20,7 @@ import io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Headers; import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.GrpcSemanticAttributes; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes; public class NettyUtils { @@ -66,5 +67,6 @@ public static void handleConvertClientHeaders( GrpcSemanticAttributes.addColon(GrpcSemanticAttributes.METHOD)), method.toString()); } + SpanUtils.setSpanAttributes(currentSpan); } } diff --git a/instrumentation/java-streams/build.gradle.kts b/instrumentation/java-streams/build.gradle.kts index 84301e05e..a05796938 100644 --- a/instrumentation/java-streams/build.gradle.kts +++ b/instrumentation/java-streams/build.gradle.kts @@ -22,6 +22,7 @@ afterEvaluate{ val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation("io.opentelemetry.javaagent:opentelemetry-muzzle:${versions["opentelemetry_java_agent"]}") } diff --git a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java index 9941b9239..4da274fad 100644 --- a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java +++ b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java @@ -22,6 +22,7 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.field.VirtualField; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -64,6 +65,7 @@ public static void addBody( try { String body = buffer.toString(charset.name()); InputStreamUtils.addAttribute(span, attributeKey, body); + SpanUtils.setSpanAttributes(span); } catch (UnsupportedEncodingException e) { log.error("Failed to parse encofing from charset {}", charset, e); } diff --git a/instrumentation/jaxrs-client-2.0/build.gradle.kts b/instrumentation/jaxrs-client-2.0/build.gradle.kts index 1672664bb..6e6b5e0d1 100644 --- a/instrumentation/jaxrs-client-2.0/build.gradle.kts +++ b/instrumentation/jaxrs-client-2.0/build.gradle.kts @@ -33,6 +33,7 @@ val versions: Map by extra dependencies { api(project(":instrumentation:java-streams")) + implementation(project(":instrumentation:utils")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-jaxrs-client-2.0-common:${versions["opentelemetry_java_agent_jaxrs"]}") compileOnly("javax.ws.rs:javax.ws.rs-api:2.0.1") diff --git a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java index 51688d08b..8b09300f0 100644 --- a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java +++ b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java @@ -19,6 +19,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -63,6 +64,7 @@ public void filter(ClientRequestContext requestContext) { currentSpan, HypertraceSemanticAttributes::httpRequestHeader, requestContext.getStringHeaders()); + SpanUtils.setSpanAttributes(currentSpan); } } catch (Exception ex) { log.error("Exception while getting request headers", ex); @@ -85,6 +87,7 @@ public void filter(ClientRequestContext requestContext, ClientResponseContext re currentSpan, HypertraceSemanticAttributes::httpResponseHeader, responseContext.getHeaders()); + SpanUtils.setSpanAttributes(currentSpan); } } catch (Exception ex) { log.error("Exception while getting response headers", ex); diff --git a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java index 1b1fe4e11..dd9f289f8 100644 --- a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java +++ b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java @@ -19,6 +19,7 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.field.VirtualField; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -154,6 +155,7 @@ public void aroundWriteTo(WriterInterceptorContext requestContext) outputStreamContextStore.set(entityStream, null); currentSpan.setAttribute( HypertraceSemanticAttributes.HTTP_REQUEST_BODY, buffer.toStringWithSuppliedCharset()); + SpanUtils.setSpanAttributes(currentSpan); } } } diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts index 266933290..96435c008 100644 --- a/instrumentation/micronaut-1.0/build.gradle.kts +++ b/instrumentation/micronaut-1.0/build.gradle.kts @@ -10,6 +10,7 @@ val micronautVersion = "1.0.0" val micronautTestVersion = "1.0.0" dependencies { + implementation(project(":instrumentation:utils")) implementation(project(":instrumentation:netty:netty-4.1")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}") testImplementation(testFixtures(project(":testing-common"))) diff --git a/instrumentation/micronaut-3.0/build.gradle.kts b/instrumentation/micronaut-3.0/build.gradle.kts index de78133ea..3f88a13fb 100644 --- a/instrumentation/micronaut-3.0/build.gradle.kts +++ b/instrumentation/micronaut-3.0/build.gradle.kts @@ -10,6 +10,7 @@ val micronautVersion = "3.2.0" val micronautTestVersion = "3.0.5" dependencies { + implementation(project(":instrumentation:utils")) implementation(project(":instrumentation:netty:netty-4.1")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}") testImplementation(testFixtures(project(":testing-common"))) diff --git a/instrumentation/netty/netty-4.0/build.gradle.kts b/instrumentation/netty/netty-4.0/build.gradle.kts index 8102439ed..2ad82557b 100644 --- a/instrumentation/netty/netty-4.0/build.gradle.kts +++ b/instrumentation/netty/netty-4.0/build.gradle.kts @@ -45,6 +45,7 @@ val versions: Map by extra val nettyVersion = "4.0.38.Final" dependencies { + implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.0:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry:opentelemetry-semconv:${versions["opentelemetry_semconv"]}") diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java index af6ed1ed2..b658d3fa9 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java @@ -24,6 +24,7 @@ import io.netty.util.Attribute; import io.netty.util.AttributeKey; import io.opentelemetry.api.trace.Span; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream; @@ -38,6 +39,7 @@ public static void captureBody( AttributeKey attributeKey, Object httpContentOrBuffer) { + SpanUtils.setSpanAttributes(span); Attribute bufferAttr = channel.attr(attributeKey); BoundedByteArrayOutputStream buffer = bufferAttr.get(); if (buffer == null) { diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java index 354d9f649..762f7ba6a 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java @@ -31,6 +31,7 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.NettyClientSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -61,6 +62,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { return; } Span span = Span.fromContext(context); + SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; @@ -104,6 +106,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, code); span.setStatus(code >= 100 && code < 400 ? StatusCode.UNSET : StatusCode.ERROR); } + SpanUtils.setSpanAttributes(span); if (msg instanceof LastHttpContent) { span.end(); } diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java index b4db2a620..4ed02304d 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java @@ -31,6 +31,7 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.NettyServerSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -60,6 +61,7 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) { return; } Span span = Span.fromContext(context); + SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; diff --git a/instrumentation/netty/netty-4.1/build.gradle.kts b/instrumentation/netty/netty-4.1/build.gradle.kts index 88c503893..3a3073876 100644 --- a/instrumentation/netty/netty-4.1/build.gradle.kts +++ b/instrumentation/netty/netty-4.1/build.gradle.kts @@ -43,6 +43,7 @@ afterEvaluate{ val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java index 3b1825483..bcb345c03 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java @@ -25,6 +25,7 @@ import io.netty.util.Attribute; import io.netty.util.AttributeKey; import io.opentelemetry.api.trace.Span; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream; @@ -64,6 +65,7 @@ public static void captureBody( // ignore charset was parsed before } } + SpanUtils.setSpanAttributes(span); } private static ByteBuf castToBuf(Object msg) { diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java index 07e06ba9a..af6441699 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java @@ -31,6 +31,7 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -61,6 +62,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { return; } Span span = Span.fromContext(context); + SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java index 543837049..1dd48e878 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java @@ -31,6 +31,7 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyServerSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -60,6 +61,7 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) { return; } Span span = Span.fromContext(context); + SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; diff --git a/instrumentation/okhttp/okhttp-3.0/build.gradle.kts b/instrumentation/okhttp/okhttp-3.0/build.gradle.kts index 6e2d9e8ce..d75460cca 100644 --- a/instrumentation/okhttp/okhttp-3.0/build.gradle.kts +++ b/instrumentation/okhttp/okhttp-3.0/build.gradle.kts @@ -25,6 +25,7 @@ afterEvaluate{ val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) compileOnly("com.squareup.okhttp3:okhttp:3.0.0") testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-okhttp-3.0:${versions["opentelemetry_java_agent"]}") testImplementation(testFixtures(project(":testing-common"))) diff --git a/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java b/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java index d2546a7da..4f545fa37 100644 --- a/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java +++ b/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java @@ -18,6 +18,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.util.function.Function; import okhttp3.Headers; @@ -47,6 +48,7 @@ public Response intercept(Chain chain) throws IOException { } Span span = Span.current(); + SpanUtils.setSpanAttributes(span); Request request = chain.request(); if (instrumentationConfig.httpHeaders().request()) { diff --git a/instrumentation/servlet/servlet-3.0/build.gradle.kts b/instrumentation/servlet/servlet-3.0/build.gradle.kts index 0720a6445..5edcdb3e1 100644 --- a/instrumentation/servlet/servlet-3.0/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/build.gradle.kts @@ -30,6 +30,7 @@ afterEvaluate{ val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}") // Servlet3Accessor testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java index 74a2aacb3..9c7eae832 100644 --- a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java @@ -29,6 +29,7 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.BufferedReader; import java.io.PrintWriter; import java.util.Collections; @@ -203,6 +204,8 @@ public static void exit( readerContextStore, urlEncodedMapContextStore); } + + SpanUtils.setSpanAttributes(currentSpan); } } finally { if (throwable instanceof HypertraceEvaluationException) { diff --git a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java index 3c271ca11..84f68605b 100644 --- a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java +++ b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java @@ -18,6 +18,7 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.instrumentation.api.field.VirtualField; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; @@ -36,6 +37,7 @@ public class Utils { private Utils() {} public static void addSessionId(Span span, HttpServletRequest httpRequest) { + if (httpRequest.isRequestedSessionIdValid()) { HttpSession session = httpRequest.getSession(); if (session != null && session.getId() != "") { @@ -79,6 +81,7 @@ public static void captureResponseBody( writerContextStore.set(printWriter, null); } } + SpanUtils.setSpanAttributes(span); } public static void resetRequestBodyBuffers( diff --git a/instrumentation/servlet/servlet-rw/build.gradle.kts b/instrumentation/servlet/servlet-rw/build.gradle.kts index a249d7153..dffbac376 100644 --- a/instrumentation/servlet/servlet-rw/build.gradle.kts +++ b/instrumentation/servlet/servlet-rw/build.gradle.kts @@ -22,6 +22,7 @@ afterEvaluate{ val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation("io.opentelemetry.javaagent:opentelemetry-muzzle:${versions["opentelemetry_java_agent"]}") } diff --git a/instrumentation/spark-2.3/build.gradle.kts b/instrumentation/spark-2.3/build.gradle.kts index 2f8e6744d..02860abbc 100644 --- a/instrumentation/spark-2.3/build.gradle.kts +++ b/instrumentation/spark-2.3/build.gradle.kts @@ -27,6 +27,7 @@ val versions: Map by extra dependencies { api(project(":instrumentation:servlet:servlet-3.0")) + implementation(project(":instrumentation:utils")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-spark-2.3:${versions["opentelemetry_java_agent"]}") testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/spring/spring-webflux-5.0/build.gradle.kts b/instrumentation/spring/spring-webflux-5.0/build.gradle.kts index 4b2ba1bcf..63529e553 100644 --- a/instrumentation/spring/spring-webflux-5.0/build.gradle.kts +++ b/instrumentation/spring/spring-webflux-5.0/build.gradle.kts @@ -7,6 +7,7 @@ plugins { val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation(project(":instrumentation:netty:netty-4.1")) testImplementation("org.springframework:spring-webflux:5.0.0.RELEASE") diff --git a/instrumentation/struts-2.3/build.gradle.kts b/instrumentation/struts-2.3/build.gradle.kts index a02a958cc..56016e581 100644 --- a/instrumentation/struts-2.3/build.gradle.kts +++ b/instrumentation/struts-2.3/build.gradle.kts @@ -6,6 +6,7 @@ plugins { val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) testImplementation(project(":instrumentation:servlet:servlet-rw")) testImplementation(project(":instrumentation:servlet:servlet-3.0")) testImplementation(testFixtures(project(":testing-common")) as ProjectDependency) { diff --git a/instrumentation/undertow/undertow-1.4/build.gradle.kts b/instrumentation/undertow/undertow-1.4/build.gradle.kts index 06f581558..2c306bac1 100644 --- a/instrumentation/undertow/undertow-1.4/build.gradle.kts +++ b/instrumentation/undertow/undertow-1.4/build.gradle.kts @@ -25,6 +25,7 @@ afterEvaluate{ val versions: Map by extra dependencies { + implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-undertow-1.4:${versions["opentelemetry_java_agent"]}") library("io.undertow:undertow-core:1.4.0.Final") implementation(project(":instrumentation:undertow:undertow-common")) diff --git a/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java b/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java index 9db79425a..f933015ba 100644 --- a/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java +++ b/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java @@ -16,6 +16,7 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.undertow.v1_4.utils; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.undertow.server.ExchangeCompletionListener; import io.undertow.server.HttpServerExchange; import java.io.UnsupportedEncodingException; @@ -45,6 +46,7 @@ public void exchangeEvent(HttpServerExchange exchange, NextListener nextListener return; } spanAndBuffer.span.setAttribute(HypertraceSemanticAttributes.HTTP_REQUEST_BODY, body); + SpanUtils.setSpanAttributes(spanAndBuffer.span); nextListener.proceed(); } } diff --git a/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts b/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts index a7555d69e..15448be71 100644 --- a/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts +++ b/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts @@ -23,6 +23,7 @@ afterEvaluate{ } dependencies { + implementation(project(":instrumentation:utils")) library("io.undertow:undertow-servlet:1.4.0.Final") implementation(project(":instrumentation:undertow:undertow-common")) } \ No newline at end of file diff --git a/instrumentation/utils/build.gradle.kts b/instrumentation/utils/build.gradle.kts new file mode 100644 index 000000000..3b3add2ad --- /dev/null +++ b/instrumentation/utils/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + `java-library` + id("io.opentelemetry.instrumentation.auto-instrumentation") +} + +val versions: Map by extra + +dependencies { + implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") +} diff --git a/instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtils.java b/instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtils.java new file mode 100644 index 000000000..9c42f34b7 --- /dev/null +++ b/instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtils.java @@ -0,0 +1,115 @@ +/* + * Copyright The Hypertrace Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opentelemetry.javaagent.instrumentation.hypertrace.utils; + +import io.opentelemetry.api.trace.Span; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.function.Supplier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Abstract class which contain static methods for adding hypertrace-specific attributes to a Span. + */ +public abstract class SpanUtils { + + static final String AGENT_VERSION_ATTRIBUTE_KEY = "otel.extension.library.version"; + private static final Logger logger = LoggerFactory.getLogger(SpanUtils.class.getName()); + + private static final ConcurrentMap ATTRIBUTE_MAP = new ConcurrentHashMap<>(); + + private static Supplier agentVersionSupplier = () -> getAgentVersion(); + + private static boolean errorObtainingAgentVersion; + + /** + * Obtains the current version of the Hypertrace agent. This is used to populate the + * "otel.extension.library.version" that is added to the Span. + * + * @return + */ + private static boolean setAgentVersion() { + String agentVersion = ATTRIBUTE_MAP.get(AGENT_VERSION_ATTRIBUTE_KEY); + + if (agentVersion == null && !errorObtainingAgentVersion) { + agentVersion = agentVersionSupplier.get(); + + if (agentVersion != null) { + ATTRIBUTE_MAP.put(AGENT_VERSION_ATTRIBUTE_KEY, agentVersion); + } else { + errorObtainingAgentVersion = true; + } + } + return !errorObtainingAgentVersion; + } + + /** + * Adds the hypertrace-specific attributes to the Span. + * + * @param span + */ + public static void setSpanAttributes(Span span) { + if (span == null) { + return; + } + + collect(); + + for (Map.Entry nextAttribute : ATTRIBUTE_MAP.entrySet()) { + span.setAttribute(nextAttribute.getKey(), nextAttribute.getValue()); + } + } + + /** + * Collects the data that is used for the attribute values. + * + * @return + */ + private static boolean collect() { + if (!setAgentVersion()) { + return false; + } + + return true; + } + + /** + * Obtain the agent version by obtaining the implementation version of the HypertraceAgent class. + * + * @return + */ + static String getAgentVersion() { + try { + Class clazz = Class.forName("org.hypertrace.agent.instrument.HypertraceAgent", true, null); + return clazz.getPackage().getImplementationVersion(); + } catch (ClassNotFoundException e) { + logger.warn("Could not load HypertraceAgent class"); + return null; + } + } + + /** + * For unit tests, replace the default agentVersionSupplier. + * + * @param _agentVersionSupplier + */ + static void setVersionSupplier(Supplier _agentVersionSupplier) { + agentVersionSupplier = _agentVersionSupplier; + } +} diff --git a/instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtilsTest.java b/instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtilsTest.java new file mode 100644 index 000000000..8b705be0b --- /dev/null +++ b/instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtilsTest.java @@ -0,0 +1,112 @@ +/* + * Copyright The Hypertrace Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opentelemetry.javaagent.instrumentation.hypertrace.utils; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.StatusCode; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class SpanUtilsTest { + private static class MockSpan implements Span { + + private final Map, String> attributeMap = new HashMap<>(); + + @Override + public Span setAttribute(AttributeKey key, T value) { + this.attributeMap.put((AttributeKey) key, (String) value); + return this; + } + + @Override + public Span addEvent(String name, Attributes attributes) { + return null; + } + + @Override + public Span addEvent(String name, Attributes attributes, long timestamp, TimeUnit unit) { + return null; + } + + @Override + public Span setStatus(StatusCode statusCode, String description) { + return null; + } + + @Override + public Span recordException(Throwable exception, Attributes additionalAttributes) { + return null; + } + + @Override + public Span updateName(String name) { + return null; + } + + @Override + public void end() {} + + @Override + public void end(long timestamp, TimeUnit unit) {} + + @Override + public SpanContext getSpanContext() { + return null; + } + + @Override + public boolean isRecording() { + return false; + } + + String getAttribute(String attributeKey) { + AttributeKey key = AttributeKey.stringKey(attributeKey); + return attributeMap.get(key); + } + } + + private static final String AGENT_VERSION = "1.2.3"; + + private MockSpan mockSpan; + + public SpanUtilsTest() { + super(); + } + + @BeforeEach + public void setup() { + mockSpan = new MockSpan(); + } + + @Test + public void testSetSpanAttributes() { + SpanUtils.setVersionSupplier(() -> AGENT_VERSION); + + SpanUtils.setSpanAttributes(mockSpan); + + String attrValue = mockSpan.getAttribute(SpanUtils.AGENT_VERSION_ATTRIBUTE_KEY); + + Assertions.assertEquals(AGENT_VERSION, attrValue); + } +} diff --git a/instrumentation/vertx/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx/vertx-web-3.0/build.gradle.kts index d4267e7a8..47755ba8f 100644 --- a/instrumentation/vertx/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx/vertx-web-3.0/build.gradle.kts @@ -26,6 +26,7 @@ val versions: Map by extra val nettyVersion = "4.0.28.Final" dependencies { + implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-web-3.0:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-http-client-3.0:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-http-client-common:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java index 415d0e112..f94e9ce64 100644 --- a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java +++ b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java @@ -25,6 +25,7 @@ import io.opentelemetry.instrumentation.api.field.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.vertx.client.Contexts; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpClientResponse; @@ -66,6 +67,7 @@ public static void handleResponseEnter( return; } Span span = Span.fromContext(contexts.context); + SpanUtils.setSpanAttributes(span); InstrumentationConfig instrumentationConfig = InstrumentationConfig.ConfigProvider.get(); if (instrumentationConfig.httpHeaders().request()) { diff --git a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java index c070384e7..248434d63 100644 --- a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java +++ b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java @@ -28,6 +28,7 @@ import io.opentelemetry.instrumentation.api.field.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.vertx.client.Contexts; import io.vertx.core.MultiMap; import io.vertx.core.buffer.Buffer; @@ -98,6 +99,7 @@ public static void enter(@Advice.This HttpClientRequest request) { return; } Span span = Span.fromContext(contexts.context); + SpanUtils.setSpanAttributes(span); BoundedCharArrayWriter buffer = VirtualField.find(MultiMap.class, BoundedCharArrayWriter.class).get(request.headers()); @@ -128,6 +130,7 @@ public static void enter( return; } Span span = Span.fromContext(contexts.context); + SpanUtils.setSpanAttributes(span); String contentType = request.headers().get("Content-Type"); InstrumentationConfig instrumentationConfig = InstrumentationConfig.ConfigProvider.get(); @@ -166,6 +169,7 @@ public static void enter( return; } Span span = Span.fromContext(contexts.context); + SpanUtils.setSpanAttributes(span); String contentType = request.headers().get("Content-Type"); InstrumentationConfig instrumentationConfig = InstrumentationConfig.ConfigProvider.get(); diff --git a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java index 6cb72287d..4adf728e4 100644 --- a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java +++ b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java @@ -20,6 +20,7 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; +import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes; @@ -42,6 +43,8 @@ public void handle(Buffer event) { String responseBody = event.getString(0, event.length()); if (span.isRecording()) { span.setAttribute(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY, responseBody); + SpanUtils.setSpanAttributes(span); + } else { tracer .spanBuilder(HypertraceSemanticAttributes.ADDITIONAL_DATA_SPAN_NAME) diff --git a/settings.gradle.kts b/settings.gradle.kts index 2edeb428b..4484ff1d2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -66,3 +66,5 @@ include("instrumentation:undertow:undertow-1.4") findProject(":instrumentation:undertow:undertow-1.4")?.name = "undertow-1.4" include("instrumentation:undertow:undertow-servlet-1.4") findProject(":instrumentation:undertow:undertow-servlet-1.4")?.name = "undertow-servlet-1.4" +include("instrumentation:utils") +findProject(":instrumentation:utils")?.name = "utils" From 2760946fda06bf97b905bf524620ea7426f5a82b Mon Sep 17 00:00:00 2001 From: bradAtTraceable Date: Fri, 9 Sep 2022 12:01:45 -0700 Subject: [PATCH 2/2] Create new attribute only in one place --- .../apache-httpasyncclient-4.1/build.gradle.kts | 1 - instrumentation/apache-httpclient-4.0/build.gradle.kts | 1 - .../apachehttpclient/v4_0/ApacheHttpClientUtils.java | 3 --- instrumentation/build.gradle.kts | 1 - instrumentation/grpc-1.6/build.gradle.kts | 1 - .../hypertrace/grpc/v1_6/GrpcSpanDecorator.java | 3 --- .../v1_6/NettyHttp2HeadersInstrumentationModule.java | 3 --- .../grpc/v1_6/server/GrpcServerInterceptor.java | 2 -- instrumentation/grpc-shaded-netty-1.9/build.gradle.kts | 1 - .../instrumentation/shaded/netty/utils/NettyUtils.java | 2 -- instrumentation/java-streams/build.gradle.kts | 1 - .../hypertrace/java/inputstream/InputStreamUtils.java | 2 -- instrumentation/jaxrs-client-2.0/build.gradle.kts | 1 - .../jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java | 3 --- .../jaxrs/v2_0/JaxrsClientEntityInterceptor.java | 2 -- instrumentation/micronaut-1.0/build.gradle.kts | 1 - instrumentation/micronaut-3.0/build.gradle.kts | 1 - instrumentation/netty/netty-4.0/build.gradle.kts | 1 - .../hypertrace/netty/v4_0/DataCaptureUtils.java | 2 -- .../v4_0/client/HttpClientResponseTracingHandler.java | 3 --- .../v4_0/server/HttpServerResponseTracingHandler.java | 2 -- instrumentation/netty/netty-4.1/build.gradle.kts | 1 - .../hypertrace/netty/v4_1/DataCaptureUtils.java | 2 -- .../v4_1/client/HttpClientResponseTracingHandler.java | 2 -- .../v4_1/server/HttpServerResponseTracingHandler.java | 2 -- instrumentation/okhttp/okhttp-3.0/build.gradle.kts | 1 - .../okhttp/v3_0/OkHttpTracingInterceptor.java | 2 -- instrumentation/servlet/servlet-3.0/build.gradle.kts | 1 - .../nowrapping/Servlet30AndFilterInstrumentation.java | 3 --- .../hypertrace/servlet/v3_0/nowrapping/Utils.java | 3 --- instrumentation/servlet/servlet-rw/build.gradle.kts | 1 - instrumentation/spark-2.3/build.gradle.kts | 1 - .../spring/spring-webflux-5.0/build.gradle.kts | 1 - instrumentation/struts-2.3/build.gradle.kts | 1 - instrumentation/undertow/undertow-1.4/build.gradle.kts | 1 - .../utils/BodyCapturingExchangeCompletionListener.java | 2 -- .../undertow/undertow-servlet-1.4/build.gradle.kts | 1 - instrumentation/utils/build.gradle.kts | 10 ---------- instrumentation/vertx/vertx-web-3.0/build.gradle.kts | 1 - .../vertx/HttpRequestHandleInstrumentation.java | 2 -- .../hypertrace/vertx/HttpRequestInstrumentation.java | 4 ---- .../hypertrace/vertx/ResponseBodyWrappingHandler.java | 3 --- .../hypertrace/agent/otel/extensions}/SpanUtils.java | 5 +---- .../extensions/processor/AddTagsSpanProcessor.java | 3 +++ .../agent/otel/extensions}/SpanUtilsTest.java | 8 +++++++- settings.gradle.kts | 2 -- 46 files changed, 11 insertions(+), 89 deletions(-) delete mode 100644 instrumentation/utils/build.gradle.kts rename {instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils => otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions}/SpanUtils.java (94%) rename {instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils => otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions}/SpanUtilsTest.java (91%) diff --git a/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts b/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts index 8ae735e9f..957743c14 100644 --- a/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts +++ b/instrumentation/apache-httpasyncclient-4.1/build.gradle.kts @@ -30,7 +30,6 @@ dependencies { api(project(":instrumentation:java-streams")) api(project(":instrumentation:apache-httpclient-4.0")) - implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-apache-httpasyncclient-4.1:${versions["opentelemetry_java_agent"]}") testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-apache-httpclient-4.0:${versions["opentelemetry_java_agent"]}") testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv:${versions["opentelemetry_semconv"]}") diff --git a/instrumentation/apache-httpclient-4.0/build.gradle.kts b/instrumentation/apache-httpclient-4.0/build.gradle.kts index cb6550893..bd0d8b337 100644 --- a/instrumentation/apache-httpclient-4.0/build.gradle.kts +++ b/instrumentation/apache-httpclient-4.0/build.gradle.kts @@ -43,7 +43,6 @@ dependencies { testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-apache-httpclient-4.0:${versions["opentelemetry_java_agent"]}") library("org.apache.httpcomponents:httpclient:4.0") - implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv:${versions["opentelemetry_semconv"]}") } diff --git a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java index d847268f7..83c02d2ac 100644 --- a/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java +++ b/instrumentation/apache-httpclient-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/apachehttpclient/v4_0/ApacheHttpClientUtils.java @@ -19,7 +19,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.apachehttpclient.v4_0.ApacheHttpClientObjectRegistry.SpanAndAttributeKey; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; @@ -49,12 +48,10 @@ private ApacheHttpClientUtils() {} public static void addResponseHeaders(Span span, HeaderIterator headerIterator) { addHeaders(span, headerIterator, HypertraceSemanticAttributes::httpResponseHeader); - SpanUtils.setSpanAttributes(span); } public static void addRequestHeaders(Span span, HeaderIterator headerIterator) { addHeaders(span, headerIterator, HypertraceSemanticAttributes::httpRequestHeader); - SpanUtils.setSpanAttributes(span); } private static void addHeaders( diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index ad3aad250..065d5736b 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -4,7 +4,6 @@ plugins { } dependencies{ - implementation(project(":instrumentation:utils")) implementation(project(":instrumentation:servlet:servlet-rw")) implementation(project(":instrumentation:servlet:servlet-3.0")) implementation(project(":instrumentation:spark-2.3")) diff --git a/instrumentation/grpc-1.6/build.gradle.kts b/instrumentation/grpc-1.6/build.gradle.kts index 22695d3e2..6babfafb1 100644 --- a/instrumentation/grpc-1.6/build.gradle.kts +++ b/instrumentation/grpc-1.6/build.gradle.kts @@ -64,7 +64,6 @@ dependencies { testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-grpc-1.6:${versions["opentelemetry_java_agent"]}") implementation(project(":instrumentation:grpc-common")) implementation(project(":shaded-protobuf-java-util", "shadow")) - implementation(project(":instrumentation:utils")) compileOnly("io.grpc:grpc-core:${grpcVersion}") compileOnly("io.grpc:grpc-protobuf:${grpcVersion}") { diff --git a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java index f31a37764..a44289735 100644 --- a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java +++ b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/GrpcSpanDecorator.java @@ -23,7 +23,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.com.google.protobuf.util.JsonFormat; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.GrpcSemanticAttributes; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; @@ -48,7 +47,6 @@ public static void addMessageAttribute(Object message, Span span, AttributeKey metadata, Span span) { diff --git a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java index aaca3f61f..13ce76c43 100644 --- a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java +++ b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/NettyHttp2HeadersInstrumentationModule.java @@ -30,7 +30,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.GrpcSemanticAttributes; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -120,8 +119,6 @@ public static void exit( GrpcSemanticAttributes.addColon(GrpcSemanticAttributes.METHOD)), method.toString()); } - - SpanUtils.setSpanAttributes(currentSpan); } } diff --git a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java index a5ceb1c19..ee1630a2a 100644 --- a/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java +++ b/instrumentation/grpc-1.6/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/grpc/v1_6/server/GrpcServerInterceptor.java @@ -27,7 +27,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.v1_6.GrpcInstrumentationName; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.v1_6.GrpcSpanDecorator; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.util.Map; import org.hypertrace.agent.core.config.InstrumentationConfig; import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes; @@ -52,7 +51,6 @@ public ServerCall.Listener interceptCall( if (instrumentationConfig.rpcMetadata().request()) { GrpcSpanDecorator.addMetadataAttributes(mapHeaders, currentSpan); } - SpanUtils.setSpanAttributes(currentSpan); boolean block = FilterRegistry.getFilter().evaluateRequestHeaders(currentSpan, mapHeaders); if (block) { diff --git a/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts b/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts index 3d63c6ca9..2f5398c3e 100644 --- a/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts +++ b/instrumentation/grpc-shaded-netty-1.9/build.gradle.kts @@ -26,5 +26,4 @@ dependencies { compileOnly("io.grpc:grpc-core:1.9.0") compileOnly("io.grpc:grpc-netty-shaded:1.9.0") implementation(project(":instrumentation:grpc-common")) - implementation(project(":instrumentation:utils")) } \ No newline at end of file diff --git a/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java b/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java index b9c7172b1..e70afabf0 100644 --- a/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java +++ b/instrumentation/grpc-shaded-netty-1.9/src/main/java/io/opentelemetry/javaagent/instrumentation/shaded/netty/utils/NettyUtils.java @@ -20,7 +20,6 @@ import io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Headers; import io.opentelemetry.api.trace.Span; import io.opentelemetry.javaagent.instrumentation.hypertrace.grpc.GrpcSemanticAttributes; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes; public class NettyUtils { @@ -67,6 +66,5 @@ public static void handleConvertClientHeaders( GrpcSemanticAttributes.addColon(GrpcSemanticAttributes.METHOD)), method.toString()); } - SpanUtils.setSpanAttributes(currentSpan); } } diff --git a/instrumentation/java-streams/build.gradle.kts b/instrumentation/java-streams/build.gradle.kts index a05796938..84301e05e 100644 --- a/instrumentation/java-streams/build.gradle.kts +++ b/instrumentation/java-streams/build.gradle.kts @@ -22,7 +22,6 @@ afterEvaluate{ val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation("io.opentelemetry.javaagent:opentelemetry-muzzle:${versions["opentelemetry_java_agent"]}") } diff --git a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java index 4da274fad..9941b9239 100644 --- a/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java +++ b/instrumentation/java-streams/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/java/inputstream/InputStreamUtils.java @@ -22,7 +22,6 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.field.VirtualField; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -65,7 +64,6 @@ public static void addBody( try { String body = buffer.toString(charset.name()); InputStreamUtils.addAttribute(span, attributeKey, body); - SpanUtils.setSpanAttributes(span); } catch (UnsupportedEncodingException e) { log.error("Failed to parse encofing from charset {}", charset, e); } diff --git a/instrumentation/jaxrs-client-2.0/build.gradle.kts b/instrumentation/jaxrs-client-2.0/build.gradle.kts index 6e6b5e0d1..1672664bb 100644 --- a/instrumentation/jaxrs-client-2.0/build.gradle.kts +++ b/instrumentation/jaxrs-client-2.0/build.gradle.kts @@ -33,7 +33,6 @@ val versions: Map by extra dependencies { api(project(":instrumentation:java-streams")) - implementation(project(":instrumentation:utils")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-jaxrs-client-2.0-common:${versions["opentelemetry_java_agent_jaxrs"]}") compileOnly("javax.ws.rs:javax.ws.rs-api:2.0.1") diff --git a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java index 8b09300f0..51688d08b 100644 --- a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java +++ b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientBodyCaptureFilter.java @@ -19,7 +19,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -64,7 +63,6 @@ public void filter(ClientRequestContext requestContext) { currentSpan, HypertraceSemanticAttributes::httpRequestHeader, requestContext.getStringHeaders()); - SpanUtils.setSpanAttributes(currentSpan); } } catch (Exception ex) { log.error("Exception while getting request headers", ex); @@ -87,7 +85,6 @@ public void filter(ClientRequestContext requestContext, ClientResponseContext re currentSpan, HypertraceSemanticAttributes::httpResponseHeader, responseContext.getHeaders()); - SpanUtils.setSpanAttributes(currentSpan); } } catch (Exception ex) { log.error("Exception while getting response headers", ex); diff --git a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java index dd9f289f8..1b1fe4e11 100644 --- a/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java +++ b/instrumentation/jaxrs-client-2.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/jaxrs/v2_0/JaxrsClientEntityInterceptor.java @@ -19,7 +19,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.field.VirtualField; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -155,7 +154,6 @@ public void aroundWriteTo(WriterInterceptorContext requestContext) outputStreamContextStore.set(entityStream, null); currentSpan.setAttribute( HypertraceSemanticAttributes.HTTP_REQUEST_BODY, buffer.toStringWithSuppliedCharset()); - SpanUtils.setSpanAttributes(currentSpan); } } } diff --git a/instrumentation/micronaut-1.0/build.gradle.kts b/instrumentation/micronaut-1.0/build.gradle.kts index 96435c008..266933290 100644 --- a/instrumentation/micronaut-1.0/build.gradle.kts +++ b/instrumentation/micronaut-1.0/build.gradle.kts @@ -10,7 +10,6 @@ val micronautVersion = "1.0.0" val micronautTestVersion = "1.0.0" dependencies { - implementation(project(":instrumentation:utils")) implementation(project(":instrumentation:netty:netty-4.1")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}") testImplementation(testFixtures(project(":testing-common"))) diff --git a/instrumentation/micronaut-3.0/build.gradle.kts b/instrumentation/micronaut-3.0/build.gradle.kts index 3f88a13fb..de78133ea 100644 --- a/instrumentation/micronaut-3.0/build.gradle.kts +++ b/instrumentation/micronaut-3.0/build.gradle.kts @@ -10,7 +10,6 @@ val micronautVersion = "3.2.0" val micronautTestVersion = "3.0.5" dependencies { - implementation(project(":instrumentation:utils")) implementation(project(":instrumentation:netty:netty-4.1")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}") testImplementation(testFixtures(project(":testing-common"))) diff --git a/instrumentation/netty/netty-4.0/build.gradle.kts b/instrumentation/netty/netty-4.0/build.gradle.kts index 2ad82557b..8102439ed 100644 --- a/instrumentation/netty/netty-4.0/build.gradle.kts +++ b/instrumentation/netty/netty-4.0/build.gradle.kts @@ -45,7 +45,6 @@ val versions: Map by extra val nettyVersion = "4.0.38.Final" dependencies { - implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.0:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry:opentelemetry-semconv:${versions["opentelemetry_semconv"]}") diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java index b658d3fa9..af6ed1ed2 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/DataCaptureUtils.java @@ -24,7 +24,6 @@ import io.netty.util.Attribute; import io.netty.util.AttributeKey; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream; @@ -39,7 +38,6 @@ public static void captureBody( AttributeKey attributeKey, Object httpContentOrBuffer) { - SpanUtils.setSpanAttributes(span); Attribute bufferAttr = channel.attr(attributeKey); BoundedByteArrayOutputStream buffer = bufferAttr.get(); if (buffer == null) { diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java index 762f7ba6a..354d9f649 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java @@ -31,7 +31,6 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.NettyClientSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -62,7 +61,6 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { return; } Span span = Span.fromContext(context); - SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; @@ -106,7 +104,6 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, code); span.setStatus(code >= 100 && code < 400 ? StatusCode.UNSET : StatusCode.ERROR); } - SpanUtils.setSpanAttributes(span); if (msg instanceof LastHttpContent) { span.end(); } diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java index 4ed02304d..b4db2a620 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java @@ -31,7 +31,6 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.NettyServerSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -61,7 +60,6 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) { return; } Span span = Span.fromContext(context); - SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; diff --git a/instrumentation/netty/netty-4.1/build.gradle.kts b/instrumentation/netty/netty-4.1/build.gradle.kts index 3a3073876..88c503893 100644 --- a/instrumentation/netty/netty-4.1/build.gradle.kts +++ b/instrumentation/netty/netty-4.1/build.gradle.kts @@ -43,7 +43,6 @@ afterEvaluate{ val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-netty-4.1:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java index bcb345c03..3b1825483 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/DataCaptureUtils.java @@ -25,7 +25,6 @@ import io.netty.util.Attribute; import io.netty.util.AttributeKey; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import org.hypertrace.agent.core.instrumentation.buffer.BoundedByteArrayOutputStream; @@ -65,7 +64,6 @@ public static void captureBody( // ignore charset was parsed before } } - SpanUtils.setSpanAttributes(span); } private static ByteBuf castToBuf(Object msg) { diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java index af6441699..07e06ba9a 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java @@ -31,7 +31,6 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -62,7 +61,6 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { return; } Span span = Span.fromContext(context); - SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; diff --git a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java index 1dd48e878..543837049 100644 --- a/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java +++ b/instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java @@ -31,7 +31,6 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys; import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyServerSingletons; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.nio.charset.Charset; @@ -61,7 +60,6 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise prm) { return; } Span span = Span.fromContext(context); - SpanUtils.setSpanAttributes(span); if (msg instanceof HttpResponse) { HttpResponse httpResponse = (HttpResponse) msg; diff --git a/instrumentation/okhttp/okhttp-3.0/build.gradle.kts b/instrumentation/okhttp/okhttp-3.0/build.gradle.kts index d75460cca..6e2d9e8ce 100644 --- a/instrumentation/okhttp/okhttp-3.0/build.gradle.kts +++ b/instrumentation/okhttp/okhttp-3.0/build.gradle.kts @@ -25,7 +25,6 @@ afterEvaluate{ val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) compileOnly("com.squareup.okhttp3:okhttp:3.0.0") testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-okhttp-3.0:${versions["opentelemetry_java_agent"]}") testImplementation(testFixtures(project(":testing-common"))) diff --git a/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java b/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java index 4f545fa37..d2546a7da 100644 --- a/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java +++ b/instrumentation/okhttp/okhttp-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/okhttp/v3_0/OkHttpTracingInterceptor.java @@ -18,7 +18,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.IOException; import java.util.function.Function; import okhttp3.Headers; @@ -48,7 +47,6 @@ public Response intercept(Chain chain) throws IOException { } Span span = Span.current(); - SpanUtils.setSpanAttributes(span); Request request = chain.request(); if (instrumentationConfig.httpHeaders().request()) { diff --git a/instrumentation/servlet/servlet-3.0/build.gradle.kts b/instrumentation/servlet/servlet-3.0/build.gradle.kts index 5edcdb3e1..0720a6445 100644 --- a/instrumentation/servlet/servlet-3.0/build.gradle.kts +++ b/instrumentation/servlet/servlet-3.0/build.gradle.kts @@ -30,7 +30,6 @@ afterEvaluate{ val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}") // Servlet3Accessor testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java index 9c7eae832..74a2aacb3 100644 --- a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java +++ b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Servlet30AndFilterInstrumentation.java @@ -29,7 +29,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.BufferedReader; import java.io.PrintWriter; import java.util.Collections; @@ -204,8 +203,6 @@ public static void exit( readerContextStore, urlEncodedMapContextStore); } - - SpanUtils.setSpanAttributes(currentSpan); } } finally { if (throwable instanceof HypertraceEvaluationException) { diff --git a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java index 84f68605b..3c271ca11 100644 --- a/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java +++ b/instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/Utils.java @@ -18,7 +18,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.instrumentation.api.field.VirtualField; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; @@ -37,7 +36,6 @@ public class Utils { private Utils() {} public static void addSessionId(Span span, HttpServletRequest httpRequest) { - if (httpRequest.isRequestedSessionIdValid()) { HttpSession session = httpRequest.getSession(); if (session != null && session.getId() != "") { @@ -81,7 +79,6 @@ public static void captureResponseBody( writerContextStore.set(printWriter, null); } } - SpanUtils.setSpanAttributes(span); } public static void resetRequestBodyBuffers( diff --git a/instrumentation/servlet/servlet-rw/build.gradle.kts b/instrumentation/servlet/servlet-rw/build.gradle.kts index dffbac376..a249d7153 100644 --- a/instrumentation/servlet/servlet-rw/build.gradle.kts +++ b/instrumentation/servlet/servlet-rw/build.gradle.kts @@ -22,7 +22,6 @@ afterEvaluate{ val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation("io.opentelemetry.javaagent:opentelemetry-muzzle:${versions["opentelemetry_java_agent"]}") } diff --git a/instrumentation/spark-2.3/build.gradle.kts b/instrumentation/spark-2.3/build.gradle.kts index 02860abbc..2f8e6744d 100644 --- a/instrumentation/spark-2.3/build.gradle.kts +++ b/instrumentation/spark-2.3/build.gradle.kts @@ -27,7 +27,6 @@ val versions: Map by extra dependencies { api(project(":instrumentation:servlet:servlet-3.0")) - implementation(project(":instrumentation:utils")) testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-spark-2.3:${versions["opentelemetry_java_agent"]}") testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/spring/spring-webflux-5.0/build.gradle.kts b/instrumentation/spring/spring-webflux-5.0/build.gradle.kts index 63529e553..4b2ba1bcf 100644 --- a/instrumentation/spring/spring-webflux-5.0/build.gradle.kts +++ b/instrumentation/spring/spring-webflux-5.0/build.gradle.kts @@ -7,7 +7,6 @@ plugins { val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) testImplementation(testFixtures(project(":testing-common"))) testImplementation(project(":instrumentation:netty:netty-4.1")) testImplementation("org.springframework:spring-webflux:5.0.0.RELEASE") diff --git a/instrumentation/struts-2.3/build.gradle.kts b/instrumentation/struts-2.3/build.gradle.kts index 56016e581..a02a958cc 100644 --- a/instrumentation/struts-2.3/build.gradle.kts +++ b/instrumentation/struts-2.3/build.gradle.kts @@ -6,7 +6,6 @@ plugins { val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) testImplementation(project(":instrumentation:servlet:servlet-rw")) testImplementation(project(":instrumentation:servlet:servlet-3.0")) testImplementation(testFixtures(project(":testing-common")) as ProjectDependency) { diff --git a/instrumentation/undertow/undertow-1.4/build.gradle.kts b/instrumentation/undertow/undertow-1.4/build.gradle.kts index 2c306bac1..06f581558 100644 --- a/instrumentation/undertow/undertow-1.4/build.gradle.kts +++ b/instrumentation/undertow/undertow-1.4/build.gradle.kts @@ -25,7 +25,6 @@ afterEvaluate{ val versions: Map by extra dependencies { - implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-undertow-1.4:${versions["opentelemetry_java_agent"]}") library("io.undertow:undertow-core:1.4.0.Final") implementation(project(":instrumentation:undertow:undertow-common")) diff --git a/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java b/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java index f933015ba..9db79425a 100644 --- a/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java +++ b/instrumentation/undertow/undertow-1.4/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/undertow/v1_4/utils/BodyCapturingExchangeCompletionListener.java @@ -16,7 +16,6 @@ package io.opentelemetry.javaagent.instrumentation.hypertrace.undertow.v1_4.utils; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.undertow.server.ExchangeCompletionListener; import io.undertow.server.HttpServerExchange; import java.io.UnsupportedEncodingException; @@ -46,7 +45,6 @@ public void exchangeEvent(HttpServerExchange exchange, NextListener nextListener return; } spanAndBuffer.span.setAttribute(HypertraceSemanticAttributes.HTTP_REQUEST_BODY, body); - SpanUtils.setSpanAttributes(spanAndBuffer.span); nextListener.proceed(); } } diff --git a/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts b/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts index 15448be71..a7555d69e 100644 --- a/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts +++ b/instrumentation/undertow/undertow-servlet-1.4/build.gradle.kts @@ -23,7 +23,6 @@ afterEvaluate{ } dependencies { - implementation(project(":instrumentation:utils")) library("io.undertow:undertow-servlet:1.4.0.Final") implementation(project(":instrumentation:undertow:undertow-common")) } \ No newline at end of file diff --git a/instrumentation/utils/build.gradle.kts b/instrumentation/utils/build.gradle.kts deleted file mode 100644 index 3b3add2ad..000000000 --- a/instrumentation/utils/build.gradle.kts +++ /dev/null @@ -1,10 +0,0 @@ -plugins { - `java-library` - id("io.opentelemetry.instrumentation.auto-instrumentation") -} - -val versions: Map by extra - -dependencies { - implementation("org.slf4j:slf4j-api:${versions["slf4j"]}") -} diff --git a/instrumentation/vertx/vertx-web-3.0/build.gradle.kts b/instrumentation/vertx/vertx-web-3.0/build.gradle.kts index 47755ba8f..d4267e7a8 100644 --- a/instrumentation/vertx/vertx-web-3.0/build.gradle.kts +++ b/instrumentation/vertx/vertx-web-3.0/build.gradle.kts @@ -26,7 +26,6 @@ val versions: Map by extra val nettyVersion = "4.0.28.Final" dependencies { - implementation(project(":instrumentation:utils")) implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-web-3.0:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-http-client-3.0:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-vertx-http-client-common:${versions["opentelemetry_java_agent"]}") diff --git a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java index f94e9ce64..415d0e112 100644 --- a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java +++ b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestHandleInstrumentation.java @@ -25,7 +25,6 @@ import io.opentelemetry.instrumentation.api.field.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.vertx.client.Contexts; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpClientResponse; @@ -67,7 +66,6 @@ public static void handleResponseEnter( return; } Span span = Span.fromContext(contexts.context); - SpanUtils.setSpanAttributes(span); InstrumentationConfig instrumentationConfig = InstrumentationConfig.ConfigProvider.get(); if (instrumentationConfig.httpHeaders().request()) { diff --git a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java index 248434d63..c070384e7 100644 --- a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java +++ b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/HttpRequestInstrumentation.java @@ -28,7 +28,6 @@ import io.opentelemetry.instrumentation.api.field.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.opentelemetry.javaagent.instrumentation.vertx.client.Contexts; import io.vertx.core.MultiMap; import io.vertx.core.buffer.Buffer; @@ -99,7 +98,6 @@ public static void enter(@Advice.This HttpClientRequest request) { return; } Span span = Span.fromContext(contexts.context); - SpanUtils.setSpanAttributes(span); BoundedCharArrayWriter buffer = VirtualField.find(MultiMap.class, BoundedCharArrayWriter.class).get(request.headers()); @@ -130,7 +128,6 @@ public static void enter( return; } Span span = Span.fromContext(contexts.context); - SpanUtils.setSpanAttributes(span); String contentType = request.headers().get("Content-Type"); InstrumentationConfig instrumentationConfig = InstrumentationConfig.ConfigProvider.get(); @@ -169,7 +166,6 @@ public static void enter( return; } Span span = Span.fromContext(contexts.context); - SpanUtils.setSpanAttributes(span); String contentType = request.headers().get("Content-Type"); InstrumentationConfig instrumentationConfig = InstrumentationConfig.ConfigProvider.get(); diff --git a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java index 4adf728e4..6cb72287d 100644 --- a/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java +++ b/instrumentation/vertx/vertx-web-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/vertx/ResponseBodyWrappingHandler.java @@ -20,7 +20,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.instrumentation.hypertrace.utils.SpanUtils; import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import org.hypertrace.agent.core.instrumentation.HypertraceSemanticAttributes; @@ -43,8 +42,6 @@ public void handle(Buffer event) { String responseBody = event.getString(0, event.length()); if (span.isRecording()) { span.setAttribute(HypertraceSemanticAttributes.HTTP_RESPONSE_BODY, responseBody); - SpanUtils.setSpanAttributes(span); - } else { tracer .spanBuilder(HypertraceSemanticAttributes.ADDITIONAL_DATA_SPAN_NAME) diff --git a/instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtils.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/SpanUtils.java similarity index 94% rename from instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtils.java rename to otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/SpanUtils.java index 9c42f34b7..757f6cfab 100644 --- a/instrumentation/utils/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtils.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/SpanUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.opentelemetry.javaagent.instrumentation.hypertrace.utils; +package org.hypertrace.agent.otel.extensions; import io.opentelemetry.api.trace.Span; import java.util.Map; @@ -24,9 +24,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/** - * Abstract class which contain static methods for adding hypertrace-specific attributes to a Span. - */ public abstract class SpanUtils { static final String AGENT_VERSION_ATTRIBUTE_KEY = "otel.extension.library.version"; diff --git a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/AddTagsSpanProcessor.java b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/AddTagsSpanProcessor.java index c78a1ff19..a1d30bfff 100644 --- a/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/AddTagsSpanProcessor.java +++ b/otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/AddTagsSpanProcessor.java @@ -23,6 +23,7 @@ import io.opentelemetry.sdk.trace.SpanProcessor; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; import org.hypertrace.agent.otel.extensions.CgroupsReader; +import org.hypertrace.agent.otel.extensions.SpanUtils; public class AddTagsSpanProcessor implements SpanProcessor { @@ -40,6 +41,8 @@ public void onStart(Context parentContext, ReadWriteSpan span) { if (containerId != null && !containerId.isEmpty()) { span.setAttribute(ResourceAttributes.CONTAINER_ID, containerId); } + + SpanUtils.setSpanAttributes(span); } @Override diff --git a/instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtilsTest.java b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/SpanUtilsTest.java similarity index 91% rename from instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtilsTest.java rename to otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/SpanUtilsTest.java index 8b705be0b..a408e348d 100644 --- a/instrumentation/utils/src/test/java/io/opentelemetry/javaagent/instrumentation/hypertrace/utils/SpanUtilsTest.java +++ b/otel-extensions/src/test/java/org/hypertrace/agent/otel/extensions/SpanUtilsTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.opentelemetry.javaagent.instrumentation.hypertrace.utils; +package org.hypertrace.agent.otel.extensions; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; @@ -28,7 +28,13 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +/** Unit tests for SpanUtils. */ public class SpanUtilsTest { + + /** + * We can't seem to create mocks using Mockito in this environment, so we create a concrete + * implementation of the Span interface, to serve as a mock. + */ private static class MockSpan implements Span { private final Map, String> attributeMap = new HashMap<>(); diff --git a/settings.gradle.kts b/settings.gradle.kts index 4484ff1d2..2edeb428b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -66,5 +66,3 @@ include("instrumentation:undertow:undertow-1.4") findProject(":instrumentation:undertow:undertow-1.4")?.name = "undertow-1.4" include("instrumentation:undertow:undertow-servlet-1.4") findProject(":instrumentation:undertow:undertow-servlet-1.4")?.name = "undertow-servlet-1.4" -include("instrumentation:utils") -findProject(":instrumentation:utils")?.name = "utils"