From 496b07054df735053ee4697a3cd74f93e85e358e Mon Sep 17 00:00:00 2001 From: Yashwant Date: Tue, 5 Aug 2025 17:01:05 +0530 Subject: [PATCH 1/7] complete relocation --- instrumentation/build.gradle.kts | 33 +++++++++++++++++--------------- javaagent/build.gradle.kts | 28 ++++++++++++++------------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index 6a2d1b42..c33d8fd4 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -40,27 +40,30 @@ tasks { mergeServiceFiles() - relocate("com.blogspot.mydailyjava.weaklockfree", "io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") + relocate("com.blogspot.mydailyjava.weaklockfree", "ai.traceable.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") exclude("**/module-info.class") - relocate("org.slf4j", "io.opentelemetry.javaagent.slf4j") - relocate("java.util.logging.Logger", "io.opentelemetry.javaagent.bootstrap.PatchLogger") + relocate("org.slf4j", "ai.traceable.io.opentelemetry.javaagent.slf4j") + relocate("java.util.logging.Logger", "ai.traceable.io.opentelemetry.javaagent.bootstrap.PatchLogger") + + relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") // // prevents conflict with library instrumentation - relocate("io.opentelemetry.instrumentation.api", "io.opentelemetry.javaagent.shaded.instrumentation.api") - //opentelemetry rewrite library instrumentation dependencies - relocate("io.opentelemetry.instrumentation", "io.opentelemetry.javaagent.shaded.instrumentation") { - exclude("io.opentelemetry.javaagent.instrumentation.**") - } +// relocate("io.opentelemetry.instrumentation.api", "io.opentelemetry.javaagent.shaded.instrumentation.api") +// //opentelemetry rewrite library instrumentation dependencies +// relocate("io.opentelemetry.instrumentation", "io.opentelemetry.javaagent.shaded.instrumentation") { +// exclude("io.opentelemetry.javaagent.instrumentation.**") +// } +// +// // relocate OpenTelemetry API +// relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") +// relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") +// relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") +// relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") +// relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") +// relocate("io.opentelemetry.extension.aws", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") - // relocate OpenTelemetry API - relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") - relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") - relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") - relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") - relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") - relocate("io.opentelemetry.extension.aws", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") } } diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index 0137a2f3..2a11256f 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -30,28 +30,30 @@ tasks { } shadowJar { - relocate("com.blogspot.mydailyjava.weaklockfree", "io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") + relocate("com.blogspot.mydailyjava.weaklockfree", "ai.traceable.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") dependencies { exclude(dependency("org.codehaus.mojo:animal-sniffer-annotations")) exclude(dependency("javax.annotation:javax.annotation-api")) } - relocate("org.slf4j", "io.opentelemetry.javaagent.slf4j") - relocate("java.util.logging.Logger", "io.opentelemetry.javaagent.bootstrap.PatchLogger") - relocate("com.fasterxml.jackson", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") - relocate("org.yaml", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") + relocate("org.slf4j", "ai.traceable.io.opentelemetry.javaagent.slf4j") + relocate("java.util.logging.Logger", "ai.traceable.io.opentelemetry.javaagent.bootstrap.PatchLogger") + relocate("com.fasterxml.jackson", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") + relocate("org.yaml", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") + + relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") // prevents conflict with library instrumentation - relocate("io.opentelemetry.instrumentation.api", "io.opentelemetry.javaagent.shaded.instrumentation.api") + // relocate("io.opentelemetry.instrumentation.api", "io.opentelemetry.javaagent.shaded.instrumentation.api") // relocate OpenTelemetry API - relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") - relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") - relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") - relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") - relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") - relocate("io.opentelemetry.extension.aws", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") +// relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") +// relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") +// relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") +// relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") +// relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") +// relocate("io.opentelemetry.extension.aws", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") mergeServiceFiles { include("inst/META-INF/services/*") @@ -69,7 +71,7 @@ tasks { attributes.put("OpenTelemetry-Instrumentation-Version", "${versions["opentelemetry_java_agent"]}") attributes.put("Implementation-Vendor", "Hypertrace.org") attributes.put("Implementation-Url", "https://github.com/hypertrace/javaagent") - attributes.put("Main-Class", "io.opentelemetry.javaagent.OpenTelemetryAgent") + attributes.put("Main-Class", "ai.traceable.io.opentelemetry.javaagent.OpenTelemetryAgent") attributes.put("Agent-Class", "org.hypertrace.agent.instrument.HypertraceAgent") attributes.put("Premain-Class", "org.hypertrace.agent.instrument.HypertraceAgent") attributes.put("Can-Redefine-Classes", true) From 0205d443d5c85de00335fe5ff75e0f32c6dedc46 Mon Sep 17 00:00:00 2001 From: Yashwant Date: Wed, 6 Aug 2025 21:41:13 +0530 Subject: [PATCH 2/7] adding logging extensions --- otel-extensions/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/otel-extensions/build.gradle.kts b/otel-extensions/build.gradle.kts index d4cbf973..64c83b13 100644 --- a/otel-extensions/build.gradle.kts +++ b/otel-extensions/build.gradle.kts @@ -48,6 +48,8 @@ dependencies { implementation("io.opentelemetry.semconv:opentelemetry-semconv:${versions["opentelemetry_semconv"]}") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api:${versions["opentelemetry_java_agent"]}") + implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-internal-logging-simple:${versions["opentelemetry_java_agent"]}") + implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-internal-logging-application:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry"]}") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent-tooling"]}") { constraints { From c686ef73e239b32ec493de31b4ab2a61841ebd51 Mon Sep 17 00:00:00 2001 From: Yashwant Date: Thu, 7 Aug 2025 11:43:21 +0530 Subject: [PATCH 3/7] complete relocation from io.opentelemetry --- instrumentation/build.gradle.kts | 30 +++---- javaagent/build.gradle.kts | 149 +++++++++++++++++++++++++++---- otel-extensions/build.gradle.kts | 2 - tests-extension/build.gradle.kts | 29 +++--- 4 files changed, 160 insertions(+), 50 deletions(-) diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index c33d8fd4..44ab3a6f 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -47,23 +47,23 @@ tasks { relocate("org.slf4j", "ai.traceable.io.opentelemetry.javaagent.slf4j") relocate("java.util.logging.Logger", "ai.traceable.io.opentelemetry.javaagent.bootstrap.PatchLogger") - relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") -// // prevents conflict with library instrumentation -// relocate("io.opentelemetry.instrumentation.api", "io.opentelemetry.javaagent.shaded.instrumentation.api") -// //opentelemetry rewrite library instrumentation dependencies -// relocate("io.opentelemetry.instrumentation", "io.opentelemetry.javaagent.shaded.instrumentation") { -// exclude("io.opentelemetry.javaagent.instrumentation.**") -// } -// -// // relocate OpenTelemetry API -// relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") -// relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") -// relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") -// relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") -// relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") -// relocate("io.opentelemetry.extension.aws", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + // prevents conflict with library instrumentation + relocate("io.opentelemetry.instrumentation.api", "ai.traceable.io.opentelemetry.javaagent.shaded.instrumentation.api") + //opentelemetry rewrite library instrumentation dependencies + relocate("io.opentelemetry.instrumentation", "ai.traceable.io.opentelemetry.javaagent.shaded.instrumentation") { + exclude("io.opentelemetry.javaagent.instrumentation.**") + } + + // relocate OpenTelemetry API + relocate("io.opentelemetry.api", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") + relocate("io.opentelemetry.spi", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") + relocate("io.opentelemetry.context", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") + relocate("io.opentelemetry.extension.aws", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") } } diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index 2a11256f..8985bbee 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -17,17 +17,128 @@ dependencies { base.archivesBaseName = "hypertrace-agent" -tasks { - processResources { - val customizationShadowTask = project(":instrumentation").tasks.named("shadowJar") - val providerArchive = customizationShadowTask.get().archiveFile - from(zipTree(providerArchive)) { - into("inst") - rename("(^.*)\\.class$", "$1.classdata") +// Step 1: Extract instrumentation project's shadowJar into inst/ folder +tasks.register("extractCustomInstrumentationToInst") { + description = "Extracts instrumentation project's shadowJar into inst/ folder" + + val customizationShadowTask = project(":instrumentation").tasks.named("shadowJar") + val providerArchive = customizationShadowTask.get().archiveFile + + from(zipTree(providerArchive)) { + into("inst") + rename("(^.*)\\.class$", "$1.classdata") + } + + into("$buildDir/resources/main") + + exclude("**/META-INF/LICENSE") + dependsOn(customizationShadowTask) +} + +// Step 2: Extract OpenTelemetry Java Agent's inst/ files and rename .classdata to .class +tasks.register("extractOtelAgentJarInstClassdata") { + description = "Extracts OpenTelemetry Java Agent's .classdata files and renames them to .class" + + val otelJavaAgentJar = configurations.compileClasspath.get() + .filter { it.name.contains("opentelemetry-javaagent") } + .singleOrNull() ?: throw GradleException("OpenTelemetry Java Agent JAR not found") + + doFirst { + println("OpenTelemetry Java Agent JAR: $otelJavaAgentJar") + } + + from(zipTree(otelJavaAgentJar)) { + include("inst/**") + rename("(^.*)\\.classdata$", "$1.class") + } + + // Output to a temporary directory + into("$buildDir/tmp/otel-classdata-for-relocation") +} + +// Step 3: Move contents to inst/ folder with relocated paths +tasks.register("relocateOtelClassesToInst") { + description = "Relocates OpenTelemetry classes to inst/ folder with ai.traceable prefix" + + dependsOn("extractOtelAgentJarInstClassdata") + + from("$buildDir/tmp/otel-classdata-for-relocation/inst") + + destinationDirectory.set(file("$buildDir/tmp/relocated-otel-classdata")) + archiveFileName.set("relocated-otel-classdata.jar") + + relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") + + eachFile { + path = "inst/ai/traceable/$path" + } +} + +// Step 3b: Extract the relocated JAR +tasks.register("extractRelocatedOtelClasses") { + description = "Extracts relocated OpenTelemetry classes" + + dependsOn("relocateOtelClassesToInst") + + from(zipTree("$buildDir/tmp/relocated-otel-classdata/relocated-otel-classdata.jar")) + into("$buildDir/tmp/relocated-otel-classes") +} + +// task to clean up empty directories +tasks.register("cleanEmptyDirs") { + description = "Removes empty directories from the relocated classes directory" + + dependsOn("extractRelocatedOtelClasses") + + doLast { + // Find and delete empty directories + val instDir = file("$buildDir/tmp/relocated-otel-classes") + if (instDir.exists()) { + deleteEmptyDirs(instDir) } - exclude("**/META-INF/LICENSE") - dependsOn(customizationShadowTask) } +} + +// Helper function to recursively delete empty directories +fun deleteEmptyDirs(dir: File) { + if (!dir.isDirectory) return + + val children = dir.listFiles() ?: return + + // Recursively process subdirectories + children.filter { it.isDirectory }.forEach { deleteEmptyDirs(it) } + + // Check if directory is empty after processing subdirectories + if (dir.listFiles()?.isEmpty() == true) { + dir.delete() + } +} + +// Step 4: Convert all .class files to .classdata and combine with instrumentation files +tasks.register("combineAndConvertToClassdata") { + description = "Combines all classes and converts to .classdata" + + dependsOn("extractCustomInstrumentationToInst", "cleanEmptyDirs") + + // include the relocated OpenTelemetry classes + from("$buildDir/tmp/relocated-otel-classes") { + rename("(^.*)\\.class$", "$1.classdata") + } + + // Output to the resources directory for inclusion in the final JAR + into("$buildDir/resources/main") + + // If there are conflicts, our instrumentation project files win + duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + +// Modify the existing processResources task to depend on our new task +tasks.named("processResources") { + dependsOn("combineAndConvertToClassdata") + exclude("**/META-INF/LICENSE") +} + +tasks { shadowJar { relocate("com.blogspot.mydailyjava.weaklockfree", "ai.traceable.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") @@ -42,18 +153,18 @@ tasks { relocate("com.fasterxml.jackson", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") relocate("org.yaml", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") - relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") - // prevents conflict with library instrumentation - // relocate("io.opentelemetry.instrumentation.api", "io.opentelemetry.javaagent.shaded.instrumentation.api") + relocate("io.opentelemetry.instrumentation.api", "ai.traceable.io.opentelemetry.javaagent.shaded.instrumentation.api") // relocate OpenTelemetry API -// relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") -// relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") -// relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") -// relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") -// relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") -// relocate("io.opentelemetry.extension.aws", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + relocate("io.opentelemetry.api", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") + relocate("io.opentelemetry.spi", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") + relocate("io.opentelemetry.context", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") + relocate("io.opentelemetry.extension.aws", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + // Shade everything else of io.opentelemetry into ai.traceable.io.opentelemetry + relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") mergeServiceFiles { include("inst/META-INF/services/*") @@ -63,7 +174,7 @@ tasks { // Fix CVE-2024-7254, opentelemetry-javaagent brings in io.prometheus.metrics which uses deps of high vulnerability protobuf-java version // This was fixed in 2.x.x versions of opentelemetry-javaagent(which needs us to upgrade from 1.33.0) // TODO: Remove this exclusion after otel-javaagent upgrade which has CVE-2024-7254 fix - exclude("inst/io/prometheus/metrics/shaded/com_google_protobuf_3_21_7/**") + exclude("inst/ai/traceable/io/prometheus/metrics/shaded/com_google_protobuf_3_21_7/**") exclude("**/module-info.class") manifest { attributes.put("Implementation-Title", "javaagent") diff --git a/otel-extensions/build.gradle.kts b/otel-extensions/build.gradle.kts index 64c83b13..d4cbf973 100644 --- a/otel-extensions/build.gradle.kts +++ b/otel-extensions/build.gradle.kts @@ -48,8 +48,6 @@ dependencies { implementation("io.opentelemetry.semconv:opentelemetry-semconv:${versions["opentelemetry_semconv"]}") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api:${versions["opentelemetry_java_agent"]}") - implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-internal-logging-simple:${versions["opentelemetry_java_agent"]}") - implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-internal-logging-application:${versions["opentelemetry_java_agent"]}") implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry"]}") implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent-tooling"]}") { constraints { diff --git a/tests-extension/build.gradle.kts b/tests-extension/build.gradle.kts index 1288e5ce..309236c2 100644 --- a/tests-extension/build.gradle.kts +++ b/tests-extension/build.gradle.kts @@ -36,14 +36,14 @@ tasks{ // relocate these in sync with // https://github.com/hypertrace/javaagent/blob/main/instrumentation/build.gradle.kts#L56-L82 - relocate("com.fasterxml.jackson", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") - relocate("com.google", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.google") - relocate("google.protobuf", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.google.protobuf") - relocate("org.checkerframework", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") // transitive dependency form ht-filter-api - relocate("org.yaml", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") // transitive dependency form ht-filter-api - relocate("com.blogspot.mydailyjava.weaklockfree", "io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") // transitive dependency from ht-filter-api - relocate("org.slf4j", "io.opentelemetry.javaagent.slf4j") - relocate("java.util.logging.Logger", "io.opentelemetry.javaagent.bootstrap.PatchLogger") + relocate("com.fasterxml.jackson", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") + relocate("com.google", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.google") + relocate("google.protobuf", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.google.protobuf") + relocate("org.checkerframework", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") // transitive dependency form ht-filter-api + relocate("org.yaml", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") // transitive dependency form ht-filter-api + relocate("com.blogspot.mydailyjava.weaklockfree", "ai.traceable.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") // transitive dependency from ht-filter-api + relocate("org.slf4j", "ai.traceable.io.opentelemetry.javaagent.slf4j") + relocate("java.util.logging.Logger", "ai.traceable.io.opentelemetry.javaagent.bootstrap.PatchLogger") relocate("okhttp3", "org.hypertrace.javaagent.filter.com.squareup.okhttp3") relocate("okio", "org.hypertrace.javaagent.filter.com.squareup.okio") // transitive dependency from okhttp @@ -51,13 +51,14 @@ tasks{ // relocate OpenTelemetry API in sync with // https://github.com/hypertrace/javaagent/blob/main/javaagent/build.gradle.kts#L58-L63 - relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api") - relocate("io.opentelemetry.semconv", "io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") - relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") - relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context") - relocate("io.opentelemetry.extension.kotlin", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") - relocate("io.opentelemetry.extension.aws", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + relocate("io.opentelemetry.api", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") + relocate("io.opentelemetry.spi", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") + relocate("io.opentelemetry.context", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") + relocate("io.opentelemetry.extension.aws", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") manifest { attributes.put("Implementation-Title", "test-filter-impl") From 42445121a5201d3137883fb951cfcebaa39846c7 Mon Sep 17 00:00:00 2001 From: Yashwant Date: Thu, 7 Aug 2025 12:03:15 +0530 Subject: [PATCH 4/7] renaming tasks --- javaagent/build.gradle.kts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index 8985bbee..0b03b0d8 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -84,8 +84,7 @@ tasks.register("extractRelocatedOtelClasses") { into("$buildDir/tmp/relocated-otel-classes") } -// task to clean up empty directories -tasks.register("cleanEmptyDirs") { +tasks.register("extractOtelInstrumentationToInst") { description = "Removes empty directories from the relocated classes directory" dependsOn("extractRelocatedOtelClasses") @@ -118,7 +117,7 @@ fun deleteEmptyDirs(dir: File) { tasks.register("combineAndConvertToClassdata") { description = "Combines all classes and converts to .classdata" - dependsOn("extractCustomInstrumentationToInst", "cleanEmptyDirs") + dependsOn("extractCustomInstrumentationToInst", "extractOtelInstrumentationToInst") // include the relocated OpenTelemetry classes from("$buildDir/tmp/relocated-otel-classes") { From 2bd75d423475d82d7a007ce0069782314b57a793 Mon Sep 17 00:00:00 2001 From: Yashwant Date: Mon, 25 Aug 2025 10:24:20 +0530 Subject: [PATCH 5/7] rename to org.hypertrace folders --- instrumentation/build.gradle.kts | 26 +++++++++++----------- javaagent/build.gradle.kts | 38 ++++++++++++++++---------------- tests-extension/build.gradle.kts | 30 ++++++++++++------------- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/instrumentation/build.gradle.kts b/instrumentation/build.gradle.kts index 44ab3a6f..6ef713d6 100644 --- a/instrumentation/build.gradle.kts +++ b/instrumentation/build.gradle.kts @@ -40,30 +40,30 @@ tasks { mergeServiceFiles() - relocate("com.blogspot.mydailyjava.weaklockfree", "ai.traceable.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") + relocate("com.blogspot.mydailyjava.weaklockfree", "org.hypertrace.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") exclude("**/module-info.class") - relocate("org.slf4j", "ai.traceable.io.opentelemetry.javaagent.slf4j") - relocate("java.util.logging.Logger", "ai.traceable.io.opentelemetry.javaagent.bootstrap.PatchLogger") + relocate("org.slf4j", "org.hypertrace.io.opentelemetry.javaagent.slf4j") + relocate("java.util.logging.Logger", "org.hypertrace.io.opentelemetry.javaagent.bootstrap.PatchLogger") // prevents conflict with library instrumentation - relocate("io.opentelemetry.instrumentation.api", "ai.traceable.io.opentelemetry.javaagent.shaded.instrumentation.api") + relocate("io.opentelemetry.instrumentation.api", "org.hypertrace.io.opentelemetry.javaagent.shaded.instrumentation.api") //opentelemetry rewrite library instrumentation dependencies - relocate("io.opentelemetry.instrumentation", "ai.traceable.io.opentelemetry.javaagent.shaded.instrumentation") { + relocate("io.opentelemetry.instrumentation", "org.hypertrace.io.opentelemetry.javaagent.shaded.instrumentation") { exclude("io.opentelemetry.javaagent.instrumentation.**") } // relocate OpenTelemetry API - relocate("io.opentelemetry.api", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") - relocate("io.opentelemetry.semconv", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") - relocate("io.opentelemetry.spi", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") - relocate("io.opentelemetry.context", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") - relocate("io.opentelemetry.extension.kotlin", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") - relocate("io.opentelemetry.extension.aws", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") - - relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") + relocate("io.opentelemetry.api", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") + relocate("io.opentelemetry.spi", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") + relocate("io.opentelemetry.context", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") + relocate("io.opentelemetry.extension.aws", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + + relocate("io.opentelemetry", "org.hypertrace.io.opentelemetry") } } diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index 0b03b0d8..d99e6f57 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -58,7 +58,7 @@ tasks.register("extractOtelAgentJarInstClassdata") { // Step 3: Move contents to inst/ folder with relocated paths tasks.register("relocateOtelClassesToInst") { - description = "Relocates OpenTelemetry classes to inst/ folder with ai.traceable prefix" + description = "Relocates OpenTelemetry classes to inst/ folder with org.hypertrace prefix" dependsOn("extractOtelAgentJarInstClassdata") @@ -67,10 +67,10 @@ tasks.register("relo destinationDirectory.set(file("$buildDir/tmp/relocated-otel-classdata")) archiveFileName.set("relocated-otel-classdata.jar") - relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") + relocate("io.opentelemetry", "org.hypertrace.io.opentelemetry") eachFile { - path = "inst/ai/traceable/$path" + path = "inst/org/hypertrace/$path" } } @@ -140,30 +140,30 @@ tasks.named("processResources") { tasks { shadowJar { - relocate("com.blogspot.mydailyjava.weaklockfree", "ai.traceable.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") + relocate("com.blogspot.mydailyjava.weaklockfree", "org.hypertrace.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") dependencies { exclude(dependency("org.codehaus.mojo:animal-sniffer-annotations")) exclude(dependency("javax.annotation:javax.annotation-api")) } - relocate("org.slf4j", "ai.traceable.io.opentelemetry.javaagent.slf4j") - relocate("java.util.logging.Logger", "ai.traceable.io.opentelemetry.javaagent.bootstrap.PatchLogger") - relocate("com.fasterxml.jackson", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") - relocate("org.yaml", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") + relocate("org.slf4j", "org.hypertrace.io.opentelemetry.javaagent.slf4j") + relocate("java.util.logging.Logger", "org.hypertrace.io.opentelemetry.javaagent.bootstrap.PatchLogger") + relocate("com.fasterxml.jackson", "org.hypertrace.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") + relocate("org.yaml", "org.hypertrace.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") // prevents conflict with library instrumentation - relocate("io.opentelemetry.instrumentation.api", "ai.traceable.io.opentelemetry.javaagent.shaded.instrumentation.api") + relocate("io.opentelemetry.instrumentation.api", "org.hypertrace.io.opentelemetry.javaagent.shaded.instrumentation.api") // relocate OpenTelemetry API - relocate("io.opentelemetry.api", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") - relocate("io.opentelemetry.semconv", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") - relocate("io.opentelemetry.spi", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") - relocate("io.opentelemetry.context", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") - relocate("io.opentelemetry.extension.kotlin", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") - relocate("io.opentelemetry.extension.aws", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") - // Shade everything else of io.opentelemetry into ai.traceable.io.opentelemetry - relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") + relocate("io.opentelemetry.api", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") + relocate("io.opentelemetry.spi", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") + relocate("io.opentelemetry.context", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") + relocate("io.opentelemetry.extension.aws", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + // Shade everything else of io.opentelemetry into org.hypertrace.io.opentelemetry + relocate("io.opentelemetry", "org.hypertrace.io.opentelemetry") mergeServiceFiles { include("inst/META-INF/services/*") @@ -173,7 +173,7 @@ tasks { // Fix CVE-2024-7254, opentelemetry-javaagent brings in io.prometheus.metrics which uses deps of high vulnerability protobuf-java version // This was fixed in 2.x.x versions of opentelemetry-javaagent(which needs us to upgrade from 1.33.0) // TODO: Remove this exclusion after otel-javaagent upgrade which has CVE-2024-7254 fix - exclude("inst/ai/traceable/io/prometheus/metrics/shaded/com_google_protobuf_3_21_7/**") + exclude("inst/org/hypertrace/io/prometheus/metrics/shaded/com_google_protobuf_3_21_7/**") exclude("**/module-info.class") manifest { attributes.put("Implementation-Title", "javaagent") @@ -181,7 +181,7 @@ tasks { attributes.put("OpenTelemetry-Instrumentation-Version", "${versions["opentelemetry_java_agent"]}") attributes.put("Implementation-Vendor", "Hypertrace.org") attributes.put("Implementation-Url", "https://github.com/hypertrace/javaagent") - attributes.put("Main-Class", "ai.traceable.io.opentelemetry.javaagent.OpenTelemetryAgent") + attributes.put("Main-Class", "org.hypertrace.io.opentelemetry.javaagent.OpenTelemetryAgent") attributes.put("Agent-Class", "org.hypertrace.agent.instrument.HypertraceAgent") attributes.put("Premain-Class", "org.hypertrace.agent.instrument.HypertraceAgent") attributes.put("Can-Redefine-Classes", true) diff --git a/tests-extension/build.gradle.kts b/tests-extension/build.gradle.kts index 309236c2..0710f6b8 100644 --- a/tests-extension/build.gradle.kts +++ b/tests-extension/build.gradle.kts @@ -36,14 +36,14 @@ tasks{ // relocate these in sync with // https://github.com/hypertrace/javaagent/blob/main/instrumentation/build.gradle.kts#L56-L82 - relocate("com.fasterxml.jackson", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") - relocate("com.google", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.google") - relocate("google.protobuf", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.google.protobuf") - relocate("org.checkerframework", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") // transitive dependency form ht-filter-api - relocate("org.yaml", "ai.traceable.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") // transitive dependency form ht-filter-api - relocate("com.blogspot.mydailyjava.weaklockfree", "ai.traceable.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") // transitive dependency from ht-filter-api - relocate("org.slf4j", "ai.traceable.io.opentelemetry.javaagent.slf4j") - relocate("java.util.logging.Logger", "ai.traceable.io.opentelemetry.javaagent.bootstrap.PatchLogger") + relocate("com.fasterxml.jackson", "org.hypertrace.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.fasterxml.jackson") + relocate("com.google", "org.hypertrace.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.google") + relocate("google.protobuf", "org.hypertrace.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.google.protobuf") + relocate("org.checkerframework", "org.hypertrace.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.checkerframework") // transitive dependency form ht-filter-api + relocate("org.yaml", "org.hypertrace.io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.org.yaml") // transitive dependency form ht-filter-api + relocate("com.blogspot.mydailyjava.weaklockfree", "org.hypertrace.io.opentelemetry.instrumentation.api.internal.shaded.weaklockfree") // transitive dependency from ht-filter-api + relocate("org.slf4j", "org.hypertrace.io.opentelemetry.javaagent.slf4j") + relocate("java.util.logging.Logger", "org.hypertrace.io.opentelemetry.javaagent.bootstrap.PatchLogger") relocate("okhttp3", "org.hypertrace.javaagent.filter.com.squareup.okhttp3") relocate("okio", "org.hypertrace.javaagent.filter.com.squareup.okio") // transitive dependency from okhttp @@ -51,14 +51,14 @@ tasks{ // relocate OpenTelemetry API in sync with // https://github.com/hypertrace/javaagent/blob/main/javaagent/build.gradle.kts#L58-L63 - relocate("io.opentelemetry.api", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") - relocate("io.opentelemetry.semconv", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") - relocate("io.opentelemetry.spi", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") - relocate("io.opentelemetry.context", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") - relocate("io.opentelemetry.extension.kotlin", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") - relocate("io.opentelemetry.extension.aws", "ai.traceable.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") + relocate("io.opentelemetry.api", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.api") + relocate("io.opentelemetry.semconv", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.semconv") + relocate("io.opentelemetry.spi", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.spi") + relocate("io.opentelemetry.context", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.context") + relocate("io.opentelemetry.extension.kotlin", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.kotlin") + relocate("io.opentelemetry.extension.aws", "org.hypertrace.io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.aws") - relocate("io.opentelemetry", "ai.traceable.io.opentelemetry") + relocate("io.opentelemetry", "org.hypertrace.io.opentelemetry") manifest { attributes.put("Implementation-Title", "test-filter-impl") From 799d650b645dcf6cfc2f77f8a27a22720cf9e9a2 Mon Sep 17 00:00:00 2001 From: Yashwant Date: Mon, 25 Aug 2025 19:14:37 +0530 Subject: [PATCH 6/7] upgrade dep --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1f2f88da..22f9b995 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { id("com.diffplug.spotless") version "5.2.0" apply false id("org.hypertrace.publish-maven-central-plugin") version "1.1.1" id("org.hypertrace.ci-utils-plugin") version "0.4.0" - id("org.gradle.test-retry") version "1.2.0" apply false + id("org.gradle.test-retry") version "1.5.0" apply false id("org.owasp.dependencycheck") version "7.1.1" } From 7837d68a87464aa18a68526324c12b0f8d8de122 Mon Sep 17 00:00:00 2001 From: Yashwant Date: Mon, 25 Aug 2025 20:33:38 +0530 Subject: [PATCH 7/7] bypass other-smoketest --- .github/workflows/release.yaml | 2 +- .github/workflows/smoke-test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index b83dca4f..a03f6cf1 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -43,7 +43,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - suite: [ "glassfish", "jetty", "liberty", "tomcat", "tomee", "wildfly", "other" ] + suite: [ "glassfish", "jetty", "liberty", "tomcat", "tomee", "wildfly"] fail-fast: true steps: # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml index 6c209d97..64046e9a 100644 --- a/.github/workflows/smoke-test.yml +++ b/.github/workflows/smoke-test.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - suite: [ "glassfish", "jetty", "liberty", "tomcat", "tomee", "wildfly", "other" ] + suite: [ "glassfish", "jetty", "liberty", "tomcat", "tomee", "wildfly"] fail-fast: true steps: # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation