diff --git a/.github/workflows/build-common.yml b/.github/workflows/build-common.yml index 7d17d949dad4..699c378cb9c7 100644 --- a/.github/workflows/build-common.yml +++ b/.github/workflows/build-common.yml @@ -235,7 +235,7 @@ jobs: # vaadin 14 tests fail with node 18 - name: Set up Node - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version: 16 diff --git a/.github/workflows/codeql-daily.yml b/.github/workflows/codeql-daily.yml index d9328c7fd7a2..1be8e8bbfd9b 100644 --- a/.github/workflows/codeql-daily.yml +++ b/.github/workflows/codeql-daily.yml @@ -30,7 +30,7 @@ jobs: java-version-file: .java-version - name: Initialize CodeQL - uses: github/codeql-action/init@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11 + uses: github/codeql-action/init@4fa2a7953630fd2f3fb380f21be14ede0169dd4f # v3.25.12 with: languages: java # using "latest" helps to keep up with the latest Kotlin support @@ -45,7 +45,7 @@ jobs: run: ./gradlew assemble -x javadoc --no-build-cache --no-daemon - name: Perform CodeQL analysis - uses: github/codeql-action/analyze@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11 + uses: github/codeql-action/analyze@4fa2a7953630fd2f3fb380f21be14ede0169dd4f # v3.25.12 workflow-notification: needs: diff --git a/.github/workflows/pr-smoke-test-early-jdk8-images.yml b/.github/workflows/pr-smoke-test-early-jdk8-images.yml index 2f5749cac24e..b733cbc764f3 100644 --- a/.github/workflows/pr-smoke-test-early-jdk8-images.yml +++ b/.github/workflows/pr-smoke-test-early-jdk8-images.yml @@ -25,7 +25,7 @@ jobs: java-version-file: .java-version - name: Setup Gradle - uses: gradle/actions/setup-gradle@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.0 + uses: gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2 with: cache-read-only: true # gradle enterprise is used for the build cache diff --git a/.github/workflows/publish-smoke-test-early-jdk8-images.yml b/.github/workflows/publish-smoke-test-early-jdk8-images.yml index dcaa3085e541..3cff3f2bf689 100644 --- a/.github/workflows/publish-smoke-test-early-jdk8-images.yml +++ b/.github/workflows/publish-smoke-test-early-jdk8-images.yml @@ -35,7 +35,7 @@ jobs: run: echo "TAG=$(date '+%Y%m%d').$GITHUB_RUN_ID" >> $GITHUB_ENV - name: Setup Gradle - uses: gradle/actions/setup-gradle@d9336dac04dea2507a617466bc058a3def92b18b # v3.4.0 + uses: gradle/actions/setup-gradle@dbbdc275be76ac10734476cc723d82dfe7ec6eda # v3.4.2 - name: Build Docker image run: ./gradlew :smoke-tests:images:early-jdk8:dockerPush -PextraTag=${{ env.TAG }} @@ -46,8 +46,4 @@ jobs: if: always() uses: ./.github/workflows/reusable-workflow-notification.yml with: - success: >- - ${{ - needs.publishLinux.result == 'success' && - needs.publishWindows.result == 'success' - }} + success: ${{ needs.publish.result == 'success' }} diff --git a/.github/workflows/reusable-test-indy.yml b/.github/workflows/reusable-test-indy.yml index 70ad4815bcd0..a3c736666229 100644 --- a/.github/workflows/reusable-test-indy.yml +++ b/.github/workflows/reusable-test-indy.yml @@ -46,7 +46,7 @@ jobs: # vaadin 14 tests fail with node 18 - name: Set up Node - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version: 16 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 8a419751812c..169fb63c12ba 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -64,6 +64,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11 + uses: github/codeql-action/upload-sarif@4fa2a7953630fd2f3fb380f21be14ede0169dd4f # v3.25.12 with: sarif_file: results.sarif diff --git a/benchmark-overhead/gradle/wrapper/gradle-wrapper.jar b/benchmark-overhead/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4..2c3521197d7c 100644 Binary files a/benchmark-overhead/gradle/wrapper/gradle-wrapper.jar and b/benchmark-overhead/gradle/wrapper/gradle-wrapper.jar differ diff --git a/benchmark-overhead/gradle/wrapper/gradle-wrapper.properties b/benchmark-overhead/gradle/wrapper/gradle-wrapper.properties index 8a1f6b97f473..68e8816d71c9 100644 --- a/benchmark-overhead/gradle/wrapper/gradle-wrapper.properties +++ b/benchmark-overhead/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/benchmark-overhead/gradlew b/benchmark-overhead/gradlew index b740cf13397a..f5feea6d6b11 100755 --- a/benchmark-overhead/gradlew +++ b/benchmark-overhead/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/benchmark-overhead/gradlew.bat b/benchmark-overhead/gradlew.bat index 25da30dbdeee..9d21a21834d5 100644 --- a/benchmark-overhead/gradlew.bat +++ b/benchmark-overhead/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/OverheadTests.java b/benchmark-overhead/src/test/java/io/opentelemetry/OverheadTests.java index b69a6d708294..86756a230f39 100644 --- a/benchmark-overhead/src/test/java/io/opentelemetry/OverheadTests.java +++ b/benchmark-overhead/src/test/java/io/opentelemetry/OverheadTests.java @@ -110,7 +110,7 @@ void runAppOnce(TestConfig config, Agent agent) throws Exception { } private void startRecording(Agent agent, GenericContainer petclinic) throws Exception { - Path outFile = namingConventions.container.jfrFile(agent); + String outFile = namingConventions.container.jfrFile(agent); String[] command = { "jcmd", "1", @@ -123,16 +123,27 @@ private void startRecording(Agent agent, GenericContainer petclinic) throws E petclinic.execInContainer(command); } - private void doWarmupPhase(TestConfig testConfig, GenericContainer petclinic) throws IOException, InterruptedException { - System.out.println("Performing startup warming phase for " + testConfig.getWarmupSeconds() + " seconds..."); + private void doWarmupPhase(TestConfig testConfig, GenericContainer petclinic) + throws IOException, InterruptedException { + System.out.println( + "Performing startup warming phase for " + testConfig.getWarmupSeconds() + " seconds..."); // excluding the JFR recording from the warmup causes strange inconsistencies in the results System.out.println("Starting disposable JFR warmup recording..."); - String[] startCommand = {"jcmd", "1", "JFR.start", "settings=/app/overhead.jfc", "dumponexit=true", "name=warmup", "filename=warmup.jfr"}; + String[] startCommand = { + "jcmd", + "1", + "JFR.start", + "settings=/app/overhead.jfc", + "dumponexit=true", + "name=warmup", + "filename=warmup.jfr" + }; petclinic.execInContainer(startCommand); - long deadline = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(testConfig.getWarmupSeconds()); - while(System.currentTimeMillis() < deadline) { + long deadline = + System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(testConfig.getWarmupSeconds()); + while (System.currentTimeMillis() < deadline) { GenericContainer k6 = new GenericContainer<>(DockerImageName.parse("loadimpact/k6")) .withNetwork(NETWORK) @@ -151,7 +162,7 @@ private void doWarmupPhase(TestConfig testConfig, GenericContainer petclinic) private void writeStartupTimeFile(Agent agent, long start) throws IOException { long delta = System.currentTimeMillis() - start; - Path startupPath = namingConventions.local.startupDurationFile(agent); + Path startupPath = Path.of(namingConventions.local.startupDurationFile(agent)); Files.writeString(startupPath, String.valueOf(delta)); } } diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/containers/K6Container.java b/benchmark-overhead/src/test/java/io/opentelemetry/containers/K6Container.java index ff022970dbb3..7f6994d1a5d7 100644 --- a/benchmark-overhead/src/test/java/io/opentelemetry/containers/K6Container.java +++ b/benchmark-overhead/src/test/java/io/opentelemetry/containers/K6Container.java @@ -8,7 +8,6 @@ import io.opentelemetry.agents.Agent; import io.opentelemetry.config.TestConfig; import io.opentelemetry.util.NamingConventions; -import java.nio.file.Path; import java.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +34,7 @@ public K6Container( } public GenericContainer build() { - Path k6OutputFile = namingConventions.container.k6Results(agent); + String k6OutputFile = namingConventions.container.k6Results(agent); return new GenericContainer<>(DockerImageName.parse("loadimpact/k6")) .withNetwork(network) .withNetworkAliases("k6") @@ -52,7 +51,7 @@ public GenericContainer build() { "--rps", String.valueOf(config.getMaxRequestRate()), "--summary-export", - k6OutputFile.toString(), + k6OutputFile, "/app/basic.js") .withStartupCheckStrategy( new OneShotStartupCheckStrategy().withTimeout(Duration.ofMinutes(15))); diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/results/ResultsCollector.java b/benchmark-overhead/src/test/java/io/opentelemetry/results/ResultsCollector.java index c2012cdf41b9..d7b47bb7fbc9 100644 --- a/benchmark-overhead/src/test/java/io/opentelemetry/results/ResultsCollector.java +++ b/benchmark-overhead/src/test/java/io/opentelemetry/results/ResultsCollector.java @@ -54,14 +54,14 @@ private AppPerfResults readAgentResults(Agent agent, TestConfig config) { private AppPerfResults.Builder addStartupTime(AppPerfResults.Builder builder, Agent agent) throws IOException { - Path file = namingConvention.startupDurationFile(agent); + Path file = Path.of(namingConvention.startupDurationFile(agent)); long startupDuration = Long.parseLong(new String(Files.readAllBytes(file)).trim()); return builder.startupDurationMs(startupDuration); } private AppPerfResults.Builder addK6Results(AppPerfResults.Builder builder, Agent agent) throws IOException { - Path k6File = namingConvention.k6Results(agent); + Path k6File = Path.of(namingConvention.k6Results(agent)); String json = new String(Files.readAllBytes(k6File)); double iterationAvg = read(json, "$.metrics.iteration_duration.avg"); double iterationP95 = read(json, "$.metrics.iteration_duration['p(95)']"); @@ -82,7 +82,7 @@ private static double read(String json, String jsonPath) { private AppPerfResults.Builder addJfrResults(AppPerfResults.Builder builder, Agent agent) throws IOException { - Path jfrFile = namingConvention.jfrFile(agent); + Path jfrFile = Path.of(namingConvention.jfrFile(agent)); return builder .totalGCTime(readTotalGCTime(jfrFile)) .totalAllocated(readTotalAllocated(jfrFile)) diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/util/ContainerNamingConvention.java b/benchmark-overhead/src/test/java/io/opentelemetry/util/ContainerNamingConvention.java new file mode 100644 index 000000000000..8866ea28e92c --- /dev/null +++ b/benchmark-overhead/src/test/java/io/opentelemetry/util/ContainerNamingConvention.java @@ -0,0 +1,33 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.util; + +import io.opentelemetry.agents.Agent; + +public class ContainerNamingConvention implements NamingConvention { + private final String dir; + + public ContainerNamingConvention(String dir) { + this.dir = dir; + } + + public String k6Results(Agent agent) { + + return String.join("/", dir, "k6_out_" + agent.getName() + ".json"); + } + + public String jfrFile(Agent agent) { + return String.join("/", dir, "petclinic-" + agent.getName() + ".jfr"); + } + + public String startupDurationFile(Agent agent) { + return String.join("/", dir, "startup-time-" + agent.getName() + ".txt"); + } + + public String root() { + return dir; + } +} diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/util/LocalNamingConvention.java b/benchmark-overhead/src/test/java/io/opentelemetry/util/LocalNamingConvention.java new file mode 100644 index 000000000000..4c4305e849a3 --- /dev/null +++ b/benchmark-overhead/src/test/java/io/opentelemetry/util/LocalNamingConvention.java @@ -0,0 +1,33 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.util; + +import io.opentelemetry.agents.Agent; +import java.nio.file.Paths; + +public class LocalNamingConvention implements NamingConvention { + private final String dir; + + public LocalNamingConvention(String dir) { + this.dir = dir; + } + + public String k6Results(Agent agent) { + return Paths.get(dir, "k6_out_" + agent.getName() + ".json").toString(); + } + + public String jfrFile(Agent agent) { + return Paths.get(dir, "petclinic-" + agent.getName() + ".jfr").toString(); + } + + public String startupDurationFile(Agent agent) { + return Paths.get(dir, "startup-time-" + agent.getName() + ".txt").toString(); + } + + public String root() { + return dir; + } +} diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConvention.java b/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConvention.java index 96a45eceeef3..afbdd653e9a5 100644 --- a/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConvention.java +++ b/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConvention.java @@ -6,51 +6,34 @@ package io.opentelemetry.util; import io.opentelemetry.agents.Agent; -import java.nio.file.Path; -import java.nio.file.Paths; /** * This utility class provides the standard file naming conventions, primarily for files that are * shared between containers and the test runner. It consolidates the naming logic into one place to * ensure consistency, reduce duplication, and decrease errors. */ -public class NamingConvention { - - private final String dir; - - public NamingConvention(String dir) { - this.dir = dir; - } - +public interface NamingConvention { /** - * Returns a path to the location of the k6 results json file. + * Returns a path string to the location of the k6 results json file. * * @param agent The agent to get results file path for */ - public Path k6Results(Agent agent) { - return Paths.get(dir, "k6_out_" + agent.getName() + ".json"); - } + String k6Results(Agent agent); /** - * Returns a path to the location of the jfr output file for a given agent run. + * Returns a path string to the location of the jfr output file for a given agent run. * * @param agent The agent to get the jfr file path for. */ - public Path jfrFile(Agent agent) { - return Paths.get(dir, "petclinic-" + agent.getName() + ".jfr"); - } + String jfrFile(Agent agent); /** - * Returns the path to the file that contains the startup duration for a given agent run. + * Returns the path string to the file that contains the startup duration for a given agent run. * * @param agent The agent to get the startup duration for. */ - public Path startupDurationFile(Agent agent) { - return Paths.get(dir, "startup-time-" + agent.getName() + ".txt"); - } + String startupDurationFile(Agent agent); /** Returns the root path that this naming convention was configured with. */ - public String root() { - return dir; - } + String root(); } diff --git a/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConventions.java b/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConventions.java index 6caf28dfef31..4aeca8f7a92e 100644 --- a/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConventions.java +++ b/benchmark-overhead/src/test/java/io/opentelemetry/util/NamingConventions.java @@ -5,18 +5,22 @@ package io.opentelemetry.util; -/** An container to hold both the local and container naming conventions. */ +/** A container to hold both the local and container naming conventions. */ public class NamingConventions { - public final NamingConvention container = new NamingConvention("/results"); - public final NamingConvention local = new NamingConvention("."); + public final NamingConvention container = new ContainerNamingConvention("/results"); + public final NamingConvention local = new LocalNamingConvention("."); - /** @return Root path for the local naming convention (where results are output) */ + /** + * @return Root path for the local naming convention (where results are output) + */ public String localResults() { return local.root(); } - /** @return Root path for the container naming convention (where results are output) */ + /** + * @return Root path for the container naming convention (where results are output) + */ public String containerResults() { return container.root(); } diff --git a/conventions/build.gradle.kts b/conventions/build.gradle.kts index 39811c6acc93..1788a9afe43d 100644 --- a/conventions/build.gradle.kts +++ b/conventions/build.gradle.kts @@ -74,5 +74,5 @@ dependencies { testImplementation(enforcedPlatform("org.junit:junit-bom:5.10.3")) testImplementation("org.junit.jupiter:junit-jupiter-api") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") - testImplementation("org.assertj:assertj-core:3.26.0") + testImplementation("org.assertj:assertj-core:3.26.3") } diff --git a/custom-checks/src/main/java/io/opentelemetry/javaagent/customchecks/OtelInternalJavadoc.java b/custom-checks/src/main/java/io/opentelemetry/javaagent/customchecks/OtelInternalJavadoc.java index 950632166bd3..3d6693a9574e 100644 --- a/custom-checks/src/main/java/io/opentelemetry/javaagent/customchecks/OtelInternalJavadoc.java +++ b/custom-checks/src/main/java/io/opentelemetry/javaagent/customchecks/OtelInternalJavadoc.java @@ -42,7 +42,7 @@ public class OtelInternalJavadoc extends BugChecker implements BugChecker.ClassT @Override public Description matchClass(ClassTree tree, VisitorState state) { - if (!isPublic(tree) || !isInternal(state)) { + if (!isPublic(tree) || !isInternal(state) || tree.getSimpleName().toString().endsWith("Test")) { return Description.NO_MATCH; } String javadoc = getJavadoc(state); diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index b86aa88d22df..5279fdd40398 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -46,7 +46,7 @@ val asmVersion = "9.7" val jmhVersion = "1.37" val mockitoVersion = "4.11.0" val slf4jVersion = "2.0.13" -val semConvVersion = "1.25.0-alpha" +val semConvVersion = "1.26.0-alpha" val CORE_DEPENDENCIES = listOf( "io.opentelemetry.semconv:opentelemetry-semconv:${semConvVersion}", @@ -104,7 +104,7 @@ val DEPENDENCIES = listOf( "io.opentelemetry.contrib:opentelemetry-gcp-resources:${otelContribVersion}", "io.opentelemetry.proto:opentelemetry-proto:1.3.2-alpha", "io.opentelemetry:opentelemetry-extension-annotations:1.18.0", // deprecated, no longer part of bom - "org.assertj:assertj-core:3.26.0", + "org.assertj:assertj-core:3.26.3", "org.awaitility:awaitility:4.2.1", "com.google.code.findbugs:annotations:3.0.1u2", "com.google.code.findbugs:jsr305:3.0.2", diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-autoconfigure-spring-boot-2.txt b/docs/apidiffs/current_vs_latest/opentelemetry-autoconfigure-spring-boot-2.txt new file mode 100644 index 000000000000..74cea130e500 --- /dev/null +++ b/docs/apidiffs/current_vs_latest/opentelemetry-autoconfigure-spring-boot-2.txt @@ -0,0 +1,8 @@ +Comparing source compatibility of opentelemetry-autoconfigure-spring-boot-2-2.6.0-SNAPSHOT.jar against ++++ NEW CLASS: PUBLIC(+) io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration (not serializable) + +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. + +++ NEW SUPERCLASS: java.lang.Object + +++ NEW CONSTRUCTOR: PUBLIC(+) OpenTelemetryAutoConfiguration() + +++ NEW ANNOTATION: org.springframework.context.annotation.Configuration + +++ NEW ANNOTATION: org.springframework.boot.context.properties.EnableConfigurationProperties + +++ NEW ELEMENT: value=io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtlpExporterProperties,io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtelResourceProperties,io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.PropagationProperties (+) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-autoconfigure-spring-boot-3.txt b/docs/apidiffs/current_vs_latest/opentelemetry-autoconfigure-spring-boot-3.txt new file mode 100644 index 000000000000..0737e9b6180b --- /dev/null +++ b/docs/apidiffs/current_vs_latest/opentelemetry-autoconfigure-spring-boot-3.txt @@ -0,0 +1,2 @@ +Comparing source compatibility of opentelemetry-autoconfigure-spring-boot-3-2.6.0-SNAPSHOT.jar against +No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-starter.txt b/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-starter.txt new file mode 100644 index 000000000000..587bf3b27164 --- /dev/null +++ b/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-starter.txt @@ -0,0 +1,2 @@ +Comparing source compatibility of opentelemetry-spring-boot-starter-2.6.0-SNAPSHOT.jar against +No changes. \ No newline at end of file diff --git a/docs/contributing/intellij-setup-and-troubleshooting.md b/docs/contributing/intellij-setup-and-troubleshooting.md index 4bc57ac18d70..0b47b066eabf 100644 --- a/docs/contributing/intellij-setup-and-troubleshooting.md +++ b/docs/contributing/intellij-setup-and-troubleshooting.md @@ -35,7 +35,7 @@ If you are working on a specific instrumentation, you can load only the modules For example, to load the modules for the Spring Boot autoconfigure instrumentation, run: ```shell -./docs/contributing/selectModules.kts instrumentation/spring/spring-boot-autoconfigure/ +./docs/contributing/selectModules.kts instrumentation/spring/spring-boot-autoconfigure-2/ ``` Install the [Kotlin executable](https://kotlinlang.org/docs/tutorials/command-line.html) diff --git a/docs/contributing/selectModules.kts b/docs/contributing/selectModules.kts index d0f299d42125..ce9508197f2b 100755 --- a/docs/contributing/selectModules.kts +++ b/docs/contributing/selectModules.kts @@ -12,7 +12,7 @@ main(args) fun main(args: Array) { if (args.isEmpty()) { - println("Usage: ./docs/contributing/selectModules.kts instrumentation/spring/spring-boot-autoconfigure/ ...") + println("Usage: ./docs/contributing/selectModules.kts instrumentation/spring/spring-boot-autoconfigure-2/ ...") return } diff --git a/examples/distro/gradle/instrumentation.gradle b/examples/distro/gradle/instrumentation.gradle index ccaa22fc12b3..da861688cecd 100644 --- a/examples/distro/gradle/instrumentation.gradle +++ b/examples/distro/gradle/instrumentation.gradle @@ -25,7 +25,7 @@ dependencies { // test dependencies testImplementation("io.opentelemetry.javaagent:opentelemetry-testing-common") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") - testImplementation("org.assertj:assertj-core:3.26.0") + testImplementation("org.assertj:assertj-core:3.26.3") add("codegen", "io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions.opentelemetryJavaagentAlpha}") add("muzzleBootstrap", "io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations-support:${versions.opentelemetryJavaagentAlpha}") diff --git a/examples/distro/gradle/wrapper/gradle-wrapper.jar b/examples/distro/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4..2c3521197d7c 100644 Binary files a/examples/distro/gradle/wrapper/gradle-wrapper.jar and b/examples/distro/gradle/wrapper/gradle-wrapper.jar differ diff --git a/examples/distro/gradle/wrapper/gradle-wrapper.properties b/examples/distro/gradle/wrapper/gradle-wrapper.properties index 8a1f6b97f473..68e8816d71c9 100644 --- a/examples/distro/gradle/wrapper/gradle-wrapper.properties +++ b/examples/distro/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/examples/distro/gradlew b/examples/distro/gradlew index b740cf13397a..f5feea6d6b11 100755 --- a/examples/distro/gradlew +++ b/examples/distro/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/examples/distro/gradlew.bat b/examples/distro/gradlew.bat index 25da30dbdeee..9d21a21834d5 100644 --- a/examples/distro/gradlew.bat +++ b/examples/distro/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/examples/extension/gradle/wrapper/gradle-wrapper.jar b/examples/extension/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4..2c3521197d7c 100644 Binary files a/examples/extension/gradle/wrapper/gradle-wrapper.jar and b/examples/extension/gradle/wrapper/gradle-wrapper.jar differ diff --git a/examples/extension/gradle/wrapper/gradle-wrapper.properties b/examples/extension/gradle/wrapper/gradle-wrapper.properties index 8a1f6b97f473..68e8816d71c9 100644 --- a/examples/extension/gradle/wrapper/gradle-wrapper.properties +++ b/examples/extension/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/examples/extension/gradlew b/examples/extension/gradlew index b740cf13397a..f5feea6d6b11 100755 --- a/examples/extension/gradlew +++ b/examples/extension/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/examples/extension/gradlew.bat b/examples/extension/gradlew.bat index 25da30dbdeee..9d21a21834d5 100644 --- a/examples/extension/gradlew.bat +++ b/examples/extension/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/gradle-plugins/build.gradle.kts b/gradle-plugins/build.gradle.kts index 3ca3ba705c78..7e682abae417 100644 --- a/gradle-plugins/build.gradle.kts +++ b/gradle-plugins/build.gradle.kts @@ -41,7 +41,7 @@ dependencies { implementation("com.github.johnrengelman:shadow:8.1.1") - testImplementation("org.assertj:assertj-core:3.26.0") + testImplementation("org.assertj:assertj-core:3.26.3") testImplementation(enforcedPlatform("org.junit:junit-bom:5.10.3")) testImplementation("org.junit.jupiter:junit-jupiter-api") diff --git a/gradle-plugins/gradle/wrapper/gradle-wrapper.jar b/gradle-plugins/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4..2c3521197d7c 100644 Binary files a/gradle-plugins/gradle/wrapper/gradle-wrapper.jar and b/gradle-plugins/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle-plugins/gradle/wrapper/gradle-wrapper.properties b/gradle-plugins/gradle/wrapper/gradle-wrapper.properties index 8a1f6b97f473..68e8816d71c9 100644 --- a/gradle-plugins/gradle/wrapper/gradle-wrapper.properties +++ b/gradle-plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradle-plugins/gradlew b/gradle-plugins/gradlew index b740cf13397a..f5feea6d6b11 100755 --- a/gradle-plugins/gradlew +++ b/gradle-plugins/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradle-plugins/gradlew.bat b/gradle-plugins/gradlew.bat index 25da30dbdeee..9d21a21834d5 100644 --- a/gradle-plugins/gradlew.bat +++ b/gradle-plugins/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4..2c3521197d7c 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8a1f6b97f473..68e8816d71c9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13397a..f5feea6d6b11 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30dbdeee..9d21a21834d5 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/instrumentation-api-incubator/build.gradle.kts b/instrumentation-api-incubator/build.gradle.kts index 6acb75e5f79d..00d887da1b25 100644 --- a/instrumentation-api-incubator/build.gradle.kts +++ b/instrumentation-api-incubator/build.gradle.kts @@ -21,6 +21,7 @@ dependencies { testImplementation(project(":testing-common")) testImplementation("io.opentelemetry:opentelemetry-sdk") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") + testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating") } tasks { diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java new file mode 100644 index 000000000000..b229a7126e48 --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java @@ -0,0 +1,219 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.builder.internal; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.context.propagation.TextMapGetter; +import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; +import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExperimentalMetrics; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteBuilder; +import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder; +import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; +import javax.annotation.Nullable; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class DefaultHttpServerInstrumenterBuilder { + + private final String instrumentationName; + private final OpenTelemetry openTelemetry; + + private final List> additionalExtractors = + new ArrayList<>(); + private Function< + SpanStatusExtractor, + ? extends SpanStatusExtractor> + statusExtractorTransformer = Function.identity(); + private final HttpServerAttributesExtractorBuilder + httpAttributesExtractorBuilder; + private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder; + + @Nullable private TextMapGetter headerGetter; + private Function, ? extends SpanNameExtractor> + spanNameExtractorTransformer = Function.identity(); + private final HttpServerRouteBuilder httpServerRouteBuilder; + private final HttpServerAttributesGetter attributesGetter; + private boolean emitExperimentalHttpServerMetrics = false; + + public DefaultHttpServerInstrumenterBuilder( + String instrumentationName, + OpenTelemetry openTelemetry, + HttpServerAttributesGetter attributesGetter) { + this.instrumentationName = instrumentationName; + this.openTelemetry = openTelemetry; + httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(attributesGetter); + httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(attributesGetter); + httpServerRouteBuilder = HttpServerRoute.builder(attributesGetter); + this.attributesGetter = attributesGetter; + } + + /** + * Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented + * items. + */ + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder addAttributesExtractor( + AttributesExtractor attributesExtractor) { + additionalExtractors.add(attributesExtractor); + return this; + } + + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder setStatusExtractor( + Function< + SpanStatusExtractor, + ? extends SpanStatusExtractor> + statusExtractor) { + this.statusExtractorTransformer = statusExtractor; + return this; + } + + /** + * Configures the HTTP request headers that will be captured as span attributes. + * + * @param requestHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder setCapturedRequestHeaders( + List requestHeaders) { + httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders); + return this; + } + + /** + * Configures the HTTP response headers that will be captured as span attributes. + * + * @param responseHeaders A list of HTTP header names. + */ + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder setCapturedResponseHeaders( + List responseHeaders) { + httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders); + return this; + } + + /** + * Configures the instrumentation to recognize an alternative set of HTTP request methods. + * + *

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

Note: calling this method overrides the default known method sets completely; it does + * not supplement it. + * + * @param knownMethods A set of recognized HTTP request methods. + * @see HttpServerAttributesExtractorBuilder#setKnownMethods(Set) + */ + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder setKnownMethods( + Set knownMethods) { + httpAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); + httpServerRouteBuilder.setKnownMethods(knownMethods); + return this; + } + + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder setHeaderGetter( + @Nullable TextMapGetter headerGetter) { + this.headerGetter = headerGetter; + return this; + } + + /** + * Configures the instrumentation to emit experimental HTTP server metrics. + * + * @param emitExperimentalHttpServerMetrics {@code true} if the experimental HTTP server metrics + * are to be emitted. + */ + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder + setEmitExperimentalHttpServerMetrics(boolean emitExperimentalHttpServerMetrics) { + this.emitExperimentalHttpServerMetrics = emitExperimentalHttpServerMetrics; + return this; + } + + /** Sets custom {@link SpanNameExtractor} via transform function. */ + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder setSpanNameExtractor( + Function, ? extends SpanNameExtractor> + spanNameExtractorTransformer) { + this.spanNameExtractorTransformer = spanNameExtractorTransformer; + return this; + } + + public Instrumenter build() { + InstrumenterBuilder builder = builder(); + + if (headerGetter != null) { + return builder.buildServerInstrumenter(headerGetter); + } + return builder.buildInstrumenter(SpanKindExtractor.alwaysServer()); + } + + private InstrumenterBuilder builder() { + SpanNameExtractor spanNameExtractor = + spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build()); + + InstrumenterBuilder builder = + Instrumenter.builder( + openTelemetry, instrumentationName, spanNameExtractor) + .setSpanStatusExtractor( + statusExtractorTransformer.apply(HttpSpanStatusExtractor.create(attributesGetter))) + .addAttributesExtractor(httpAttributesExtractorBuilder.build()) + .addAttributesExtractors(additionalExtractors) + .addContextCustomizer(httpServerRouteBuilder.build()) + .addOperationMetrics(HttpServerMetrics.get()); + if (emitExperimentalHttpServerMetrics) { + builder + .addAttributesExtractor(HttpExperimentalAttributesExtractor.create(attributesGetter)) + .addOperationMetrics(HttpServerExperimentalMetrics.get()); + } + + return builder; + } + + @CanIgnoreReturnValue + public DefaultHttpServerInstrumenterBuilder configure(CommonConfig config) { + set(config::getKnownHttpRequestMethods, this::setKnownMethods); + set(config::getServerRequestHeaders, this::setCapturedRequestHeaders); + set(config::getServerResponseHeaders, this::setCapturedResponseHeaders); + set( + config::shouldEmitExperimentalHttpServerTelemetry, + this::setEmitExperimentalHttpServerMetrics); + return this; + } + + private static void set(Supplier supplier, Consumer consumer) { + T t = supplier.get(); + if (t != null) { + consumer.accept(t); + } + } +} diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java index 09c8fbc72570..675023f42132 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java @@ -25,8 +25,9 @@ public final class DbClientAttributesExtractor REQUEST, RESPONSE, DbClientAttributesGetter> { // copied from DbIncubatingAttributes - private static final AttributeKey DB_STATEMENT = AttributeKey.stringKey("db.statement"); - private static final AttributeKey DB_OPERATION = AttributeKey.stringKey("db.operation"); + private static final AttributeKey DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text"); + private static final AttributeKey DB_OPERATION_NAME = + AttributeKey.stringKey("db.operation.name"); /** Creates the database client attributes extractor with default configuration. */ public static AttributesExtractor create( @@ -42,7 +43,7 @@ public static AttributesExtractor create( public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) { super.onStart(attributes, parentContext, request); - internalSet(attributes, DB_STATEMENT, getter.getStatement(request)); - internalSet(attributes, DB_OPERATION, getter.getOperation(request)); + internalSet(attributes, DB_QUERY_TEXT, getter.getStatement(request)); + internalSet(attributes, DB_OPERATION_NAME, getter.getOperation(request)); } } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientCommonAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientCommonAttributesExtractor.java index e3a6614c7660..9ea3ec9ef6aa 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientCommonAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientCommonAttributesExtractor.java @@ -20,9 +20,8 @@ abstract class DbClientCommonAttributesExtractor< implements AttributesExtractor, SpanKeyProvider { // copied from DbIncubatingAttributes - private static final AttributeKey DB_NAME = AttributeKey.stringKey("db.name"); + private static final AttributeKey DB_NAMESPACE = AttributeKey.stringKey("db.namespace"); private static final AttributeKey DB_SYSTEM = AttributeKey.stringKey("db.system"); - private static final AttributeKey DB_USER = AttributeKey.stringKey("db.user"); private static final AttributeKey DB_CONNECTION_STRING = AttributeKey.stringKey("db.connection_string"); @@ -35,8 +34,7 @@ abstract class DbClientCommonAttributesExtractor< @Override public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) { internalSet(attributes, DB_SYSTEM, getter.getSystem(request)); - internalSet(attributes, DB_USER, getter.getUser(request)); - internalSet(attributes, DB_NAME, getter.getName(request)); + internalSet(attributes, DB_NAMESPACE, getter.getName(request)); internalSet(attributes, DB_CONNECTION_STRING, getter.getConnectionString(request)); } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractor.java index eacf266333bc..7f03cf0b8c49 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractor.java @@ -27,8 +27,9 @@ public final class SqlClientAttributesExtractor REQUEST, RESPONSE, SqlClientAttributesGetter> { // copied from DbIncubatingAttributes - private static final AttributeKey DB_OPERATION = AttributeKey.stringKey("db.operation"); - private static final AttributeKey DB_STATEMENT = AttributeKey.stringKey("db.statement"); + private static final AttributeKey DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text"); + private static final AttributeKey DB_OPERATION_NAME = + AttributeKey.stringKey("db.operation.name"); /** Creates the SQL client attributes extractor with default configuration. */ public static AttributesExtractor create( @@ -70,9 +71,9 @@ public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST String operation = sanitizedStatement.getOperation(); internalSet( attributes, - DB_STATEMENT, + DB_QUERY_TEXT, statementSanitizationEnabled ? sanitizedStatement.getFullStatement() : rawStatement); - internalSet(attributes, DB_OPERATION, operation); + internalSet(attributes, DB_OPERATION_NAME, operation); if (!SQL_CALL.equals(operation)) { internalSet(attributes, dbTableAttribute, sanitizedStatement.getMainIdentifier()); } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorBuilder.java index 3e172e3d288e..1a4e392ee144 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorBuilder.java @@ -15,10 +15,11 @@ public final class SqlClientAttributesExtractorBuilder { // copied from DbIncubatingAttributes - private static final AttributeKey DB_SQL_TABLE = AttributeKey.stringKey("db.sql.table"); + private static final AttributeKey DB_COLLECTION_NAME = + AttributeKey.stringKey("db.collection.name"); final SqlClientAttributesGetter getter; - AttributeKey dbTableAttribute = DB_SQL_TABLE; + AttributeKey dbTableAttribute = DB_COLLECTION_NAME; boolean statementSanitizationEnabled = true; SqlClientAttributesExtractorBuilder(SqlClientAttributesGetter getter) { diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractor.java index f49d267f7989..57ae153a6e76 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractor.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.api.incubator.semconv.messaging; +import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet; import io.opentelemetry.api.common.AttributeKey; @@ -31,7 +32,7 @@ public final class MessagingAttributesExtractor private static final AttributeKey MESSAGING_BATCH_MESSAGE_COUNT = AttributeKey.longKey("messaging.batch.message_count"); private static final AttributeKey MESSAGING_CLIENT_ID = - AttributeKey.stringKey("messaging.client_id"); + AttributeKey.stringKey("messaging.client.id"); private static final AttributeKey MESSAGING_DESTINATION_ANONYMOUS = AttributeKey.booleanKey("messaging.destination.anonymous"); private static final AttributeKey MESSAGING_DESTINATION_NAME = @@ -48,8 +49,8 @@ public final class MessagingAttributesExtractor AttributeKey.longKey("messaging.message.envelope.size"); private static final AttributeKey MESSAGING_MESSAGE_ID = AttributeKey.stringKey("messaging.message.id"); - private static final AttributeKey MESSAGING_OPERATION = - AttributeKey.stringKey("messaging.operation"); + private static final AttributeKey MESSAGING_OPERATION_TYPE = + stringKey("messaging.operation.type"); private static final AttributeKey MESSAGING_SYSTEM = AttributeKey.stringKey("messaging.system"); @@ -108,7 +109,7 @@ public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST attributes, MESSAGING_MESSAGE_ENVELOPE_SIZE, getter.getMessageEnvelopeSize(request)); internalSet(attributes, MESSAGING_CLIENT_ID, getter.getClientId(request)); if (operation != null) { - internalSet(attributes, MESSAGING_OPERATION, operation.operationName()); + internalSet(attributes, MESSAGING_OPERATION_TYPE, operation.operationName()); } } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingMetricsAdvice.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingMetricsAdvice.java new file mode 100644 index 000000000000..1d93bfb87048 --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingMetricsAdvice.java @@ -0,0 +1,50 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.semconv.messaging; + +import static java.util.Arrays.asList; +import static java.util.Collections.unmodifiableList; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder; +import io.opentelemetry.api.metrics.DoubleHistogramBuilder; +import io.opentelemetry.semconv.ErrorAttributes; +import io.opentelemetry.semconv.ServerAttributes; +import java.util.List; + +final class MessagingMetricsAdvice { + static final List DURATION_SECONDS_BUCKETS = + unmodifiableList( + asList(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0)); + + // copied from MessagingIncubatingAttributes + private static final AttributeKey MESSAGING_SYSTEM = + AttributeKey.stringKey("messaging.system"); + private static final AttributeKey MESSAGING_DESTINATION_NAME = + AttributeKey.stringKey("messaging.destination.name"); + private static final AttributeKey MESSAGING_OPERATION_TYPE = + AttributeKey.stringKey("messaging.operation.type"); + private static final AttributeKey MESSAGING_BATCH_MESSAGE_COUNT = + AttributeKey.longKey("messaging.batch.message_count"); + + static void applyPublishDurationAdvice(DoubleHistogramBuilder builder) { + if (!(builder instanceof ExtendedDoubleHistogramBuilder)) { + return; + } + ((ExtendedDoubleHistogramBuilder) builder) + .setAttributesAdvice( + asList( + MESSAGING_SYSTEM, + MESSAGING_DESTINATION_NAME, + MESSAGING_OPERATION_TYPE, + MESSAGING_BATCH_MESSAGE_COUNT, + ErrorAttributes.ERROR_TYPE, + ServerAttributes.SERVER_PORT, + ServerAttributes.SERVER_ADDRESS)); + } + + private MessagingMetricsAdvice() {} +} diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingProducerMetrics.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingProducerMetrics.java new file mode 100644 index 000000000000..44d5b243744a --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingProducerMetrics.java @@ -0,0 +1,85 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.semconv.messaging; + +import static java.util.logging.Level.FINE; + +import com.google.auto.value.AutoValue; +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.metrics.DoubleHistogram; +import io.opentelemetry.api.metrics.DoubleHistogramBuilder; +import io.opentelemetry.api.metrics.Meter; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.ContextKey; +import io.opentelemetry.instrumentation.api.instrumenter.OperationListener; +import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics; +import io.opentelemetry.instrumentation.api.internal.OperationMetricsUtil; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + +/** + * {@link OperationListener} which keeps track of Producer + * metrics. + */ +public final class MessagingProducerMetrics implements OperationListener { + private static final double NANOS_PER_S = TimeUnit.SECONDS.toNanos(1); + + private static final ContextKey MESSAGING_PRODUCER_METRICS_STATE = + ContextKey.named("messaging-producer-metrics-state"); + private static final Logger logger = Logger.getLogger(MessagingProducerMetrics.class.getName()); + + private final DoubleHistogram publishDurationHistogram; + + private MessagingProducerMetrics(Meter meter) { + DoubleHistogramBuilder durationBuilder = + meter + .histogramBuilder("messaging.publish.duration") + .setDescription("Measures the duration of publish operation.") + .setExplicitBucketBoundariesAdvice(MessagingMetricsAdvice.DURATION_SECONDS_BUCKETS) + .setUnit("s"); + MessagingMetricsAdvice.applyPublishDurationAdvice(durationBuilder); + publishDurationHistogram = durationBuilder.build(); + } + + public static OperationMetrics get() { + return OperationMetricsUtil.create("messaging produce", MessagingProducerMetrics::new); + } + + @Override + @CanIgnoreReturnValue + public Context onStart(Context context, Attributes startAttributes, long startNanos) { + return context.with( + MESSAGING_PRODUCER_METRICS_STATE, + new AutoValue_MessagingProducerMetrics_State(startAttributes, startNanos)); + } + + @Override + public void onEnd(Context context, Attributes endAttributes, long endNanos) { + MessagingProducerMetrics.State state = context.get(MESSAGING_PRODUCER_METRICS_STATE); + if (state == null) { + logger.log( + FINE, + "No state present when ending context {0}. Cannot record produce publish metrics.", + context); + return; + } + + Attributes attributes = state.startAttributes().toBuilder().putAll(endAttributes).build(); + + publishDurationHistogram.record( + (endNanos - state.startTimeNanos()) / NANOS_PER_S, attributes, context); + } + + @AutoValue + abstract static class State { + + abstract Attributes startAttributes(); + + abstract long startTimeNanos(); + } +} diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractorTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractorTest.java index 68991d1b813a..2b94aa05ad98 100644 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractorTest.java +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractorTest.java @@ -80,11 +80,10 @@ void shouldExtractAllAvailableAttributes() { assertThat(startAttributes.build()) .containsOnly( entry(DbIncubatingAttributes.DB_SYSTEM, "myDb"), - entry(DbIncubatingAttributes.DB_USER, "username"), - entry(DbIncubatingAttributes.DB_NAME, "potatoes"), + entry(DbIncubatingAttributes.DB_NAMESPACE, "potatoes"), entry(DbIncubatingAttributes.DB_CONNECTION_STRING, "mydb:///potatoes"), - entry(DbIncubatingAttributes.DB_STATEMENT, "SELECT * FROM potato"), - entry(DbIncubatingAttributes.DB_OPERATION, "SELECT")); + entry(DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT * FROM potato"), + entry(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT")); assertThat(endAttributes.build().isEmpty()).isTrue(); } diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorTest.java index f782a20b16ff..d6577084441c 100644 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorTest.java +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/SqlClientAttributesExtractorTest.java @@ -76,12 +76,11 @@ void shouldExtractAllAttributes() { assertThat(startAttributes.build()) .containsOnly( entry(DbIncubatingAttributes.DB_SYSTEM, "myDb"), - entry(DbIncubatingAttributes.DB_USER, "username"), - entry(DbIncubatingAttributes.DB_NAME, "potatoes"), + entry(DbIncubatingAttributes.DB_NAMESPACE, "potatoes"), entry(DbIncubatingAttributes.DB_CONNECTION_STRING, "mydb:///potatoes"), - entry(DbIncubatingAttributes.DB_STATEMENT, "SELECT * FROM potato WHERE id=?"), - entry(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - entry(DbIncubatingAttributes.DB_SQL_TABLE, "potato")); + entry(DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT * FROM potato WHERE id=?"), + entry(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + entry(DbIncubatingAttributes.DB_COLLECTION_NAME, "potato")); assertThat(endAttributes.build().isEmpty()).isTrue(); } @@ -104,8 +103,8 @@ void shouldNotExtractTableIfAttributeIsNotSet() { // then assertThat(attributes.build()) .containsOnly( - entry(DbIncubatingAttributes.DB_STATEMENT, "SELECT *"), - entry(DbIncubatingAttributes.DB_OPERATION, "SELECT")); + entry(DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT *"), + entry(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT")); } @Test @@ -118,7 +117,7 @@ void shouldExtractTableToSpecifiedKey() { AttributesExtractor, Void> underTest = SqlClientAttributesExtractor., Void>builder(new TestAttributesGetter()) - .setTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE) + .setTableAttribute(DbIncubatingAttributes.DB_COLLECTION_NAME) .build(); // when @@ -128,9 +127,9 @@ void shouldExtractTableToSpecifiedKey() { // then assertThat(attributes.build()) .containsOnly( - entry(DbIncubatingAttributes.DB_STATEMENT, "SELECT * FROM table"), - entry(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - entry(DbIncubatingAttributes.DB_CASSANDRA_TABLE, "table")); + entry(DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT * FROM table"), + entry(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + entry(DbIncubatingAttributes.DB_COLLECTION_NAME, "table")); } @Test diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractorTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractorTest.java index 395f52fdfdb7..f15ad257ae33 100644 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractorTest.java +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractorTest.java @@ -90,7 +90,7 @@ void shouldExtractAllAvailableAttributes( expectedEntries.add(entry(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ENVELOPE_SIZE, 120L)); expectedEntries.add(entry(MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, "43")); expectedEntries.add( - entry(MessagingIncubatingAttributes.MESSAGING_OPERATION, operation.operationName())); + entry(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, operation.operationName())); @SuppressWarnings({"unchecked", "rawtypes"}) MapEntry, ?>[] expectedEntriesArr = diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingProducerMetricsTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingProducerMetricsTest.java new file mode 100644 index 000000000000..7965d7ce49a0 --- /dev/null +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingProducerMetricsTest.java @@ -0,0 +1,122 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.semconv.messaging; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.OperationListener; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; +import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; +import io.opentelemetry.semconv.ServerAttributes; +import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; +import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.Test; + +class MessagingProducerMetricsTest { + + private static final double[] DURATION_BUCKETS = + MessagingMetricsAdvice.DURATION_SECONDS_BUCKETS.stream().mapToDouble(d -> d).toArray(); + + @Test + void collectsMetrics() { + InMemoryMetricReader metricReader = InMemoryMetricReader.create(); + SdkMeterProvider meterProvider = + SdkMeterProvider.builder().registerMetricReader(metricReader).build(); + + OperationListener listener = MessagingProducerMetrics.get().create(meterProvider.get("test")); + + Attributes requestAttributes = + Attributes.builder() + .put(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "pulsar") + .put( + MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, + "persistent://public/default/topic") + .put(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish") + .put(ServerAttributes.SERVER_PORT, 6650) + .put(ServerAttributes.SERVER_ADDRESS, "localhost") + .build(); + + Attributes responseAttributes = + Attributes.builder() + .put(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, "1:1:0:0") + .put(MessagingIncubatingAttributes.MESSAGING_BATCH_MESSAGE_COUNT, 2) + .build(); + + Context parent = + Context.root() + .with( + Span.wrap( + SpanContext.create( + "ff01020304050600ff0a0b0c0d0e0f00", + "090a0b0c0d0e0f00", + TraceFlags.getSampled(), + TraceState.getDefault()))); + + Context context1 = listener.onStart(parent, requestAttributes, nanos(100)); + + assertThat(metricReader.collectAllMetrics()).isEmpty(); + + Context context2 = listener.onStart(Context.root(), requestAttributes, nanos(150)); + + assertThat(metricReader.collectAllMetrics()).isEmpty(); + + listener.onEnd(context1, responseAttributes, nanos(250)); + + assertThat(metricReader.collectAllMetrics()) + .satisfiesExactlyInAnyOrder( + metric -> + OpenTelemetryAssertions.assertThat(metric) + .hasName("messaging.publish.duration") + .hasUnit("s") + .hasDescription("Measures the duration of publish operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(0.15 /* seconds */) + .hasAttributesSatisfying( + equalTo( + MessagingIncubatingAttributes.MESSAGING_SYSTEM, + "pulsar"), + equalTo( + MessagingIncubatingAttributes + .MESSAGING_DESTINATION_NAME, + "persistent://public/default/topic"), + equalTo(ServerAttributes.SERVER_PORT, 6650), + equalTo(ServerAttributes.SERVER_ADDRESS, "localhost")) + .hasExemplarsSatisfying( + exemplar -> + exemplar + .hasTraceId("ff01020304050600ff0a0b0c0d0e0f00") + .hasSpanId("090a0b0c0d0e0f00")) + .hasBucketBoundaries(DURATION_BUCKETS)))); + + listener.onEnd(context2, responseAttributes, nanos(300)); + + assertThat(metricReader.collectAllMetrics()) + .satisfiesExactlyInAnyOrder( + metric -> + OpenTelemetryAssertions.assertThat(metric) + .hasName("messaging.publish.duration") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> point.hasSum(0.3 /* seconds */)))); + } + + private static long nanos(int millis) { + return TimeUnit.MILLISECONDS.toNanos(millis); + } +} diff --git a/instrumentation/armeria/armeria-grpc-1.14/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/grpc/v1_14/ArmeriaGrpcTest.java b/instrumentation/armeria/armeria-grpc-1.14/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/grpc/v1_14/ArmeriaGrpcTest.java index 2402365b9efa..437d5dd0a5a5 100644 --- a/instrumentation/armeria/armeria-grpc-1.14/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/grpc/v1_14/ArmeriaGrpcTest.java +++ b/instrumentation/armeria/armeria-grpc-1.14/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/grpc/v1_14/ArmeriaGrpcTest.java @@ -19,7 +19,6 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.semconv.ServerAttributes; -import io.opentelemetry.semconv.incubating.MessageIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -87,15 +86,15 @@ void grpcInstrumentation() { event .hasName("message") .hasAttributesSatisfyingExactly( - equalTo(MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -115,13 +114,13 @@ void grpcInstrumentation() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( - equalTo(MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))))); + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))))); } } diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java index 4136e7bed954..9341bf6f79dc 100644 --- a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java @@ -11,6 +11,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.ContextPropagationDebug; import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.annotation.Nullable; @@ -48,11 +49,20 @@ public void end( public Context extract(AwsLambdaRequest input) { ContextPropagationDebug.debugContextLeakIfEnabled(); + // Look in both the http headers and the custom client context + Map headers = input.getHeaders(); + if (input.getAwsContext() != null && input.getAwsContext().getClientContext() != null) { + Map customContext = input.getAwsContext().getClientContext().getCustom(); + if (customContext != null) { + headers = new HashMap<>(headers); + headers.putAll(customContext); + } + } return openTelemetry .getPropagators() .getTextMapPropagator() - .extract(Context.root(), input.getHeaders(), MapGetter.INSTANCE); + .extract(Context.root(), headers, MapGetter.INSTANCE); } private enum MapGetter implements TextMapGetter> { diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/InstrumenterExtractionTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/InstrumenterExtractionTest.java new file mode 100644 index 000000000000..cb19d1e56879 --- /dev/null +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/InstrumenterExtractionTest.java @@ -0,0 +1,45 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.amazonaws.services.lambda.runtime.ClientContext; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; +import java.util.HashMap; +import org.junit.jupiter.api.Test; + +class InstrumenterExtractionTest { + @Test + public void useCustomContext() { + AwsLambdaFunctionInstrumenter instr = + AwsLambdaFunctionInstrumenterFactory.createInstrumenter( + OpenTelemetry.propagating( + ContextPropagators.create(W3CTraceContextPropagator.getInstance()))); + com.amazonaws.services.lambda.runtime.Context awsContext = + mock(com.amazonaws.services.lambda.runtime.Context.class); + ClientContext clientContext = mock(ClientContext.class); + when(awsContext.getClientContext()).thenReturn(clientContext); + HashMap customMap = new HashMap<>(); + customMap.put("traceparent", "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"); + when(clientContext.getCustom()).thenReturn(customMap); + + AwsLambdaRequest input = AwsLambdaRequest.create(awsContext, new HashMap<>(), new HashMap<>()); + + Context extracted = instr.extract(input); + SpanContext spanContext = Span.fromContext(extracted).getSpanContext(); + assertThat(spanContext.getTraceId()).isEqualTo("4bf92f3577b34da6a3ce929d0e0e4736"); + assertThat(spanContext.getSpanId()).isEqualTo("00f067aa0ba902b7"); + } +} diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsEventAttributesExtractor.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsEventAttributesExtractor.java index f8aa3c80e137..75138f1d00a9 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsEventAttributesExtractor.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsEventAttributesExtractor.java @@ -5,6 +5,8 @@ package io.opentelemetry.instrumentation.awslambdaevents.v2_2.internal; +import static io.opentelemetry.api.common.AttributeKey.stringKey; + import com.amazonaws.services.lambda.runtime.events.SQSEvent; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.AttributesBuilder; @@ -15,8 +17,8 @@ class SqsEventAttributesExtractor implements AttributesExtractor { // copied from MessagingIncubatingAttributes - private static final AttributeKey MESSAGING_OPERATION = - AttributeKey.stringKey("messaging.operation"); + private static final AttributeKey MESSAGING_OPERATION_TYPE = + stringKey("messaging.operation.type"); private static final AttributeKey MESSAGING_SYSTEM = AttributeKey.stringKey("messaging.system"); // copied from MessagingIncubatingAttributes.MessagingSystemValues @@ -25,7 +27,7 @@ class SqsEventAttributesExtractor implements AttributesExtractor @Override public void onStart(AttributesBuilder attributes, Context parentContext, SQSEvent event) { attributes.put(MESSAGING_SYSTEM, AWS_SQS); - attributes.put(MESSAGING_OPERATION, "process"); + attributes.put(MESSAGING_OPERATION_TYPE, "process"); } @Override diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsMessageAttributesExtractor.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsMessageAttributesExtractor.java index ad6358c34f50..0e9dfee389e5 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsMessageAttributesExtractor.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/SqsMessageAttributesExtractor.java @@ -5,6 +5,8 @@ package io.opentelemetry.instrumentation.awslambdaevents.v2_2.internal; +import static io.opentelemetry.api.common.AttributeKey.stringKey; + import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.AttributesBuilder; @@ -19,8 +21,8 @@ class SqsMessageAttributesExtractor implements AttributesExtractor MESSAGING_MESSAGE_ID = AttributeKey.stringKey("messaging.message.id"); - private static final AttributeKey MESSAGING_OPERATION = - AttributeKey.stringKey("messaging.operation"); + private static final AttributeKey MESSAGING_OPERATION_TYPE = + stringKey("messaging.operation.type"); private static final AttributeKey MESSAGING_SYSTEM = AttributeKey.stringKey("messaging.system"); // copied from MessagingIncubatingAttributes.MessagingSystemValues @@ -29,7 +31,7 @@ class SqsMessageAttributesExtractor implements AttributesExtractor { diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMessageHandlerTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMessageHandlerTest.java index 49bcbe97e241..8bf7031a8ec8 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMessageHandlerTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/test/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMessageHandlerTest.java @@ -89,7 +89,8 @@ void processSpans() { equalTo( MessagingIncubatingAttributes.MESSAGING_SYSTEM, MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process")) + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process")) .hasLinks( LinkData.create( SpanContext.createFromRemoteParent( @@ -111,7 +112,8 @@ void processSpans() { equalTo( MessagingIncubatingAttributes.MESSAGING_SYSTEM, MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, "message1"), equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "queue1")) @@ -130,7 +132,8 @@ void processSpans() { equalTo( MessagingIncubatingAttributes.MESSAGING_SYSTEM, MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, "message2"), equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "queue1")) diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AbstractAwsLambdaSqsEventHandlerTest.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AbstractAwsLambdaSqsEventHandlerTest.java index c7003983787c..172cc11448d8 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AbstractAwsLambdaSqsEventHandlerTest.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AbstractAwsLambdaSqsEventHandlerTest.java @@ -84,7 +84,8 @@ void sameSource() { MessagingIncubatingAttributes.MESSAGING_SYSTEM, MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process")) + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process")) .hasLinksSatisfying( links -> assertThat(links) @@ -133,7 +134,8 @@ void differentSource() { MessagingIncubatingAttributes.MESSAGING_SYSTEM, MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process")) + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process")) .hasLinksSatisfying( links -> assertThat(links) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy index 1dea81b84719..bbd9f62fcb3b 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/S3TracingTest.groovy @@ -199,7 +199,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "$ServerAttributes.SERVER_PORT" { it == null || Number } "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "s3ToSqsTestQueue" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String "$NetworkAttributes.NETWORK_PROTOCOL_VERSION" "1.1" } @@ -535,7 +535,7 @@ class S3TracingTest extends AgentInstrumentationSpecification { "$ServerAttributes.SERVER_PORT" { it == null || Number } "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "s3ToSnsToSqsTestQueue" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String "$NetworkAttributes.NETWORK_PROTOCOL_VERSION" "1.1" } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy index ba6b28fafb59..31da63e4f6e9 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/groovy/SnsTracingTest.groovy @@ -190,7 +190,7 @@ class SnsTracingTest extends AgentInstrumentationSpecification { "$ServerAttributes.SERVER_PORT" { it == null || Number } "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "snsToSqsTestQueue" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String "$NetworkAttributes.NETWORK_PROTOCOL_VERSION" "1.1" } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java index 51dc8b4d37e9..b7f47ddc1316 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java @@ -133,7 +133,8 @@ void testSimpleSqsProducerConsumerServices() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -163,7 +164,8 @@ void testSimpleSqsProducerConsumerServices() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -242,7 +244,8 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -272,7 +275,8 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java index 3dd3fe259a3b..212958260a9c 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java @@ -165,7 +165,8 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -209,7 +210,8 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_BATCH_MESSAGE_COUNT, 1), @@ -251,7 +253,8 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -342,7 +345,8 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -411,7 +415,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes @@ -448,7 +452,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts index 4cfaae6135b2..9f83480f5511 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts @@ -13,6 +13,7 @@ muzzle { excludeInstrumentationName("aws-sdk-2.2-sqs") excludeInstrumentationName("aws-sdk-2.2-sns") + excludeInstrumentationName("aws-sdk-2.2-lambda") // several software.amazon.awssdk artifacts are missing for this version skip("2.17.200") @@ -43,6 +44,7 @@ muzzle { extraDependency("software.amazon.awssdk:protocol-core") excludeInstrumentationName("aws-sdk-2.2-sns") + excludeInstrumentationName("aws-sdk-2.2-lambda") // several software.amazon.awssdk artifacts are missing for this version skip("2.17.200") @@ -57,6 +59,21 @@ muzzle { extraDependency("software.amazon.awssdk:protocol-core") excludeInstrumentationName("aws-sdk-2.2-sqs") + excludeInstrumentationName("aws-sdk-2.2-lambda") + + // several software.amazon.awssdk artifacts are missing for this version + skip("2.17.200") + } + pass { + group.set("software.amazon.awssdk") + module.set("lambda") + versions.set("[2.17.0,)") + // Used by all SDK services, the only case it isn't is an SDK extension such as a custom HTTP + // client, which is not target of instrumentation anyways. + extraDependency("software.amazon.awssdk:protocol-core") + + excludeInstrumentationName("aws-sdk-2.2-sqs") + excludeInstrumentationName("aws-sdk-2.2-sns") // several software.amazon.awssdk artifacts are missing for this version skip("2.17.200") @@ -81,6 +98,7 @@ dependencies { testLibrary("software.amazon.awssdk:dynamodb:2.2.0") testLibrary("software.amazon.awssdk:ec2:2.2.0") testLibrary("software.amazon.awssdk:kinesis:2.2.0") + testLibrary("software.amazon.awssdk:lambda:2.2.0") testLibrary("software.amazon.awssdk:rds:2.2.0") testLibrary("software.amazon.awssdk:s3:2.2.0") testLibrary("software.amazon.awssdk:sqs:2.2.0") diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaAdviceBridge.java b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaAdviceBridge.java new file mode 100644 index 000000000000..3aaa17525137 --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaAdviceBridge.java @@ -0,0 +1,15 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awssdk.v2_2; + +public final class LambdaAdviceBridge { + private LambdaAdviceBridge() {} + + public static void referenceForMuzzleOnly() { + throw new UnsupportedOperationException( + LambdaImpl.class.getName() + " referencing for muzzle, should never be actually called"); + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/LambdaInstrumentationModule.java b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/LambdaInstrumentationModule.java new file mode 100644 index 000000000000..575bb5ec7fbc --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/LambdaInstrumentationModule.java @@ -0,0 +1,47 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2; + +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; +import static net.bytebuddy.matcher.ElementMatchers.none; + +import com.google.auto.service.AutoService; +import io.opentelemetry.instrumentation.awssdk.v2_2.LambdaAdviceBridge; +import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.matcher.ElementMatcher; + +@AutoService(InstrumentationModule.class) +public class LambdaInstrumentationModule extends AbstractAwsSdkInstrumentationModule { + + public LambdaInstrumentationModule() { + super("aws-sdk-2.2-lambda"); + } + + @Override + public ElementMatcher.Junction classLoaderMatcher() { + return hasClassesNamed( + "software.amazon.awssdk.services.lambda.model.InvokeRequest", + "software.amazon.awssdk.protocols.jsoncore.JsonNode"); + } + + @Override + public void doTransform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + none(), LambdaInstrumentationModule.class.getName() + "$RegisterAdvice"); + } + + @SuppressWarnings("unused") + public static class RegisterAdvice { + @Advice.OnMethodExit(suppress = Throwable.class) + public static void onExit() { + // (indirectly) using LambdaImpl class here to make sure it is available from LambdaAccess + // (injected into app classloader) and checked by Muzzle + LambdaAdviceBridge.referenceForMuzzleOnly(); + } + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/Aws2LambdaTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/Aws2LambdaTest.java new file mode 100644 index 000000000000..0991e804956e --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/Aws2LambdaTest.java @@ -0,0 +1,35 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2; + +import io.opentelemetry.instrumentation.awssdk.v2_2.AbstractAws2LambdaTest; +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import org.junit.jupiter.api.extension.RegisterExtension; +import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; + +class Aws2LambdaTest extends AbstractAws2LambdaTest { + + @RegisterExtension + private static final AgentInstrumentationExtension testing = + AgentInstrumentationExtension.create(); + + @Override + protected InstrumentationExtension getTesting() { + return testing; + } + + @Override + protected boolean canTestLambdaInvoke() { + // only supported since 2.17.0 + return Boolean.getBoolean("testLatestDeps"); + } + + @Override + protected ClientOverrideConfiguration.Builder createOverrideConfigurationBuilder() { + return ClientOverrideConfiguration.builder(); + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts index 6e0ea36a64bd..7f621f4977d2 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { testLibrary("software.amazon.awssdk:dynamodb:2.2.0") testLibrary("software.amazon.awssdk:ec2:2.2.0") testLibrary("software.amazon.awssdk:kinesis:2.2.0") + testLibrary("software.amazon.awssdk:lambda:2.2.0") testLibrary("software.amazon.awssdk:rds:2.2.0") testLibrary("software.amazon.awssdk:s3:2.2.0") testLibrary("software.amazon.awssdk:sqs:2.2.0") diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts index 862df156ae14..e4be5bdfe30a 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts @@ -7,8 +7,11 @@ dependencies { library("software.amazon.awssdk:aws-core:2.2.0") library("software.amazon.awssdk:sqs:2.2.0") + library("software.amazon.awssdk:lambda:2.2.0") library("software.amazon.awssdk:sns:2.2.0") library("software.amazon.awssdk:aws-json-protocol:2.2.0") + // json-utils was added in 2.17.0 + compileOnly("software.amazon.awssdk:json-utils:2.17.0") compileOnly(project(":muzzle")) // For @NoMuzzle testImplementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:testing")) @@ -38,10 +41,24 @@ testing { implementation("software.amazon.awssdk:aws-core:+") implementation("software.amazon.awssdk:aws-json-protocol:+") implementation("software.amazon.awssdk:dynamodb:+") + implementation("software.amazon.awssdk:lambda:+") } else { implementation("software.amazon.awssdk:aws-core:2.2.0") implementation("software.amazon.awssdk:aws-json-protocol:2.2.0") implementation("software.amazon.awssdk:dynamodb:2.2.0") + implementation("software.amazon.awssdk:lambda:2.2.0") + } + } + } + + val testLambda by registering(JvmTestSuite::class) { + dependencies { + implementation(project()) + implementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:testing")) + if (findProperty("testLatestDeps") as Boolean) { + implementation("software.amazon.awssdk:lambda:+") + } else { + implementation("software.amazon.awssdk:lambda:2.17.0") } } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaAccess.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaAccess.java new file mode 100644 index 000000000000..33d792c0c826 --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaAccess.java @@ -0,0 +1,21 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awssdk.v2_2; + +import io.opentelemetry.context.Context; +import io.opentelemetry.javaagent.tooling.muzzle.NoMuzzle; +import software.amazon.awssdk.core.SdkRequest; + +final class LambdaAccess { + private LambdaAccess() {} + + private static final boolean enabled = PluginImplUtil.isImplPresent("LambdaImpl"); + + @NoMuzzle + public static SdkRequest modifyRequest(SdkRequest request, Context otelContext) { + return enabled ? LambdaImpl.modifyRequest(request, otelContext) : null; + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaImpl.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaImpl.java new file mode 100644 index 000000000000..fae5edf5e12a --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/LambdaImpl.java @@ -0,0 +1,102 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awssdk.v2_2; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.annotation.Nullable; +import software.amazon.awssdk.core.SdkRequest; +import software.amazon.awssdk.protocols.jsoncore.JsonNode; +import software.amazon.awssdk.protocols.jsoncore.internal.ObjectJsonNode; +import software.amazon.awssdk.protocols.jsoncore.internal.StringJsonNode; +import software.amazon.awssdk.services.lambda.model.InvokeRequest; + +// this class is only used from LambdaAccess from method with @NoMuzzle annotation + +// Direct lambda invocations (e.g., not through an api gateway) currently strip +// away the otel propagation headers (but leave x-ray ones intact). Use the +// custom client context header as an additional propagation mechanism for this +// very specific scenario. For reference, the header is named "X-Amz-Client-Context" but the api to +// manipulate it abstracts that away. The client context field is documented in +// https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#API_Invoke_RequestParameters + +final class LambdaImpl { + static { + // Force loading of InvokeRequest; this ensures that an exception is thrown at this point when + // the Lambda library is not present, which will cause DirectLambdaAccess to have + // enabled=false in library mode. + @SuppressWarnings("unused") + String invokeRequestName = InvokeRequest.class.getName(); + // was added in 2.17.0 + @SuppressWarnings("unused") + String jsonNodeName = JsonNode.class.getName(); + } + + private static final String CLIENT_CONTEXT_CUSTOM_FIELDS_KEY = "custom"; + static final int MAX_CLIENT_CONTEXT_LENGTH = 3583; // visible for testing + + private LambdaImpl() {} + + @Nullable + static SdkRequest modifyRequest( + SdkRequest request, io.opentelemetry.context.Context otelContext) { + if (isDirectLambdaInvocation(request)) { + return modifyOrAddCustomContextHeader((InvokeRequest) request, otelContext); + } + return null; + } + + static boolean isDirectLambdaInvocation(SdkRequest request) { + return request instanceof InvokeRequest; + } + + static SdkRequest modifyOrAddCustomContextHeader( + InvokeRequest request, io.opentelemetry.context.Context otelContext) { + InvokeRequest.Builder builder = request.toBuilder(); + // Unfortunately the value of this thing is a base64-encoded json with a character limit; also + // therefore not comma-composable like many http headers + String clientContextString = request.clientContext(); + String clientContextJsonString = "{}"; + if (clientContextString != null && !clientContextString.isEmpty()) { + clientContextJsonString = + new String(Base64.getDecoder().decode(clientContextString), StandardCharsets.UTF_8); + } + JsonNode jsonNode = JsonNode.parser().parse(clientContextJsonString); + if (!jsonNode.isObject()) { + return null; + } + JsonNode customNode = + jsonNode + .asObject() + .computeIfAbsent( + CLIENT_CONTEXT_CUSTOM_FIELDS_KEY, (k) -> new ObjectJsonNode(new LinkedHashMap<>())); + if (!customNode.isObject()) { + return null; + } + Map map = customNode.asObject(); + GlobalOpenTelemetry.getPropagators() + .getTextMapPropagator() + .inject(otelContext, map, (nodes, key, value) -> nodes.put(key, new StringJsonNode(value))); + if (map.isEmpty()) { + return null; + } + + // turn it back into a string (json encode) + String newJson = jsonNode.toString(); + + // turn it back into a base64 string + String newJson64 = Base64.getEncoder().encodeToString(newJson.getBytes(StandardCharsets.UTF_8)); + // check it for length (err on the safe side with >=) + if (newJson64.length() >= MAX_CLIENT_CONTEXT_LENGTH) { + return null; + } + builder.clientContext(newJson64); + return builder.build(); + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java index 4b718e0abc40..7fb9c5cbec29 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java @@ -44,7 +44,8 @@ final class TracingExecutionInterceptor implements ExecutionInterceptor { // copied from DbIncubatingAttributes - private static final AttributeKey DB_OPERATION = AttributeKey.stringKey("db.operation"); + private static final AttributeKey DB_OPERATION_NAME = + AttributeKey.stringKey("db.operation.name"); private static final AttributeKey DB_SYSTEM = AttributeKey.stringKey("db.system"); // copied from DbIncubatingAttributes.DbSystemValues private static final String DB_SYSTEM_DYNAMODB = "dynamodb"; @@ -212,6 +213,10 @@ public SdkRequest modifyRequest( if (modifiedRequest != null) { return modifiedRequest; } + modifiedRequest = LambdaAccess.modifyRequest(request, otelContext); + if (modifiedRequest != null) { + return modifiedRequest; + } // Insert other special handling here, following the same pattern as SQS and SNS. @@ -319,7 +324,7 @@ private void populateRequestAttributes( span.setAttribute(DB_SYSTEM, DB_SYSTEM_DYNAMODB); String operation = attributes.getAttribute(SdkExecutionAttribute.OPERATION_NAME); if (operation != null) { - span.setAttribute(DB_OPERATION, operation); + span.setAttribute(DB_OPERATION_NAME, operation); } } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testLambda/java/io/opentelemetry/instrumentation/awssdk/v2_2/Aws2LambdaTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testLambda/java/io/opentelemetry/instrumentation/awssdk/v2_2/Aws2LambdaTest.java new file mode 100644 index 000000000000..3bfe7788e066 --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testLambda/java/io/opentelemetry/instrumentation/awssdk/v2_2/Aws2LambdaTest.java @@ -0,0 +1,107 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awssdk.v2_2; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; +import software.amazon.awssdk.services.lambda.model.InvokeRequest; + +class Aws2LambdaTest extends AbstractAws2LambdaTest { + + @RegisterExtension + private static final LibraryInstrumentationExtension testing = + LibraryInstrumentationExtension.create(); + + private static Context context; + private static AwsSdkTelemetry telemetry; + + @BeforeAll + static void setup() { + testing.runWithHttpServerSpan( + () -> { + context = Context.current(); + }); + + telemetry = AwsSdkTelemetry.create(testing.getOpenTelemetry()); + } + + @Override + protected InstrumentationExtension getTesting() { + return testing; + } + + @Override + protected ClientOverrideConfiguration.Builder createOverrideConfigurationBuilder() { + return ClientOverrideConfiguration.builder() + .addExecutionInterceptor(telemetry.newExecutionInterceptor()); + } + + private static String base64ify(String json) { + return Base64.getEncoder().encodeToString(json.getBytes(StandardCharsets.UTF_8)); + } + + @Test + void noExistingClientContext() { + InvokeRequest request = InvokeRequest.builder().build(); + + InvokeRequest newRequest = + (InvokeRequest) LambdaImpl.modifyOrAddCustomContextHeader(request, context); + + String newClientContext = newRequest.clientContext(); + newClientContext = + new String(Base64.getDecoder().decode(newClientContext), StandardCharsets.UTF_8); + assertThat(newClientContext.contains("traceparent")).isTrue(); + } + + @Test + void withExistingClientContext() { + String clientContext = + base64ify( + "{\"otherStuff\": \"otherValue\", \"custom\": {\"preExisting\": \"somevalue\"} }"); + InvokeRequest request = InvokeRequest.builder().clientContext(clientContext).build(); + + InvokeRequest newRequest = + (InvokeRequest) LambdaImpl.modifyOrAddCustomContextHeader(request, context); + + String newClientContext = newRequest.clientContext(); + newClientContext = + new String(Base64.getDecoder().decode(newClientContext), StandardCharsets.UTF_8); + assertThat(newClientContext.contains("traceparent")).isTrue(); + assertThat(newClientContext.contains("preExisting")).isTrue(); + assertThat(newClientContext.contains("otherStuff")).isTrue(); + } + + @Test + void exceedingMaximumLengthDoesNotModify() { + // awkward way to build a valid json that is almost but not quite too long + StringBuilder buffer = new StringBuilder("x"); + String long64edClientContext = ""; + while (true) { + buffer.append("x"); + String newClientContext = base64ify("{\"" + buffer + "\": \"" + buffer + "\"}"); + if (newClientContext.length() >= LambdaImpl.MAX_CLIENT_CONTEXT_LENGTH) { + break; + } + long64edClientContext = newClientContext; + } + + InvokeRequest request = InvokeRequest.builder().clientContext(long64edClientContext).build(); + assertThat(request.clientContext().equals(long64edClientContext)).isTrue(); + + InvokeRequest newRequest = + (InvokeRequest) LambdaImpl.modifyOrAddCustomContextHeader(request, context); + assertThat(newRequest).isNull(); // null return means no modification performed + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts index 9981aa9a1965..f9c0791bd205 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { compileOnly("software.amazon.awssdk:dynamodb:2.2.0") compileOnly("software.amazon.awssdk:ec2:2.2.0") compileOnly("software.amazon.awssdk:kinesis:2.2.0") + compileOnly("software.amazon.awssdk:lambda:2.2.0") compileOnly("software.amazon.awssdk:rds:2.2.0") compileOnly("software.amazon.awssdk:s3:2.2.0") compileOnly("software.amazon.awssdk:sqs:2.2.0") diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy index a73122bc1af9..f4540e50c334 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy @@ -149,7 +149,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "aws.requestId" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" - "$DbIncubatingAttributes.DB_OPERATION" "CreateTable" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateTable" "aws.dynamodb.global_secondary_indexes" "[{\"IndexName\":\"globalIndex\",\"KeySchema\":[{\"AttributeName\":\"attribute\"}],\"ProvisionedThroughput\":{\"ReadCapacityUnits\":10,\"WriteCapacityUnits\":12}},{\"IndexName\":\"globalIndexSecondary\",\"KeySchema\":[{\"AttributeName\":\"attributeSecondary\"}],\"ProvisionedThroughput\":{\"ReadCapacityUnits\":7,\"WriteCapacityUnits\":8}}]" "aws.dynamodb.provisioned_throughput.read_capacity_units" "1" "aws.dynamodb.provisioned_throughput.write_capacity_units" "1" @@ -182,7 +182,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "aws.requestId" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" - "$DbIncubatingAttributes.DB_OPERATION" "Query" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "Query" "aws.dynamodb.limit" "10" "aws.dynamodb.select" "ALL_ATTRIBUTES" } @@ -214,7 +214,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "aws.requestId" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" - "$DbIncubatingAttributes.DB_OPERATION" "${operation}" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "${operation}" } } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy index 3241c48640bb..dc1db3660185 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy @@ -143,7 +143,7 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { } else if (service == "Sqs" && operation == "SendMessage") { "aws.queue.url" QUEUE_URL "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "somequeue" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS } else if (service == "Kinesis") { @@ -303,7 +303,7 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { } else if (service == "Sqs" && operation == "SendMessage") { "aws.queue.url" QUEUE_URL "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "somequeue" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS } else if (service == "Kinesis") { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy index 6f44c92573d6..6cc42bbb021f 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsSuppressReceiveSpansTest.groovy @@ -159,7 +159,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp "$ServerAttributes.SERVER_PORT" sqsPort "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testSdkSqs" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String } } @@ -180,7 +180,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp "$ServerAttributes.SERVER_PORT" sqsPort "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testSdkSqs" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String } } @@ -331,7 +331,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp "$ServerAttributes.SERVER_PORT" sqsPort "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testSdkSqs" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" } } for (int i: 1..(xrayInjectionEnabled ? 3 : 2)) { @@ -353,7 +353,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp "$ServerAttributes.SERVER_PORT" sqsPort "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testSdkSqs" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String } } @@ -381,7 +381,7 @@ abstract class AbstractAws2SqsSuppressReceiveSpansTest extends InstrumentationSp "$ServerAttributes.SERVER_PORT" sqsPort "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testSdkSqs" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java index 8c68be58729b..46ecd71033af 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java @@ -175,7 +175,7 @@ public void testSendDynamoDbRequestWithRetries() { .containsEntry("aws.requestId", requestId) .containsEntry("aws.table.name", "sometable") .containsEntry(DbIncubatingAttributes.DB_SYSTEM, "dynamodb") - .containsEntry(DbIncubatingAttributes.DB_OPERATION, operation); + .containsEntry(DbIncubatingAttributes.DB_OPERATION_NAME, operation); }); if (isRecordIndividualHttpErrorEnabled()) { span.hasEventsSatisfyingExactly( diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2LambdaTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2LambdaTest.java new file mode 100644 index 000000000000..64c8a48a6c77 --- /dev/null +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2LambdaTest.java @@ -0,0 +1,78 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.awssdk.v2_2; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.testing.internal.armeria.common.HttpResponse; +import io.opentelemetry.testing.internal.armeria.common.HttpStatus; +import io.opentelemetry.testing.internal.armeria.common.MediaType; +import io.opentelemetry.testing.internal.armeria.testing.junit5.server.mock.MockWebServerExtension; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.lambda.LambdaClient; +import software.amazon.awssdk.services.lambda.LambdaClientBuilder; +import software.amazon.awssdk.services.lambda.model.InvokeRequest; +import software.amazon.awssdk.services.lambda.model.InvokeResponse; + +public abstract class AbstractAws2LambdaTest { + + @RegisterExtension + private static final MockWebServerExtension server = new MockWebServerExtension(); + + private static final StaticCredentialsProvider CREDENTIALS_PROVIDER = + StaticCredentialsProvider.create( + AwsBasicCredentials.create("my-access-key", "my-secret-key")); + + protected abstract InstrumentationExtension getTesting(); + + protected abstract ClientOverrideConfiguration.Builder createOverrideConfigurationBuilder(); + + protected boolean canTestLambdaInvoke() { + return true; + } + + @Test + void testInvokeLambda() { + Assumptions.assumeTrue(canTestLambdaInvoke()); + + LambdaClientBuilder builder = LambdaClient.builder(); + builder + .overrideConfiguration(createOverrideConfigurationBuilder().build()) + .endpointOverride(server.httpUri()); + builder.region(Region.AP_NORTHEAST_1).credentialsProvider(CREDENTIALS_PROVIDER); + LambdaClient client = builder.build(); + + server.enqueue(HttpResponse.of(HttpStatus.OK, MediaType.PLAIN_TEXT_UTF_8, "ok")); + + InvokeRequest request = InvokeRequest.builder().functionName("test").build(); + InvokeResponse response = client.invoke(request); + assertThat(response.statusCode()).isEqualTo(200); + assertThat(response.payload().asUtf8String()).isEqualTo("ok"); + + String clientContextHeader = + server.takeRequest().request().headers().get("x-amz-client-context"); + assertThat(clientContextHeader).isNotEmpty(); + String clientContextJson = + new String(Base64.getDecoder().decode(clientContextHeader), StandardCharsets.UTF_8); + assertThat(clientContextJson).contains("traceparent"); + + getTesting() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("Lambda.Invoke").hasKind(SpanKind.CLIENT).hasNoParent())); + } +} diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java index 39a267222ba0..5f312559f2d8 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java @@ -221,7 +221,8 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, v -> v.isInstanceOf(String.class)))); @@ -305,7 +306,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_BATCH_MESSAGE_COUNT, @@ -352,7 +353,7 @@ void assertSqsTraces(Boolean withParent, Boolean captureHeaders) { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, @@ -532,7 +533,8 @@ void testBatchSqsProducerConsumerServicesSync() throws URISyntaxException { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"))); + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"))); }, trace -> { List> spanAsserts = new ArrayList<>(); @@ -560,7 +562,9 @@ void testBatchSqsProducerConsumerServicesSync() throws URISyntaxException { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_BATCH_MESSAGE_COUNT, 3))); @@ -609,7 +613,7 @@ void testBatchSqsProducerConsumerServicesSync() throws URISyntaxException { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java index 45b368a043f1..997a0ac926f4 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java @@ -125,11 +125,11 @@ public void pre( attributes.put(DbIncubatingAttributes.DB_SYSTEM, system); String statement = getStatement(exchange, endpoint); if (statement != null) { - attributes.put(DbIncubatingAttributes.DB_STATEMENT, statement); + attributes.put(DbIncubatingAttributes.DB_QUERY_TEXT, statement); } String dbName = getDbName(endpoint); if (dbName != null) { - attributes.put(DbIncubatingAttributes.DB_NAME, dbName); + attributes.put(DbIncubatingAttributes.DB_NAMESPACE, dbName); } } } diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/KafkaSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/KafkaSpanDecorator.java index fc6e1fc87113..c478205d68d1 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/KafkaSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/KafkaSpanDecorator.java @@ -60,7 +60,7 @@ public void pre( CamelDirection camelDirection) { super.pre(attributes, exchange, endpoint, camelDirection); - attributes.put(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"); + attributes.put(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"); Integer partition = exchange.getIn().getHeader(PARTITION, Integer.class); if (partition != null) { diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java index b004b676d209..e56d1b5abc78 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/aws/AwsSpanAssertions.java @@ -100,17 +100,17 @@ static SpanDataAssert sqs( MessagingIncubatingAttributes.MessagingSystemValues.AWS_SQS))); if (spanName.endsWith("receive")) { attributeAssertions.add( - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive")); + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive")); } else if (spanName.endsWith("process")) { attributeAssertions.add( - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process")); + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process")); attributeAssertions.add( satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> assertThat(val).isNotNull())); } else if (spanName.endsWith("publish")) { attributeAssertions.add( - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish")); + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish")); attributeAssertions.add( satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java index 4e21f1bff32d..4e77a8fdccd6 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java @@ -116,9 +116,9 @@ void testCassandra() { equalTo( stringKey("camel.uri"), "cql://" + host + ":" + cassandraPort + "/test"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "select * from test.users where id=? ALLOW FILTERING"), equalTo(DbIncubatingAttributes.DB_SYSTEM, "cassandra")))); } diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java index 841f48fdbc6e..f70a2f80bcbb 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java @@ -32,7 +32,7 @@ public final class CassandraSingletons { DbClientSpanNameExtractor.create(attributesGetter)) .addAttributesExtractor( SqlClientAttributesExtractor.builder(attributesGetter) - .setTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE) + .setTableAttribute(DbIncubatingAttributes.DB_COLLECTION_NAME) .setStatementSanitizationEnabled( AgentCommonConfig.get().isStatementSanitizationEnabled()) .build()) diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java index 7d581375d537..acac200902ac 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/test/java/CassandraClientTest.java @@ -100,7 +100,7 @@ void syncTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DbIncubatingAttributes.DB_SYSTEM, "cassandra"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "USE " + parameter.keyspace))), trace -> trace.hasSpansSatisfyingExactly( @@ -115,12 +115,14 @@ void syncTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, cassandraIp), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DbIncubatingAttributes.DB_SYSTEM, "cassandra"), - equalTo(DbIncubatingAttributes.DB_NAME, parameter.keyspace), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, parameter.keyspace), equalTo( - DbIncubatingAttributes.DB_STATEMENT, parameter.expectedStatement), - equalTo(DbIncubatingAttributes.DB_OPERATION, parameter.operation), + DbIncubatingAttributes.DB_QUERY_TEXT, + parameter.expectedStatement), equalTo( - DbIncubatingAttributes.DB_CASSANDRA_TABLE, parameter.table)))); + DbIncubatingAttributes.DB_OPERATION_NAME, parameter.operation), + equalTo( + DbIncubatingAttributes.DB_COLLECTION_NAME, parameter.table)))); } else { testing.waitAndAssertTraces( trace -> @@ -137,10 +139,12 @@ void syncTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DbIncubatingAttributes.DB_SYSTEM, "cassandra"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, parameter.expectedStatement), - equalTo(DbIncubatingAttributes.DB_OPERATION, parameter.operation), + DbIncubatingAttributes.DB_QUERY_TEXT, + parameter.expectedStatement), + equalTo( + DbIncubatingAttributes.DB_OPERATION_NAME, parameter.operation), equalTo( - DbIncubatingAttributes.DB_CASSANDRA_TABLE, parameter.table)))); + DbIncubatingAttributes.DB_COLLECTION_NAME, parameter.table)))); } session.close(); @@ -178,7 +182,7 @@ void asyncTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DbIncubatingAttributes.DB_SYSTEM, "cassandra"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "USE " + parameter.keyspace))), trace -> trace.hasSpansSatisfyingExactly( @@ -194,11 +198,13 @@ void asyncTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, cassandraIp), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DbIncubatingAttributes.DB_SYSTEM, "cassandra"), - equalTo(DbIncubatingAttributes.DB_NAME, parameter.keyspace), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, parameter.keyspace), equalTo( - DbIncubatingAttributes.DB_STATEMENT, parameter.expectedStatement), - equalTo(DbIncubatingAttributes.DB_OPERATION, parameter.operation), - equalTo(DbIncubatingAttributes.DB_CASSANDRA_TABLE, parameter.table)), + DbIncubatingAttributes.DB_QUERY_TEXT, + parameter.expectedStatement), + equalTo( + DbIncubatingAttributes.DB_OPERATION_NAME, parameter.operation), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, parameter.table)), span -> span.hasName("callbackListener") .hasKind(SpanKind.INTERNAL) @@ -220,9 +226,11 @@ void asyncTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DbIncubatingAttributes.DB_SYSTEM, "cassandra"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, parameter.expectedStatement), - equalTo(DbIncubatingAttributes.DB_OPERATION, parameter.operation), - equalTo(DbIncubatingAttributes.DB_CASSANDRA_TABLE, parameter.table)), + DbIncubatingAttributes.DB_QUERY_TEXT, + parameter.expectedStatement), + equalTo( + DbIncubatingAttributes.DB_OPERATION_NAME, parameter.operation), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, parameter.table)), span -> span.hasName("callbackListener") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java index 93bdbda788e4..a52b44dfff2e 100644 --- a/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java +++ b/instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java @@ -16,10 +16,10 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_IDEMPOTENCE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_PAGE_SIZE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_TABLE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_QUERY_TEXT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Named.named; @@ -113,9 +113,9 @@ void syncTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, cassandraIp), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), - equalTo(DB_NAME, parameter.keyspace), - equalTo(DB_STATEMENT, parameter.expectedStatement), - equalTo(DB_OPERATION, parameter.operation), + equalTo(DB_NAMESPACE, parameter.keyspace), + equalTo(DB_QUERY_TEXT, parameter.expectedStatement), + equalTo(DB_OPERATION_NAME, parameter.operation), equalTo(DB_CASSANDRA_CONSISTENCY_LEVEL, "LOCAL_ONE"), equalTo(DB_CASSANDRA_COORDINATOR_DC, "datacenter1"), satisfies( @@ -126,7 +126,7 @@ void syncTest(Parameter parameter) { val -> val.isInstanceOf(Boolean.class)), equalTo(DB_CASSANDRA_PAGE_SIZE, 5000), equalTo(DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT, 0), - equalTo(DB_CASSANDRA_TABLE, parameter.table)))); + equalTo(DB_COLLECTION_NAME, parameter.table)))); session.close(); } @@ -167,9 +167,9 @@ void asyncTest(Parameter parameter) throws Exception { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, cassandraIp), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), - equalTo(DB_NAME, parameter.keyspace), - equalTo(DB_STATEMENT, parameter.expectedStatement), - equalTo(DB_OPERATION, parameter.operation), + equalTo(DB_NAMESPACE, parameter.keyspace), + equalTo(DB_QUERY_TEXT, parameter.expectedStatement), + equalTo(DB_OPERATION_NAME, parameter.operation), equalTo(DB_CASSANDRA_CONSISTENCY_LEVEL, "LOCAL_ONE"), equalTo(DB_CASSANDRA_COORDINATOR_DC, "datacenter1"), satisfies( @@ -180,7 +180,7 @@ void asyncTest(Parameter parameter) throws Exception { val -> val.isInstanceOf(Boolean.class)), equalTo(DB_CASSANDRA_PAGE_SIZE, 5000), equalTo(DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT, 0), - equalTo(DB_CASSANDRA_TABLE, parameter.table)), + equalTo(DB_COLLECTION_NAME, parameter.table)), span -> span.hasName("child") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java index 4da5b599d0a6..a12b497c555e 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java @@ -31,7 +31,7 @@ public final class CassandraSingletons { DbClientSpanNameExtractor.create(attributesGetter)) .addAttributesExtractor( SqlClientAttributesExtractor.builder(attributesGetter) - .setTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE) + .setTableAttribute(DbIncubatingAttributes.DB_COLLECTION_NAME) .setStatementSanitizationEnabled( AgentCommonConfig.get().isStatementSanitizationEnabled()) .build()) diff --git a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java index 6d39ac2d6f0a..3dd1b4be5c21 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java +++ b/instrumentation/cassandra/cassandra-4.4/library/src/main/java/io/opentelemetry/instrumentation/cassandra/v4_4/CassandraTelemetryBuilder.java @@ -20,8 +20,8 @@ public class CassandraTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.cassandra-4.4"; // copied from DbIncubatingAttributes - private static final AttributeKey DB_CASSANDRA_TABLE = - AttributeKey.stringKey("db.cassandra.table"); + private static final AttributeKey DB_COLLECTION_NAME = + AttributeKey.stringKey("db.collection.name"); private final OpenTelemetry openTelemetry; @@ -58,7 +58,7 @@ protected Instrumenter createInstrumenter( openTelemetry, INSTRUMENTATION_NAME, DbClientSpanNameExtractor.create(attributesGetter)) .addAttributesExtractor( SqlClientAttributesExtractor.builder(attributesGetter) - .setTableAttribute(DB_CASSANDRA_TABLE) + .setTableAttribute(DB_COLLECTION_NAME) .setStatementSanitizationEnabled(statementSanitizationEnabled) .build()) .addAttributesExtractor( diff --git a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java index bd3357978d36..ec3f5fc76363 100644 --- a/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java +++ b/instrumentation/cassandra/cassandra-4.4/testing/src/main/java/io/opentelemetry/testing/cassandra/v4_4/AbstractCassandra44Test.java @@ -16,10 +16,10 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_IDEMPOTENCE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_PAGE_SIZE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CASSANDRA_TABLE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_QUERY_TEXT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Named.named; @@ -70,9 +70,9 @@ void reactiveTest(Parameter parameter) { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, cassandraIp), equalTo(NetworkAttributes.NETWORK_PEER_PORT, cassandraPort), equalTo(DB_SYSTEM, "cassandra"), - equalTo(DB_NAME, parameter.keyspace), - equalTo(DB_STATEMENT, parameter.expectedStatement), - equalTo(DB_OPERATION, parameter.operation), + equalTo(DB_NAMESPACE, parameter.keyspace), + equalTo(DB_QUERY_TEXT, parameter.expectedStatement), + equalTo(DB_OPERATION_NAME, parameter.operation), equalTo(DB_CASSANDRA_CONSISTENCY_LEVEL, "LOCAL_ONE"), equalTo(DB_CASSANDRA_COORDINATOR_DC, "datacenter1"), satisfies( @@ -83,7 +83,7 @@ void reactiveTest(Parameter parameter) { val -> val.isInstanceOf(Boolean.class)), equalTo(DB_CASSANDRA_PAGE_SIZE, 5000), equalTo(DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT, 0), - equalTo(DB_CASSANDRA_TABLE, parameter.table)), + equalTo(DB_COLLECTION_NAME, parameter.table)), span -> span.hasName("child") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java b/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java index 472a00cb4319..0fa2f743c6ab 100644 --- a/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java +++ b/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java @@ -310,10 +310,10 @@ void testParameterizedQueryInput() throws ClickHouseException { private static List attributeAssertions(String statement, String operation) { return asList( equalTo(DbIncubatingAttributes.DB_SYSTEM, DbIncubatingAttributes.DbSystemValues.CLICKHOUSE), - equalTo(DbIncubatingAttributes.DB_NAME, dbName), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, dbName), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), - equalTo(DbIncubatingAttributes.DB_STATEMENT, statement), - equalTo(DbIncubatingAttributes.DB_OPERATION, operation)); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, statement), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, operation)); } } diff --git a/instrumentation/couchbase/couchbase-2.6/javaagent/src/test/groovy/CouchbaseSpanUtil.groovy b/instrumentation/couchbase/couchbase-2.6/javaagent/src/test/groovy/CouchbaseSpanUtil.groovy index 0686c76da4b4..bceb6771fcc9 100644 --- a/instrumentation/couchbase/couchbase-2.6/javaagent/src/test/groovy/CouchbaseSpanUtil.groovy +++ b/instrumentation/couchbase/couchbase-2.6/javaagent/src/test/groovy/CouchbaseSpanUtil.groovy @@ -30,9 +30,9 @@ class CouchbaseSpanUtil { } attributes { "$DbIncubatingAttributes.DB_SYSTEM" "couchbase" - "$DbIncubatingAttributes.DB_NAME" bucketName - "$DbIncubatingAttributes.DB_STATEMENT" statement - "$DbIncubatingAttributes.DB_OPERATION"(operation ?: spanName) + "$DbIncubatingAttributes.DB_NAMESPACE" bucketName + "$DbIncubatingAttributes.DB_QUERY_TEXT" statement + "$DbIncubatingAttributes.DB_OPERATION_NAME"(operation ?: spanName) // Because of caching, not all requests hit the server so these attributes may be absent "$NetworkAttributes.NETWORK_TYPE" { it == "ipv4" || it == null } diff --git a/instrumentation/couchbase/couchbase-common/testing/src/main/groovy/util/AbstractCouchbaseTest.groovy b/instrumentation/couchbase/couchbase-common/testing/src/main/groovy/util/AbstractCouchbaseTest.groovy index e669562f1917..d5ca66976589 100644 --- a/instrumentation/couchbase/couchbase-common/testing/src/main/groovy/util/AbstractCouchbaseTest.groovy +++ b/instrumentation/couchbase/couchbase-common/testing/src/main/groovy/util/AbstractCouchbaseTest.groovy @@ -121,9 +121,9 @@ abstract class AbstractCouchbaseTest extends AgentInstrumentationSpecification { } attributes { "$DbIncubatingAttributes.DB_SYSTEM" "couchbase" - "$DbIncubatingAttributes.DB_NAME" bucketName - "$DbIncubatingAttributes.DB_STATEMENT" statement - "$DbIncubatingAttributes.DB_OPERATION"(operation ?: spanName) + "$DbIncubatingAttributes.DB_NAMESPACE" bucketName + "$DbIncubatingAttributes.DB_QUERY_TEXT" statement + "$DbIncubatingAttributes.DB_OPERATION_NAME"(operation ?: spanName) } } } diff --git a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java index 698320035221..d2470e87cecd 100644 --- a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java +++ b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java @@ -90,7 +90,7 @@ public void elasticsearchStatus() throws IOException { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "elasticsearch"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "info"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "info"), equalTo(HttpAttributes.HTTP_REQUEST_METHOD, "GET"), equalTo(UrlAttributes.URL_FULL, httpHost.toURI() + "/"), equalTo(ServerAttributes.SERVER_ADDRESS, httpHost.getHostName()), @@ -126,7 +126,7 @@ public void elasticsearchIndex() throws IOException { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "elasticsearch"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "index"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "index"), equalTo(ServerAttributes.SERVER_ADDRESS, httpHost.getHostName()), equalTo(ServerAttributes.SERVER_PORT, httpHost.getPort()), equalTo(HttpAttributes.HTTP_REQUEST_METHOD, "PUT"), @@ -187,7 +187,7 @@ public void elasticsearchStatusAsync() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "elasticsearch"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "info"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "info"), equalTo(ServerAttributes.SERVER_ADDRESS, httpHost.getHostName()), equalTo(ServerAttributes.SERVER_PORT, httpHost.getPort()), equalTo(HttpAttributes.HTTP_REQUEST_METHOD, "GET"), diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5NodeClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5NodeClientTest.groovy index b18a0c09654a..c232c8d1d09f 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5NodeClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5NodeClientTest.groovy @@ -114,7 +114,7 @@ class Elasticsearch5NodeClientTest extends AbstractElasticsearchNodeClientTest { childOf(span(0)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -161,7 +161,7 @@ class Elasticsearch5NodeClientTest extends AbstractElasticsearchNodeClientTest { childOf(span(0)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -227,7 +227,7 @@ class Elasticsearch5NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "CreateIndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateIndexAction" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" "elasticsearch.request.indices" indexName @@ -240,7 +240,7 @@ class Elasticsearch5NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -252,7 +252,7 @@ class Elasticsearch5NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -268,7 +268,7 @@ class Elasticsearch5NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -286,7 +286,7 @@ class Elasticsearch5NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5TransportClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5TransportClientTest.groovy index 11728f2c3e45..7e5a81ce10d9 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5TransportClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/src/test/groovy/Elasticsearch5TransportClientTest.groovy @@ -129,7 +129,7 @@ class Elasticsearch5TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -175,7 +175,7 @@ class Elasticsearch5TransportClientTest extends AbstractElasticsearchTransportCl errorEvent RemoteTransportException, String attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -245,7 +245,7 @@ class Elasticsearch5TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "CreateIndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateIndexAction" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" "elasticsearch.request.indices" indexName @@ -260,7 +260,7 @@ class Elasticsearch5TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -276,7 +276,7 @@ class Elasticsearch5TransportClientTest extends AbstractElasticsearchTransportCl kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "PutMappingAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "PutMappingAction" "elasticsearch.action" "PutMappingAction" "elasticsearch.request" "PutMappingRequest" } @@ -290,7 +290,7 @@ class Elasticsearch5TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -310,7 +310,7 @@ class Elasticsearch5TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53NodeClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53NodeClientTest.groovy index 81cdeb4376eb..a813b49e27a3 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53NodeClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53NodeClientTest.groovy @@ -117,7 +117,7 @@ class Elasticsearch53NodeClientTest extends AbstractElasticsearchNodeClientTest childOf(span(0)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -164,7 +164,7 @@ class Elasticsearch53NodeClientTest extends AbstractElasticsearchNodeClientTest errorEvent IndexNotFoundException, "no such index" attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -230,7 +230,7 @@ class Elasticsearch53NodeClientTest extends AbstractElasticsearchNodeClientTest kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "CreateIndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateIndexAction" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" "elasticsearch.request.indices" indexName @@ -243,7 +243,7 @@ class Elasticsearch53NodeClientTest extends AbstractElasticsearchNodeClientTest kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -255,7 +255,7 @@ class Elasticsearch53NodeClientTest extends AbstractElasticsearchNodeClientTest kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -271,7 +271,7 @@ class Elasticsearch53NodeClientTest extends AbstractElasticsearchNodeClientTest kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -290,7 +290,7 @@ class Elasticsearch53NodeClientTest extends AbstractElasticsearchNodeClientTest kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53TransportClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53TransportClientTest.groovy index ad97aa15b5a5..6ba4abcefec2 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53TransportClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/Elasticsearch53TransportClientTest.groovy @@ -135,7 +135,7 @@ class Elasticsearch53TransportClientTest extends AbstractElasticsearchTransportC "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -180,7 +180,7 @@ class Elasticsearch53TransportClientTest extends AbstractElasticsearchTransportC errorEvent RemoteTransportException, String attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -250,7 +250,7 @@ class Elasticsearch53TransportClientTest extends AbstractElasticsearchTransportC "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "CreateIndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateIndexAction" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" "elasticsearch.request.indices" indexName @@ -265,7 +265,7 @@ class Elasticsearch53TransportClientTest extends AbstractElasticsearchTransportC "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -281,7 +281,7 @@ class Elasticsearch53TransportClientTest extends AbstractElasticsearchTransportC kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "PutMappingAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "PutMappingAction" "elasticsearch.action" "PutMappingAction" "elasticsearch.request" "PutMappingRequest" } @@ -295,7 +295,7 @@ class Elasticsearch53TransportClientTest extends AbstractElasticsearchTransportC "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -316,7 +316,7 @@ class Elasticsearch53TransportClientTest extends AbstractElasticsearchTransportC "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy index d75b13be9bd3..3b7da4cd7ef9 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy @@ -100,7 +100,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "SearchAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SearchAction" "elasticsearch.action" "SearchAction" "elasticsearch.request" "SearchRequest" "elasticsearch.request.indices" indexName @@ -138,7 +138,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -156,7 +156,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "RefreshAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "RefreshAction" "elasticsearch.action" "RefreshAction" "elasticsearch.request" "RefreshRequest" "elasticsearch.request.indices" indexName @@ -189,7 +189,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -226,7 +226,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -244,7 +244,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "RefreshAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "RefreshAction" "elasticsearch.action" "RefreshAction" "elasticsearch.request" "RefreshRequest" "elasticsearch.request.indices" indexName @@ -269,7 +269,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -305,7 +305,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "DeleteAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "DeleteAction" "elasticsearch.action" "DeleteAction" "elasticsearch.request" "DeleteRequest" "elasticsearch.request.indices" indexName @@ -322,7 +322,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "RefreshAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "RefreshAction" "elasticsearch.action" "RefreshAction" "elasticsearch.request" "RefreshRequest" "elasticsearch.request.indices" indexName @@ -348,7 +348,7 @@ class Elasticsearch53SpringRepositoryTest extends AgentInstrumentationSpecificat childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "SearchAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SearchAction" "elasticsearch.action" "SearchAction" "elasticsearch.request" "SearchRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy index 009f5e7067ab..bfe8619d83c3 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy @@ -104,7 +104,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio errorEvent IndexNotFoundException, "no such index" attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "RefreshAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "RefreshAction" "elasticsearch.action" "RefreshAction" "elasticsearch.request" "RefreshRequest" "elasticsearch.request.indices" indexName @@ -153,7 +153,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "CreateIndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateIndexAction" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" "elasticsearch.request.indices" indexName @@ -166,7 +166,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -178,7 +178,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "SearchAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SearchAction" "elasticsearch.action" "SearchAction" "elasticsearch.request" "SearchRequest" "elasticsearch.request.indices" indexName @@ -192,7 +192,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -211,7 +211,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "RefreshAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "RefreshAction" "elasticsearch.action" "RefreshAction" "elasticsearch.request" "RefreshRequest" "elasticsearch.request.indices" indexName @@ -227,7 +227,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "SearchAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SearchAction" "elasticsearch.action" "SearchAction" "elasticsearch.request" "SearchRequest" "elasticsearch.request.indices" indexName @@ -304,7 +304,7 @@ class Elasticsearch53SpringTemplateTest extends AgentInstrumentationSpecificatio kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "SearchAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SearchAction" "elasticsearch.action" "SearchAction" "elasticsearch.request" "SearchRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6NodeClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6NodeClientTest.groovy index 457f4ac68928..b96f9ede97e7 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6NodeClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6NodeClientTest.groovy @@ -93,7 +93,7 @@ class Elasticsearch6NodeClientTest extends AbstractElasticsearchNodeClientTest { childOf(span(0)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -139,7 +139,7 @@ class Elasticsearch6NodeClientTest extends AbstractElasticsearchNodeClientTest { errorEvent IndexNotFoundException, ~/no such index( \[invalid-index])?/ attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -204,7 +204,7 @@ class Elasticsearch6NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "CreateIndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateIndexAction" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" "elasticsearch.request.indices" indexName @@ -217,7 +217,7 @@ class Elasticsearch6NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -233,7 +233,7 @@ class Elasticsearch6NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -252,7 +252,7 @@ class Elasticsearch6NodeClientTest extends AbstractElasticsearchNodeClientTest { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6TransportClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6TransportClientTest.groovy index 0fafe46112e4..cc4f095424f9 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6TransportClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/src/test/groovy/Elasticsearch6TransportClientTest.groovy @@ -110,7 +110,7 @@ class Elasticsearch6TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "ClusterHealthAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "ClusterHealthAction" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" } @@ -155,7 +155,7 @@ class Elasticsearch6TransportClientTest extends AbstractElasticsearchTransportCl errorEvent RemoteTransportException, String attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -229,7 +229,7 @@ class Elasticsearch6TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "CreateIndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CreateIndexAction" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" "elasticsearch.request.indices" indexName @@ -245,7 +245,7 @@ class Elasticsearch6TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName @@ -261,7 +261,7 @@ class Elasticsearch6TransportClientTest extends AbstractElasticsearchTransportCl kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" ~/(Auto)?PutMappingAction/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" ~/(Auto)?PutMappingAction/ "elasticsearch.action" ~/(Auto)?PutMappingAction/ "elasticsearch.request" "PutMappingRequest" } @@ -276,7 +276,7 @@ class Elasticsearch6TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "IndexAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "IndexAction" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" "elasticsearch.request.indices" indexName @@ -298,7 +298,7 @@ class Elasticsearch6TransportClientTest extends AbstractElasticsearchTransportCl "$NetworkAttributes.NETWORK_PEER_ADDRESS" tcpPublishAddress.address "$NetworkAttributes.NETWORK_PEER_PORT" tcpPublishAddress.port "$DbIncubatingAttributes.DB_SYSTEM" "elasticsearch" - "$DbIncubatingAttributes.DB_OPERATION" "GetAction" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GetAction" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" "elasticsearch.request.indices" indexName diff --git a/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java b/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java index 954ae031785d..b98b4f49173b 100644 --- a/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java +++ b/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java @@ -133,23 +133,23 @@ void assertGeodeTrace(String verb, String query) { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "geode"), - equalTo(DbIncubatingAttributes.DB_NAME, "test-region"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "clear")), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test-region"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "clear")), span -> span.hasName("put test-region") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "geode"), - equalTo(DbIncubatingAttributes.DB_NAME, "test-region"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "put")), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test-region"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "put")), span -> span.hasName(verb.concat(" test-region")) .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "geode"), - equalTo(DbIncubatingAttributes.DB_NAME, "test-region"), - equalTo(DbIncubatingAttributes.DB_OPERATION, verb), - equalTo(DbIncubatingAttributes.DB_STATEMENT, query)))); + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test-region"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, verb), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, query)))); } static class Card implements DataSerializable { diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingClientInterceptor.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingClientInterceptor.java index 8790dad4c493..971e4381df5d 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingClientInterceptor.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingClientInterceptor.java @@ -27,8 +27,9 @@ final class TracingClientInterceptor implements ClientInterceptor { // copied from MessageIncubatingAttributes - private static final AttributeKey MESSAGE_ID = AttributeKey.longKey("message.id"); - private static final AttributeKey MESSAGE_TYPE = AttributeKey.stringKey("message.type"); + private static final AttributeKey RPC_MESSAGE_ID = AttributeKey.longKey("rpc.message.id"); + private static final AttributeKey RPC_MESSAGE_TYPE = + AttributeKey.stringKey("rpc.message.type"); // copied from MessageIncubatingAttributes.MessageTypeValues private static final String SENT = "SENT"; private static final String RECEIVED = "RECEIVED"; @@ -117,7 +118,8 @@ public void sendMessage(REQUEST message) { } Span span = Span.fromContext(context); Attributes attributes = - Attributes.of(MESSAGE_TYPE, SENT, MESSAGE_ID, MESSAGE_ID_UPDATER.incrementAndGet(this)); + Attributes.of( + RPC_MESSAGE_TYPE, SENT, RPC_MESSAGE_ID, MESSAGE_ID_UPDATER.incrementAndGet(this)); span.addEvent("message", attributes); } @@ -144,9 +146,9 @@ public void onMessage(RESPONSE message) { Span span = Span.fromContext(context); Attributes attributes = Attributes.of( - MESSAGE_TYPE, + RPC_MESSAGE_TYPE, RECEIVED, - MESSAGE_ID, + RPC_MESSAGE_ID, MESSAGE_ID_UPDATER.incrementAndGet(TracingClientCall.this)); span.addEvent("message", attributes); try (Scope ignored = context.makeCurrent()) { diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingServerInterceptor.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingServerInterceptor.java index 241f94188b4d..9efed6c2d367 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingServerInterceptor.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/TracingServerInterceptor.java @@ -26,8 +26,9 @@ final class TracingServerInterceptor implements ServerInterceptor { // copied from MessageIncubatingAttributes - private static final AttributeKey MESSAGE_ID = AttributeKey.longKey("message.id"); - private static final AttributeKey MESSAGE_TYPE = AttributeKey.stringKey("message.type"); + private static final AttributeKey RPC_MESSAGE_ID = AttributeKey.longKey("rpc.message.id"); + private static final AttributeKey RPC_MESSAGE_TYPE = + AttributeKey.stringKey("rpc.message.type"); // copied from MessageIncubatingAttributes.MessageTypeValues private static final String SENT = "SENT"; private static final String RECEIVED = "RECEIVED"; @@ -108,7 +109,8 @@ public void sendMessage(RESPONSE message) { } Span span = Span.fromContext(context); Attributes attributes = - Attributes.of(MESSAGE_TYPE, SENT, MESSAGE_ID, MESSAGE_ID_UPDATER.incrementAndGet(this)); + Attributes.of( + RPC_MESSAGE_TYPE, SENT, RPC_MESSAGE_ID, MESSAGE_ID_UPDATER.incrementAndGet(this)); span.addEvent("message", attributes); } @@ -138,9 +140,9 @@ final class TracingServerCallListener public void onMessage(REQUEST message) { Attributes attributes = Attributes.of( - MESSAGE_TYPE, + RPC_MESSAGE_TYPE, RECEIVED, - MESSAGE_ID, + RPC_MESSAGE_ID, MESSAGE_ID_UPDATER.incrementAndGet(TracingServerCall.this)); Span.fromContext(context).addEvent("message", attributes); delegate().onMessage(message); diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java index 9153436ba922..18fc2b72197d 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java @@ -27,7 +27,6 @@ import io.opentelemetry.sdk.trace.data.EventData; import io.opentelemetry.semconv.NetworkAttributes; import io.opentelemetry.semconv.ServerAttributes; -import io.opentelemetry.semconv.incubating.MessageIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import java.util.ArrayList; import java.util.List; @@ -165,13 +164,13 @@ public void onCompleted() { assertThat(attrs) .hasSize(2) .hasEntrySatisfying( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, val -> assertThat(val) .satisfiesAnyOf( v -> assertThat(v).isEqualTo("RECEIVED"), v -> assertThat(v).isEqualTo("SENT"))) - .containsEntry(MessageIncubatingAttributes.MESSAGE_ID, messageId))); + .containsEntry(RpcIncubatingAttributes.RPC_MESSAGE_ID, messageId))); } testing() diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java index 0e41014eb4c3..9847083fa87e 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java @@ -50,7 +50,6 @@ import io.opentelemetry.sdk.trace.data.StatusData; import io.opentelemetry.semconv.NetworkAttributes; import io.opentelemetry.semconv.ServerAttributes; -import io.opentelemetry.semconv.incubating.MessageIncubatingAttributes; import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes; import java.util.ArrayList; import java.util.Arrays; @@ -150,16 +149,16 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -184,16 +183,16 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))))); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))))); testing() .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", @@ -318,16 +317,16 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -352,16 +351,16 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("child") .hasKind(SpanKind.INTERNAL) @@ -498,16 +497,16 @@ public void onCompleted() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -532,16 +531,16 @@ public void onCompleted() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("child") .hasKind(SpanKind.INTERNAL) @@ -653,8 +652,8 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L))), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -681,8 +680,8 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)); if (status.getCause() == null) { assertThat(events).hasSize(1); } else { @@ -805,8 +804,8 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L))), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -833,8 +832,8 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)); span.hasException(status.asRuntimeException()); }))); testing() @@ -1053,16 +1052,16 @@ public void onCompleted() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -1087,16 +1086,16 @@ public void onCompleted() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))))); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))))); } @Test @@ -1176,14 +1175,14 @@ public void onCompleted() { assertThat(events.get(0)) .hasName("message") .hasAttributesSatisfyingExactly( - equalTo(MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)); + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)); assertThat(events.get(1)) .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L)); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L)); span.hasException(thrown); }), span -> @@ -1210,16 +1209,16 @@ public void onCompleted() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))))); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))))); } @Test @@ -1298,16 +1297,16 @@ public void onCompleted() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName( "grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo") @@ -1335,16 +1334,16 @@ public void onCompleted() { .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))))); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))))); } @Test @@ -1408,16 +1407,16 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))), span -> span.hasName("example.Greeter/SayHello") .hasKind(SpanKind.SERVER) @@ -1442,16 +1441,16 @@ public void sayHello( .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "RECEIVED"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 1L)), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 1L)), event -> event .hasName("message") .hasAttributesSatisfyingExactly( equalTo( - MessageIncubatingAttributes.MESSAGE_TYPE, "SENT"), - equalTo(MessageIncubatingAttributes.MESSAGE_ID, 2L))))); + RpcIncubatingAttributes.RPC_MESSAGE_TYPE, "SENT"), + equalTo(RpcIncubatingAttributes.RPC_MESSAGE_ID, 2L))))); } // Regression test for diff --git a/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java b/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java index 7042194917d5..a760083269ee 100644 --- a/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java +++ b/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java @@ -63,12 +63,12 @@ static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData parent) { .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DbIncubatingAttributes.DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DbIncubatingAttributes.DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")); + satisfies(DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), + satisfies( + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -78,14 +78,13 @@ static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData parent, Str .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith(verb.toLowerCase(Locale.ROOT))), - equalTo(DbIncubatingAttributes.DB_OPERATION, verb), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, verb), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")); } static SpanDataAssert assertSessionSpan(SpanDataAssert span, SpanData parent, String spanName) { diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java index 509173d79e80..432fc77198bc 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java @@ -67,14 +67,13 @@ void testCriteria(String methodName, Consumer interaction) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("select")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java index d9402fc439ca..f4c37a81d1ff 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java @@ -101,16 +101,15 @@ void testHibernateActions(Parameter parameter) { .hasParent(trace.getSpan(2)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value"))); + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value"))); } else { trace.hasSpansSatisfyingExactly( @@ -132,16 +131,15 @@ void testHibernateActions(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -218,16 +216,15 @@ void testHibernatePersist() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -244,16 +241,15 @@ void testHibernatePersist() { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")))); + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")))); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -293,16 +289,15 @@ void testAttachesStateToQuery(Function queryBuildMethod) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java index f68fe97e9ba5..c3e664bba1d0 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java @@ -62,16 +62,15 @@ void testHibernateQueryExecuteUpdateWithTransaction() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -120,14 +119,13 @@ void testHibernateQuerySingleCall(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")))); } private static Stream providesArgumentsSingleCall() { @@ -194,14 +192,13 @@ void testHibernateQueryIterate() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java index b40068f4827f..1741cfba2b98 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java @@ -65,16 +65,15 @@ void testHibernateAction(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -176,16 +175,15 @@ void testHibernateActionStateless(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -323,16 +321,15 @@ void testHibernateReplicate(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -349,16 +346,15 @@ void testHibernateReplicate(Parameter parameter) { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")))); + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")))); } private static Stream provideArgumentsHibernateReplicate() { @@ -483,16 +479,15 @@ void testHibernateCommitAction(Parameter parameter) { .hasParent(trace.getSpan(2)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")))); + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")))); } private static Stream provideArgumentsHibernateCommitAction() { @@ -662,16 +657,15 @@ void testAttachesStateToQueryCreated(Consumer queryBuilder) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), satisfies( - DbIncubatingAttributes.DB_OPERATION, + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -763,14 +757,13 @@ void testHibernateOverlappingSessions() { .hasParent(trace.getSpan(2)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("insert")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "INSERT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "INSERT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> { span.hasName("Session.save " + Value.class.getName()) .hasKind(INTERNAL) @@ -807,28 +800,26 @@ void testHibernateOverlappingSessions() { .hasParent(trace.getSpan(6)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("insert")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "INSERT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "INSERT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("DELETE db1.Value") .hasKind(CLIENT) .hasParent(trace.getSpan(6)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("delete")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DELETE"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DELETE"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")))); assertThat(sessionId1.get()).isNotEqualTo(sessionId2.get()); assertThat(sessionId1.get()).isNotEqualTo(sessionId3.get()); diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java index 17ebc73ba798..936de283e01a 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java @@ -67,17 +67,16 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName(.*)from Customer(.*)"))), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -122,17 +121,16 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.matches( Pattern.compile( "insert into Customer (.*) values \\(.*, \\?, \\?\\)"))), - equalTo(DbIncubatingAttributes.DB_OPERATION, "INSERT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "INSERT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -165,13 +163,12 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "call next value for hibernate_sequence"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "CALL")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "CALL")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -189,17 +186,16 @@ void testCrud() { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.matches( Pattern.compile( "insert into Customer (.*) values \\(.* \\?, \\?\\)"))), - equalTo(DbIncubatingAttributes.DB_OPERATION, "INSERT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer"))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "INSERT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer"))); } }); testing.clearData(); @@ -236,17 +232,16 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)where ([^.]+).id=\\?"))), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -264,14 +259,13 @@ void testCrud() { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "update Customer set firstName=?, lastName=? where id=?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "UPDATE"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "UPDATE"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer")))); testing.clearData(); Customer foundCustomer = @@ -302,17 +296,16 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)(where ([^.]+).lastName=\\?)"))), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer")))); testing.clearData(); testing.runWithSpan("parent", () -> repo.delete(foundCustomer)); @@ -340,17 +333,16 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)where ([^.]+).id=\\?"))), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer")), span -> span.hasName("Session.delete spring.jpa.Customer") .hasKind(INTERNAL) @@ -372,14 +364,13 @@ void testCrud() { .hasKind(CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "delete from Customer where id=?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DELETE"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer"))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DELETE"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer"))); } else { String findAction; @@ -405,17 +396,16 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)where ([^.]+).id=\\?"))), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer")), span -> span.hasName("Session.merge spring.jpa.Customer") .hasKind(INTERNAL) @@ -445,14 +435,13 @@ void testCrud() { .hasKind(CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "delete from Customer where id=?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DELETE"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Customer"))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DELETE"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Customer"))); } }); } diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java index d2ab1450ed09..08352bac8314 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java @@ -77,14 +77,13 @@ void testCriteriaQuery(Consumer> interaction) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("select")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> span.hasName("Transaction.commit") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java index 5bc237dc24b2..89cba8a9e5b4 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java @@ -139,14 +139,13 @@ void testAttachesStateToQuery(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> assertTransactionCommitSpan( span, @@ -294,12 +293,12 @@ private static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData par .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DbIncubatingAttributes.DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DbIncubatingAttributes.DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")); + satisfies(DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), + satisfies( + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -310,12 +309,12 @@ private static SpanDataAssert assertClientSpan( .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DbIncubatingAttributes.DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DbIncubatingAttributes.DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")); + satisfies(DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), + satisfies( + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")); } private static SpanDataAssert assertSessionSpan( diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java index 1a1e36cf9a61..4ef547bcd01c 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java @@ -103,11 +103,10 @@ void testProcedureCall() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "{call TEST_PROC()}"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "CALL")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "{call TEST_PROC()}"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "CALL")), span -> span.hasName("Transaction.commit") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java index d95c4fe7805d..cb1763eb2ea8 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java @@ -244,14 +244,13 @@ void testAttachesStateToQuery(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")), span -> assertSpanWithSessionId( span, @@ -809,12 +808,12 @@ private static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData par .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DbIncubatingAttributes.DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DbIncubatingAttributes.DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")); + satisfies(DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.isInstanceOf(String.class)), + satisfies( + DbIncubatingAttributes.DB_OPERATION_NAME, val -> val.isInstanceOf(String.class)), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -825,13 +824,12 @@ private static SpanDataAssert assertClientSpan( .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "h2"), - equalTo(DbIncubatingAttributes.DB_NAME, "db1"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "db1"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith(verb.toLowerCase(Locale.ROOT))), - equalTo(DbIncubatingAttributes.DB_OPERATION, verb), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "Value")); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, verb), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "Value")); } } diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy index 6be2e3e5cdb7..a0afda30c7ab 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy @@ -62,12 +62,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName(.*)from Customer(.*)/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName(.*)from Customer(.*)/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } span(3) { @@ -118,11 +117,10 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_STATEMENT" "call next value for Customer_SEQ" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "call next value for Customer_SEQ" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_OPERATION" "CALL" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CALL" } } span(3) { @@ -139,12 +137,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(3) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/insert into Customer \(.*\) values \(.*\)/ - "$DbIncubatingAttributes.DB_OPERATION" "INSERT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/insert into Customer \(.*\) values \(.*\)/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "INSERT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } } else { @@ -154,12 +151,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/insert into Customer \(.*\) values \(.*\)/ - "$DbIncubatingAttributes.DB_OPERATION" "INSERT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/insert into Customer \(.*\) values \(.*\)/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "INSERT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } span(3) { @@ -209,12 +205,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } span(3) { @@ -230,12 +225,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/update Customer set firstName=\?,(.*)lastName=\? where id=\?/ - "$DbIncubatingAttributes.DB_OPERATION" "UPDATE" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/update Customer set firstName=\?,(.*)lastName=\? where id=\?/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "UPDATE" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } } @@ -273,12 +267,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)(where ([^.]+)\.lastName( ?)=( ?)\?|)/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)(where ([^.]+)\.lastName( ?)=( ?)\?|)/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } } @@ -317,12 +310,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } } @@ -342,12 +334,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } } @@ -372,12 +363,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "delete from Customer where id=?" - "$DbIncubatingAttributes.DB_OPERATION" "DELETE" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "delete from Customer where id=?" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "DELETE" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "Customer" } } } diff --git a/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java b/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java index 3e36101c7bef..21d8e2922c62 100644 --- a/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java +++ b/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java @@ -115,11 +115,10 @@ void testProcedureCall() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "{call TEST_PROC()}"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "{call TEST_PROC()}"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "CALL")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "CALL")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java index c2152b4c8dc0..8011bd140606 100644 --- a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java +++ b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java @@ -8,11 +8,10 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_QUERY_TEXT; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; @@ -304,13 +303,12 @@ private static void assertTrace() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), + equalTo(DB_NAMESPACE, DB), equalTo( - DB_STATEMENT, + DB_QUERY_TEXT, "select value0_.id as id1_0_0_, value0_.name as name2_0_0_ from Value value0_ where value0_.id=$1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_COLLECTION_NAME, "Value"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java index a7ec8dc7248d..1eae3d57be66 100644 --- a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java +++ b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java @@ -8,11 +8,10 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_QUERY_TEXT; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; @@ -296,13 +295,12 @@ private static void assertTrace() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), + equalTo(DB_NAMESPACE, DB), equalTo( - DB_STATEMENT, + DB_QUERY_TEXT, "select v1_0.id,v1_0.name from Value v1_0 where v1_0.id=$1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_COLLECTION_NAME, "Value"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java b/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java index 40d5300fe5d8..219f2e2b0080 100644 --- a/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java +++ b/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java @@ -319,12 +319,12 @@ private static List attributeAssertions( result.addAll( asList( equalTo(DbIncubatingAttributes.DB_SYSTEM, "influxdb"), - equalTo(DbIncubatingAttributes.DB_NAME, databaseName), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, databaseName), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), - equalTo(DbIncubatingAttributes.DB_OPERATION, operation))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, operation))); if (statement != null) { - result.add(equalTo(DbIncubatingAttributes.DB_STATEMENT, statement)); + result.add(equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, statement)); } return result; } diff --git a/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java b/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java index 3cd33152551c..d3002bfb93b5 100644 --- a/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java +++ b/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java @@ -147,12 +147,12 @@ private static List attributeAssertions( result.addAll( asList( equalTo(DbIncubatingAttributes.DB_SYSTEM, "influxdb"), - equalTo(DbIncubatingAttributes.DB_NAME, databaseName), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, databaseName), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), - equalTo(DbIncubatingAttributes.DB_OPERATION, operation))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, operation))); if (statement != null) { - result.add(equalTo(DbIncubatingAttributes.DB_STATEMENT, statement)); + result.add(equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, statement)); } return result; } diff --git a/instrumentation/jdbc/javaagent/src/test/groovy/JdbcInstrumentationTest.groovy b/instrumentation/jdbc/javaagent/src/test/groovy/JdbcInstrumentationTest.groovy index 39eec0059569..23e6b208a2a5 100644 --- a/instrumentation/jdbc/javaagent/src/test/groovy/JdbcInstrumentationTest.groovy +++ b/instrumentation/jdbc/javaagent/src/test/groovy/JdbcInstrumentationTest.groovy @@ -191,14 +191,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_NAME" dbNameLower - if (username != null) { - "$DbIncubatingAttributes.DB_USER" username - } + "$DbIncubatingAttributes.DB_NAMESPACE" dbNameLower "$DbIncubatingAttributes.DB_CONNECTION_STRING" url - "$DbIncubatingAttributes.DB_STATEMENT" sanitizedQuery - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_QUERY_TEXT" sanitizedQuery + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table } } } @@ -251,14 +248,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_NAME" dbNameLower - if (username != null) { - "$DbIncubatingAttributes.DB_USER" username - } + "$DbIncubatingAttributes.DB_NAMESPACE" dbNameLower "$DbIncubatingAttributes.DB_CONNECTION_STRING" url - "$DbIncubatingAttributes.DB_STATEMENT" sanitizedQuery - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_QUERY_TEXT" sanitizedQuery + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table } } } @@ -303,14 +297,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_NAME" dbNameLower - if (username != null) { - "$DbIncubatingAttributes.DB_USER" username - } + "$DbIncubatingAttributes.DB_NAMESPACE" dbNameLower "$DbIncubatingAttributes.DB_CONNECTION_STRING" url - "$DbIncubatingAttributes.DB_STATEMENT" sanitizedQuery - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_QUERY_TEXT" sanitizedQuery + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table } } } @@ -355,14 +346,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_NAME" dbName.toLowerCase() - if (username != null) { - "$DbIncubatingAttributes.DB_USER" username - } + "$DbIncubatingAttributes.DB_NAMESPACE" dbName.toLowerCase() "$DbIncubatingAttributes.DB_CONNECTION_STRING" url - "$DbIncubatingAttributes.DB_STATEMENT" sanitizedQuery - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_QUERY_TEXT" sanitizedQuery + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table } } } @@ -407,14 +395,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_NAME" dbNameLower - if (username != null) { - "$DbIncubatingAttributes.DB_USER" username - } - "$DbIncubatingAttributes.DB_STATEMENT" query + "$DbIncubatingAttributes.DB_NAMESPACE" dbNameLower + "$DbIncubatingAttributes.DB_QUERY_TEXT" query "$DbIncubatingAttributes.DB_CONNECTION_STRING" url - "$DbIncubatingAttributes.DB_OPERATION" "CREATE TABLE" - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CREATE TABLE" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table } } } @@ -462,14 +447,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_NAME" dbName.toLowerCase() - if (username != null) { - "$DbIncubatingAttributes.DB_USER" username - } - "$DbIncubatingAttributes.DB_STATEMENT" query + "$DbIncubatingAttributes.DB_NAMESPACE" dbName.toLowerCase() + "$DbIncubatingAttributes.DB_QUERY_TEXT" query "$DbIncubatingAttributes.DB_CONNECTION_STRING" url - "$DbIncubatingAttributes.DB_OPERATION" "CREATE TABLE" - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_OPERATION_NAME" "CREATE TABLE" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table } } } @@ -529,14 +511,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_NAME" dbNameLower - if (username != null) { - "$DbIncubatingAttributes.DB_USER" username - } + "$DbIncubatingAttributes.DB_NAMESPACE" dbNameLower "$DbIncubatingAttributes.DB_CONNECTION_STRING" url - "$DbIncubatingAttributes.DB_STATEMENT" sanitizedQuery - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_QUERY_TEXT" sanitizedQuery + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table } } } @@ -588,8 +567,7 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { "$CodeIncubatingAttributes.CODE_NAMESPACE" datasource.class.name "$CodeIncubatingAttributes.CODE_FUNCTION" "getConnection" "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_USER" { user == null | user == it } - "$DbIncubatingAttributes.DB_NAME" "jdbcunittest" + "$DbIncubatingAttributes.DB_NAMESPACE" "jdbcunittest" "$DbIncubatingAttributes.DB_CONNECTION_STRING" connectionString } } @@ -602,8 +580,7 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { "$CodeIncubatingAttributes.CODE_NAMESPACE" datasource.class.name "$CodeIncubatingAttributes.CODE_FUNCTION" "getConnection" "$DbIncubatingAttributes.DB_SYSTEM" system - "$DbIncubatingAttributes.DB_USER" { user == null | user == it } - "$DbIncubatingAttributes.DB_NAME" "jdbcunittest" + "$DbIncubatingAttributes.DB_NAMESPACE" "jdbcunittest" "$DbIncubatingAttributes.DB_CONNECTION_STRING" connectionString } } @@ -652,7 +629,7 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "other_sql" - "$DbIncubatingAttributes.DB_STATEMENT" "testing ?" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "testing ?" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "testdb://localhost" "$ServerAttributes.SERVER_ADDRESS" "localhost" } @@ -693,11 +670,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "other_sql" - "$DbIncubatingAttributes.DB_NAME" databaseName + "$DbIncubatingAttributes.DB_NAMESPACE" databaseName "$DbIncubatingAttributes.DB_CONNECTION_STRING" "testdb://localhost" - "$DbIncubatingAttributes.DB_STATEMENT" sanitizedQuery - "$DbIncubatingAttributes.DB_OPERATION" operation - "$DbIncubatingAttributes.DB_SQL_TABLE" table + "$DbIncubatingAttributes.DB_QUERY_TEXT" sanitizedQuery + "$DbIncubatingAttributes.DB_OPERATION_NAME" operation + "$DbIncubatingAttributes.DB_COLLECTION_NAME" table "$ServerAttributes.SERVER_ADDRESS" "localhost" } } @@ -750,12 +727,11 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" dbNameLower - "$DbIncubatingAttributes.DB_USER" "SA" + "$DbIncubatingAttributes.DB_NAMESPACE" dbNameLower "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT ? FROM INFORMATION_SCHEMA.SYSTEM_USERS" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "INFORMATION_SCHEMA.SYSTEM_USERS" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "SELECT ? FROM INFORMATION_SCHEMA.SYSTEM_USERS" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "INFORMATION_SCHEMA.SYSTEM_USERS" } } } @@ -800,9 +776,9 @@ class JdbcInstrumentationTest extends AgentInstrumentationSpecification { attributes { "$DbIncubatingAttributes.DB_SYSTEM" "other_sql" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "testdb://localhost" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT * FROM table" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "table" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "SELECT * FROM table" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "table" "$ServerAttributes.SERVER_ADDRESS" "localhost" } } diff --git a/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala b/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala index dc1ff375acc6..f0c943838dad 100644 --- a/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala +++ b/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala @@ -83,14 +83,13 @@ class SlickTest { DbIncubatingAttributes.DB_SYSTEM, DbSystemValues.H2 ), - equalTo(DbIncubatingAttributes.DB_NAME, Db), - equalTo(DbIncubatingAttributes.DB_USER, Username), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, Db), equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, "h2:mem:" ), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SELECT ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT") + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT") ) } ) diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/DataSourceDbAttributesExtractor.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/DataSourceDbAttributesExtractor.java index fb35e335d9d7..00e5307a6a7e 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/DataSourceDbAttributesExtractor.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/DataSourceDbAttributesExtractor.java @@ -19,9 +19,8 @@ enum DataSourceDbAttributesExtractor implements AttributesExtractor DB_NAME = AttributeKey.stringKey("db.name"); + private static final AttributeKey DB_NAMESPACE = AttributeKey.stringKey("db.namespace"); private static final AttributeKey DB_SYSTEM = AttributeKey.stringKey("db.system"); - private static final AttributeKey DB_USER = AttributeKey.stringKey("db.user"); private static final AttributeKey DB_CONNECTION_STRING = AttributeKey.stringKey("db.connection_string"); @@ -40,8 +39,7 @@ public void onEnd( return; } internalSet(attributes, DB_SYSTEM, dbInfo.getSystem()); - internalSet(attributes, DB_USER, dbInfo.getUser()); - internalSet(attributes, DB_NAME, getName(dbInfo)); + internalSet(attributes, DB_NAMESPACE, getName(dbInfo)); internalSet(attributes, DB_CONNECTION_STRING, dbInfo.getShortUrl()); } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index 977a87f54c56..0808376074c9 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -41,7 +41,7 @@ void buildWithDefaults() throws SQLException { span -> span.hasName("TestDataSource.getConnection"), span -> span.hasName("SELECT dbname") - .hasAttribute(equalTo(DbIncubatingAttributes.DB_STATEMENT, "SELECT ?;")))); + .hasAttribute(equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT ?;")))); } @Test @@ -117,7 +117,7 @@ void buildWithSanitizationDisabled() throws SQLException { span -> span.hasName("TestDataSource.getConnection"), span -> span.hasName("SELECT dbname") - .hasAttribute(equalTo(DbIncubatingAttributes.DB_STATEMENT, "SELECT 1;")))); + .hasAttribute(equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT 1;")))); } @Test diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java index 6c775f9c2b7f..0b58a99e73c7 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java @@ -56,7 +56,7 @@ void shouldEmitGetConnectionSpans(GetConnectionFunction getConnection) throws SQ TestDataSource.class.getName()), equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "getConnection"), equalTo(DbIncubatingAttributes.DB_SYSTEM, "postgresql"), - equalTo(DbIncubatingAttributes.DB_NAME, "dbname"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "dbname"), equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, "postgresql://127.0.0.1:5432")))); diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java index 5405ddd14026..cc54a867856c 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java @@ -188,13 +188,12 @@ private static void jdbcTraceAssertion(DbInfo dbInfo, String query) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, dbInfo.getSystem()), - equalTo(DbIncubatingAttributes.DB_NAME, dbInfo.getName()), - equalTo(DbIncubatingAttributes.DB_USER, dbInfo.getUser()), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, dbInfo.getName()), equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, dbInfo.getShortUrl()), - equalTo(DbIncubatingAttributes.DB_STATEMENT, query), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "users"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, query), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "users"), equalTo(ServerAttributes.SERVER_ADDRESS, dbInfo.getHost()), equalTo(ServerAttributes.SERVER_PORT, dbInfo.getPort())))); } diff --git a/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java b/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java index 547a4fc0ba6e..221bd6f62051 100644 --- a/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java +++ b/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java @@ -65,8 +65,8 @@ void setCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port)))); } @@ -86,8 +86,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port))), trace -> @@ -97,8 +97,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET foo"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET foo"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port)))); } @@ -118,8 +118,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port))), trace -> @@ -129,8 +129,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port)))); } diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java index be3e155d06fc..2459f4465db3 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java @@ -74,8 +74,8 @@ void setCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), @@ -100,8 +100,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), @@ -116,8 +116,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET foo"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET foo"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), @@ -142,8 +142,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), @@ -158,8 +158,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index 0d54274d9a35..1485d85b8c79 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -68,8 +68,8 @@ void setCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip)))); @@ -90,8 +90,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip))), @@ -102,8 +102,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET foo"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET foo"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET"), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip)))); @@ -124,8 +124,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip))), @@ -136,8 +136,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY"), equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip)))); diff --git a/instrumentation/jms/jms-1.1/javaagent/src/jms2Test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms2InstrumentationTest.java b/instrumentation/jms/jms-1.1/javaagent/src/jms2Test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms2InstrumentationTest.java index 439fa62de2ec..166fcb8b9eab 100644 --- a/instrumentation/jms/jms-1.1/javaagent/src/jms2Test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms2InstrumentationTest.java +++ b/instrumentation/jms/jms-1.1/javaagent/src/jms2Test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms2InstrumentationTest.java @@ -171,7 +171,8 @@ void testMessageConsumer( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary))); @@ -190,7 +191,8 @@ void testMessageConsumer( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)))); } @@ -238,7 +240,8 @@ void testMessageListener( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)), span -> @@ -250,7 +253,8 @@ void testMessageListener( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)), span -> span.hasName("consumer").hasParent(trace.getSpan(2)))); diff --git a/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/AbstractJms1Test.java b/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/AbstractJms1Test.java index 76aba2ac0414..fcd6d7ee508d 100644 --- a/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/AbstractJms1Test.java +++ b/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/AbstractJms1Test.java @@ -131,7 +131,8 @@ void testMessageListener( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)), span -> @@ -143,7 +144,8 @@ void testMessageListener( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)), span -> span.hasName("consumer").hasParent(trace.getSpan(2)))); @@ -214,7 +216,8 @@ void shouldCaptureMessageHeaders( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary), equalTo( @@ -232,7 +235,8 @@ void shouldCaptureMessageHeaders( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary), equalTo( @@ -288,7 +292,8 @@ void shouldFailWhenSendingReadOnlyMessage( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary))), trace -> @@ -303,7 +308,8 @@ void shouldFailWhenSendingReadOnlyMessage( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)))); } diff --git a/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1InstrumentationTest.java b/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1InstrumentationTest.java index dc21edad5f6d..4b1ee2554b79 100644 --- a/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1InstrumentationTest.java +++ b/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1InstrumentationTest.java @@ -64,7 +64,8 @@ void testMessageConsumer( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary))); @@ -83,7 +84,8 @@ void testMessageConsumer( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)))); } diff --git a/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1SuppressReceiveSpansTest.java b/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1SuppressReceiveSpansTest.java index 261f2c3e87f9..baf10f07f391 100644 --- a/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1SuppressReceiveSpansTest.java +++ b/instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/Jms1SuppressReceiveSpansTest.java @@ -60,7 +60,8 @@ void testMessageConsumer( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)), span -> @@ -73,7 +74,8 @@ void testMessageConsumer( equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary))), trace -> diff --git a/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/AbstractJms3Test.java b/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/AbstractJms3Test.java index 0e90b1164c3b..5e9014ffd038 100644 --- a/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/AbstractJms3Test.java +++ b/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/AbstractJms3Test.java @@ -147,7 +147,8 @@ void testMessageListener(DestinationFactory destinationFactory, boolean isTempor equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, producerDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)), span -> @@ -159,7 +160,8 @@ void testMessageListener(DestinationFactory destinationFactory, boolean isTempor equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, actualDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId)), span -> span.hasName("consumer").hasParent(trace.getSpan(2)))); } @@ -231,7 +233,8 @@ void shouldCaptureMessageHeaders(DestinationFactory destinationFactory, boolean equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, producerDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary), equalTo( @@ -249,7 +252,8 @@ void shouldCaptureMessageHeaders(DestinationFactory destinationFactory, boolean equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, actualDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), equalTo( stringArrayKey("messaging.header.test_message_header"), diff --git a/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3InstrumentationTest.java b/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3InstrumentationTest.java index b5f8b1f3cd58..f88c28e97c3f 100644 --- a/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3InstrumentationTest.java +++ b/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3InstrumentationTest.java @@ -67,7 +67,8 @@ void testMessageConsumer(DestinationFactory destinationFactory, boolean isTempor equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, producerDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary))); @@ -86,7 +87,8 @@ void testMessageConsumer(DestinationFactory destinationFactory, boolean isTempor equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, actualDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId)))); } diff --git a/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3SuppressReceiveSpansTest.java b/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3SuppressReceiveSpansTest.java index 3789a29acf34..3e47d2df00e1 100644 --- a/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3SuppressReceiveSpansTest.java +++ b/instrumentation/jms/jms-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/Jms3SuppressReceiveSpansTest.java @@ -63,7 +63,8 @@ void testMessageConsumer(DestinationFactory destinationFactory, boolean isTempor equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, producerDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId), messagingTempDestination(isTemporary)), span -> @@ -76,7 +77,8 @@ void testMessageConsumer(DestinationFactory destinationFactory, boolean isTempor equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, actualDestinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, messageId))), trace -> diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/testing/src/main/java/io/opentelemetry/instrumentation/kafka/internal/KafkaClientBaseTest.java b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/testing/src/main/java/io/opentelemetry/instrumentation/kafka/internal/KafkaClientBaseTest.java index 582d68c70a4e..a81c317f279a 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/testing/src/main/java/io/opentelemetry/instrumentation/kafka/internal/KafkaClientBaseTest.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/testing/src/main/java/io/opentelemetry/instrumentation/kafka/internal/KafkaClientBaseTest.java @@ -160,7 +160,7 @@ protected static List sendAttributes( Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -193,7 +193,7 @@ protected static List receiveAttributes(boolean testHeaders) Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("consumer")), @@ -220,7 +220,7 @@ protected static List processAttributes( Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("consumer")), diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsSuppressReceiveSpansTest.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsSuppressReceiveSpansTest.java index 8d70c340f60a..37248598a51e 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsSuppressReceiveSpansTest.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsSuppressReceiveSpansTest.java @@ -31,7 +31,8 @@ void assertTraces() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer"))), @@ -44,7 +45,8 @@ void assertTraces() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, greeting.getBytes(StandardCharsets.UTF_8).length), diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsTest.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsTest.java index 35e723247b44..47e95bca624f 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsTest.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/InterceptorsTest.java @@ -38,7 +38,8 @@ void assertTraces() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")))); @@ -62,7 +63,8 @@ void assertTraces() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "test"), @@ -81,7 +83,8 @@ void assertTraces() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, greeting.getBytes(StandardCharsets.UTF_8).length), diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperSuppressReceiveSpansTest.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperSuppressReceiveSpansTest.java index 04c1babf5b60..8ed701e63bb6 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperSuppressReceiveSpansTest.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperSuppressReceiveSpansTest.java @@ -59,7 +59,7 @@ protected static List sendAttributes(boolean testHeaders) { Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -84,7 +84,7 @@ private static List processAttributes(String greeting, boole Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, greeting.getBytes(StandardCharsets.UTF_8).length), diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperTest.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperTest.java index aaa6730f1dd6..83571ca31131 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperTest.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/test/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/WrapperTest.java @@ -81,7 +81,7 @@ protected static List sendAttributes(boolean testHeaders) { Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -106,7 +106,7 @@ private static List processAttributes(String greeting, boole Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, greeting.getBytes(StandardCharsets.UTF_8).length), @@ -138,7 +138,7 @@ protected static List receiveAttributes(boolean testHeaders) Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, SHARED_TOPIC), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo(MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "test"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, diff --git a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsDefaultTest.groovy b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsDefaultTest.groovy index d50f9e950dba..e26442d53cfa 100644 --- a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsDefaultTest.groovy +++ b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsDefaultTest.groovy @@ -99,7 +99,7 @@ class KafkaStreamsDefaultTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PENDING - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.startsWith("producer") } "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String "$MessagingIncubatingAttributes.MESSAGING_KAFKA_MESSAGE_OFFSET" 0 @@ -118,7 +118,7 @@ class KafkaStreamsDefaultTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PENDING - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "receive" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "receive" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.endsWith("consumer") } "$MessagingIncubatingAttributes.MESSAGING_BATCH_MESSAGE_COUNT" 1 if (Boolean.getBoolean("testLatestDeps")) { @@ -135,7 +135,7 @@ class KafkaStreamsDefaultTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PENDING - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.endsWith("consumer") } "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE" Long "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String @@ -156,7 +156,7 @@ class KafkaStreamsDefaultTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PROCESSED - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.endsWith("producer") } "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String "$MessagingIncubatingAttributes.MESSAGING_KAFKA_MESSAGE_OFFSET" 0 @@ -174,7 +174,7 @@ class KafkaStreamsDefaultTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PROCESSED - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "receive" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "receive" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.startsWith("consumer") } "$MessagingIncubatingAttributes.MESSAGING_BATCH_MESSAGE_COUNT" 1 if (Boolean.getBoolean("testLatestDeps")) { @@ -191,7 +191,7 @@ class KafkaStreamsDefaultTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PROCESSED - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.startsWith("consumer") } "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE" Long "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String diff --git a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsSuppressReceiveSpansTest.groovy b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsSuppressReceiveSpansTest.groovy index 386e09b56efb..1fd5d5a60977 100644 --- a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsSuppressReceiveSpansTest.groovy +++ b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/test/groovy/KafkaStreamsSuppressReceiveSpansTest.groovy @@ -94,7 +94,7 @@ class KafkaStreamsSuppressReceiveSpansTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PENDING - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" "producer-1" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String "$MessagingIncubatingAttributes.MESSAGING_KAFKA_MESSAGE_OFFSET" 0 @@ -109,7 +109,7 @@ class KafkaStreamsSuppressReceiveSpansTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PENDING - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.endsWith("consumer") } "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE" Long "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String @@ -133,7 +133,7 @@ class KafkaStreamsSuppressReceiveSpansTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PROCESSED - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" String "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String "$MessagingIncubatingAttributes.MESSAGING_KAFKA_MESSAGE_OFFSET" 0 @@ -147,7 +147,7 @@ class KafkaStreamsSuppressReceiveSpansTest extends KafkaStreamsBaseTest { attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "kafka" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" STREAM_PROCESSED - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_CLIENT_ID" { it.startsWith("consumer") } "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE" Long "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID" String diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java index 7609edbc402c..cc70d546d9fe 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java @@ -20,7 +20,7 @@ public void onStart(AttributesBuilder attributes, Context parentContext, RedisUR int database = redisUri.getDatabase(); if (database != 0) { - attributes.put(DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX, (long) database); + attributes.put(DbIncubatingAttributes.DB_NAMESPACE, String.valueOf(database)); } } diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java index 74bc895b59a9..86838b0484f9 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java @@ -191,7 +191,7 @@ void testSetCommandUsingFutureGetWithTimeout() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")))); } @Test @@ -221,7 +221,7 @@ void testCommandChainedWithThenAccept() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -283,7 +283,7 @@ void getNonExistentKeyCommandWithHandleAsyncAndChainedWithThenApply() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")), span -> span.hasName("callback1") .hasKind(SpanKind.INTERNAL) @@ -324,7 +324,7 @@ void testCommandWithNoArgumentsUsingBiconsumer() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -368,7 +368,7 @@ void testHashSetAndThenNestApplyToHashGetall() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HMSET"))), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HMSET"))), trace -> trace.hasSpansSatisfyingExactly( span -> @@ -376,7 +376,7 @@ void testHashSetAndThenNestApplyToHashGetall() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HGETALL")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HGETALL")))); } @Test @@ -418,7 +418,7 @@ void testCommandCompletesExceptionally() { .hasException(new IllegalStateException("TestException")) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEL")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEL")))); } @Test @@ -455,7 +455,7 @@ void testCommandBeforeItFinished() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SADD"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SADD"), equalTo(booleanKey("lettuce.command.cancelled"), true)), span -> span.hasName("callback") @@ -492,7 +492,7 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEBUG")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEBUG")))); } @Test @@ -526,6 +526,6 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SHUTDOWN")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java index 49fa0ba716ee..b23951ff23aa 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java @@ -161,7 +161,7 @@ void testSetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")))); } @Test @@ -177,7 +177,7 @@ void testGetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } @Test @@ -193,7 +193,7 @@ void testGetNonExistentKeyCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } @Test @@ -209,7 +209,7 @@ void testCommandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY")))); } @Test @@ -225,7 +225,7 @@ void testListCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "LPUSH")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "LPUSH")))); } @Test @@ -241,7 +241,7 @@ void testHashSetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HMSET")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HMSET")))); } @Test @@ -257,7 +257,7 @@ void testHashGetallCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HGETALL")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HGETALL")))); } @Test @@ -289,7 +289,7 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEBUG")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEBUG")))); } @Test @@ -323,6 +323,6 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SHUTDOWN")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java index 142e7b15abb6..becb1f7cb528 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java @@ -20,7 +20,7 @@ public void onStart(AttributesBuilder attributes, Context parentContext, RedisUR int database = redisUri.getDatabase(); if (database != 0) { - attributes.put(DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX, (long) database); + attributes.put(DbIncubatingAttributes.DB_NAMESPACE, String.valueOf(database)); } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java index 408f2ba72d91..2477142a2582 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java @@ -185,8 +185,8 @@ void testSetCommandUsingFutureGetWithTimeout() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET TESTSETKEY ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET TESTSETKEY ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")))); } @Test @@ -217,8 +217,8 @@ void testGetCommandChainedWithThenAccept() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET TESTKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET TESTKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -274,8 +274,8 @@ void testGetNonExistentKeyCommandWithHandleAsyncAndChainedWithThenApply() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET NON_EXISTENT_KEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET NON_EXISTENT_KEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")), span -> span.hasName("callback1") .hasKind(SpanKind.INTERNAL) @@ -317,8 +317,8 @@ void testCommandWithNoArgumentsUsingBiconsumer() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -364,9 +364,9 @@ void testHashSetAndThenNestApplyToHashGetall() .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "HMSET TESTHM firstname ? lastname ? age ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HMSET"))), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HMSET"))), trace -> trace.hasSpansSatisfyingExactly( span -> @@ -374,8 +374,8 @@ void testHashSetAndThenNestApplyToHashGetall() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "HGETALL TESTHM"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HGETALL")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "HGETALL TESTHM"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HGETALL")))); } @Test @@ -417,8 +417,8 @@ void testCommandCompletesExceptionally() { .hasException(new IllegalStateException("TestException")) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEL key1 key2"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEL")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "DEL key1 key2"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEL")))); } @Test @@ -455,8 +455,8 @@ void testCancelCommandBeforeItFinishes() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SADD SKEY ? ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SADD"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SADD SKEY ? ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SADD"), equalTo(booleanKey("lettuce.command.cancelled"), true)), span -> span.hasName("callback") @@ -480,8 +480,8 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEBUG")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "DEBUG SEGFAULT"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEBUG")))); } @Test @@ -500,7 +500,7 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SHUTDOWN NOSAVE"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SHUTDOWN")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SHUTDOWN NOSAVE"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index feb5f7ead45c..1d26ce38e824 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -92,8 +92,8 @@ void testSetCommandWithSubscribeOnDefinedConsumer() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET TESTSETKEY ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET TESTSETKEY ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -123,8 +123,8 @@ void testGetCommandWithLambdaFunction() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET TESTKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET TESTKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } // to make sure instrumentation's chained completion stages won't interfere with user's, while @@ -162,8 +162,8 @@ void testGetNonExistentKeyCommand() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET NON_EXISTENT_KEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET NON_EXISTENT_KEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -192,8 +192,8 @@ void testCommandWithNoArguments() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY")))); } @Test @@ -208,8 +208,8 @@ void testCommandFluxPublisher() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "COMMAND"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "COMMAND"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "COMMAND"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "COMMAND"), satisfies( AttributeKey.longKey("lettuce.command.results.count"), val -> val.isGreaterThan(100))))); @@ -227,8 +227,8 @@ void testCommandCancelAfter2OnFluxPublisher() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "COMMAND"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "COMMAND"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "COMMAND"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "COMMAND"), satisfies( AttributeKey.booleanKey("lettuce.command.cancelled"), AbstractBooleanAssert::isTrue), @@ -261,8 +261,8 @@ void testDebugSegfaultCommandReturnsMonoVoidWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEBUG")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "DEBUG SEGFAULT"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEBUG")))); } @Test @@ -281,8 +281,8 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SHUTDOWN NOSAVE"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SHUTDOWN")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SHUTDOWN NOSAVE"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SHUTDOWN")))); } @Test @@ -301,16 +301,16 @@ void testBlockingSubscriber() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET a ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET a ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET a"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET a"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } @Test @@ -329,16 +329,16 @@ void testAsyncSubscriber() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET a ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET a ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET a"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET a"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } @Test @@ -362,15 +362,15 @@ void testAsyncSubscriberWithSpecificThreadPool() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET a ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET a ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET a"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET a"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java index 7828a3c5ef8e..e2a447f7ee33 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java @@ -148,8 +148,8 @@ void testSetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET TESTSETKEY ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET TESTSETKEY ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")))); } @Test @@ -165,8 +165,8 @@ void testGetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET TESTKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET TESTKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } @Test @@ -182,8 +182,8 @@ void testGetNonExistentKeyCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET NON_EXISTENT_KEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET NON_EXISTENT_KEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } @Test @@ -199,8 +199,8 @@ void testCommandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RANDOMKEY")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RANDOMKEY")))); } @Test @@ -216,8 +216,8 @@ void testListCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "LPUSH TESTLIST ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "LPUSH")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "LPUSH TESTLIST ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "LPUSH")))); } @Test @@ -234,9 +234,9 @@ void testHashSetCommand() { .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "HMSET user firstname ? lastname ? age ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HMSET")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HMSET")))); } @Test @@ -252,8 +252,8 @@ void testHashGetallCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "HGETALL TESTHM"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HGETALL")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "HGETALL TESTHM"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HGETALL")))); } @Test @@ -272,8 +272,8 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEBUG")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "DEBUG SEGFAULT"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEBUG")))); } @Test @@ -292,7 +292,7 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SHUTDOWN NOSAVE"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SHUTDOWN")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SHUTDOWN NOSAVE"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java index 2121d2500510..242bdce460f4 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java @@ -58,7 +58,7 @@ void testAsyncSubscriberWithSpecificThreadPool() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET a ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET a ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -73,7 +73,7 @@ void testAsyncSubscriberWithSpecificThreadPool() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET a")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET a")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java index d040634872b6..d2d1f704771b 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java +++ b/instrumentation/lettuce/lettuce-5.1/library/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/OpenTelemetryTracing.java @@ -40,7 +40,7 @@ final class OpenTelemetryTracing implements Tracing { // copied from DbIncubatingAttributes private static final AttributeKey DB_SYSTEM = AttributeKey.stringKey("db.system"); - private static final AttributeKey DB_STATEMENT = AttributeKey.stringKey("db.statement"); + private static final AttributeKey DB_QUERY_TEXT = AttributeKey.stringKey("db.query.text"); // copied from DbIncubatingAttributes.DbSystemValues private static final String REDIS = "redis"; @@ -338,7 +338,7 @@ private void finish(Span span) { if (name != null) { String statement = sanitizer.sanitize(name, argsList != null ? argsList : splitArgs(argsString)); - span.setAttribute(DB_STATEMENT, statement); + span.setAttribute(DB_QUERY_TEXT, statement); } span.end(); } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java index 7aecb49b892b..1039144eee30 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java @@ -152,7 +152,7 @@ void testSetCommandUsingFutureGetWithTimeout() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET TESTSETKEY ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET TESTSETKEY ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -198,7 +198,7 @@ void testGetCommandChainedWithThenAccept() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET TESTKEY")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET TESTKEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -277,7 +277,7 @@ void testGetNonExistentKeyCommandWithHandleAsyncAndChainedWithThenApply() throws equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "GET NON_EXISTENT_KEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), @@ -343,7 +343,7 @@ void testCommandWithNoArgumentsUsingBiconsumer() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -403,7 +403,7 @@ void testHashSetAndThenNestApplyToHashGetall() throws Exception { equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "HMSET TESTHM firstname ? lastname ? age ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), @@ -420,7 +420,7 @@ void testHashSetAndThenNestApplyToHashGetall() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "HGETALL TESTHM")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "HGETALL TESTHM")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java index a2e157952953..b9a62232e30b 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java @@ -99,7 +99,7 @@ void testSetCommandWithSubscribeOnDefinedConsumer() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET TESTSETKEY ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET TESTSETKEY ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -137,7 +137,7 @@ void testGetCommandWithLambdaFunction() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET TESTKEY")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET TESTKEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -187,7 +187,7 @@ void testGetNonExistentKeyCommand() throws Exception { equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, "GET NON_EXISTENT_KEY")) + DbIncubatingAttributes.DB_QUERY_TEXT, "GET NON_EXISTENT_KEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -224,7 +224,7 @@ void testCommandWithNoArguments() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -248,7 +248,7 @@ void testCommandFluxPublisher() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "COMMAND")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "COMMAND")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -293,7 +293,7 @@ void testBlockingSubscriber() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET a ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET a ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -308,7 +308,7 @@ void testBlockingSubscriber() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET a")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET a")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -337,7 +337,7 @@ void testAsyncSubscriber() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET a ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET a ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -352,7 +352,7 @@ void testAsyncSubscriber() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET a")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET a")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java index a067003b9ae0..b4adf4e29a57 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java @@ -73,7 +73,7 @@ void testAuthCommand() throws Exception { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "AUTH ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "AUTH ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index b9e53ffb83a1..15a644045c87 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -118,7 +118,7 @@ void testSetCommand() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET TESTSETKEY ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET TESTSETKEY ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -143,7 +143,7 @@ void testGetCommand() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET TESTKEY")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET TESTKEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -169,7 +169,7 @@ void testGetNonExistentKeyCommand() { equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, "GET NON_EXISTENT_KEY")) + DbIncubatingAttributes.DB_QUERY_TEXT, "GET NON_EXISTENT_KEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -194,7 +194,7 @@ void testCommandWithNoArguments() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RANDOMKEY")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RANDOMKEY")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -224,7 +224,7 @@ void testListCommand() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "LPUSH TESTLIST ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "LPUSH TESTLIST ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -250,7 +250,7 @@ void testHashSetCommand() { equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "HMSET user firstname ? lastname ? age ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), @@ -276,7 +276,7 @@ void testHashGetallCommand() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "HGETALL TESTHM")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "HGETALL TESTHM")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -309,7 +309,7 @@ void testEvalCommand() { equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "EVAL " + b64Script + " 1 TESTLIST ? ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), @@ -336,7 +336,7 @@ void testMsetCommand() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "MSET key1 ? key2 ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "MSET key1 ? key2 ?")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -366,7 +366,7 @@ void testDebugSegfaultCommandWithNoArgumentProducesNoSpan() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT"))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "DEBUG SEGFAULT"))); } else { trace.hasSpansSatisfyingExactly( span -> @@ -380,7 +380,7 @@ void testDebugSegfaultCommandWithNoArgumentProducesNoSpan() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "DEBUG SEGFAULT")) // these are no longer recorded since Lettuce 6.1.6 .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), @@ -415,7 +415,7 @@ void testShutdownCommandProducesNoSpan() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SHUTDOWN NOSAVE"))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SHUTDOWN NOSAVE"))); } else { trace.hasSpansSatisfyingExactly( span -> @@ -430,7 +430,7 @@ void testShutdownCommandProducesNoSpan() { equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SHUTDOWN NOSAVE")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SHUTDOWN NOSAVE")) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end"))); diff --git a/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java b/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java index 6890025d5c8a..dadd705965e9 100644 --- a/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java +++ b/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java @@ -19,15 +19,15 @@ class MongoAttributesExtractor implements AttributesExtractor { // copied from DbIncubatingAttributes - private static final AttributeKey DB_MONGODB_COLLECTION = - AttributeKey.stringKey("db.mongodb.collection"); + private static final AttributeKey DB_COLLECTION_NAME = + AttributeKey.stringKey("db.collection.name"); @Override public void onStart( AttributesBuilder attributes, Context parentContext, CommandStartedEvent event) { String collectionName = collectionName(event); if (collectionName != null) { - attributes.put(DB_MONGODB_COLLECTION, collectionName); + attributes.put(DB_COLLECTION_NAME, collectionName); } } diff --git a/instrumentation/mongo/mongo-common/testing/src/main/groovy/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.groovy b/instrumentation/mongo/mongo-common/testing/src/main/groovy/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.groovy index 3cd9dafc2afe..3e87fcf0d237 100644 --- a/instrumentation/mongo/mongo-common/testing/src/main/groovy/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.groovy +++ b/instrumentation/mongo/mongo-common/testing/src/main/groovy/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.groovy @@ -418,14 +418,14 @@ abstract class AbstractMongoClientTest extends InstrumentationSpecification { attributes { "$ServerAttributes.SERVER_ADDRESS" host "$ServerAttributes.SERVER_PORT" port - "$DbIncubatingAttributes.DB_STATEMENT" { + "$DbIncubatingAttributes.DB_QUERY_TEXT" { statementEval.call(it.replaceAll(" ", "")) } "$DbIncubatingAttributes.DB_SYSTEM" "mongodb" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "mongodb://localhost:" + port - "$DbIncubatingAttributes.DB_NAME" dbName - "$DbIncubatingAttributes.DB_OPERATION" operation - "$DbIncubatingAttributes.DB_MONGODB_COLLECTION" collection + "$DbIncubatingAttributes.DB_NAMESPACE" dbName + "$DbIncubatingAttributes.DB_OPERATION_NAME" operation + "$DbIncubatingAttributes.DB_COLLECTION_NAME" collection } } } diff --git a/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java b/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java index cb51f8efb076..082f4005362c 100644 --- a/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java +++ b/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java @@ -98,8 +98,8 @@ void shouldGetStatusWithTraces() throws IOException { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "opensearch"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET _cluster/health")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET _cluster/health")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) @@ -163,8 +163,8 @@ public void onFailure(Exception e) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "opensearch"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET _cluster/health")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET"), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET _cluster/health")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java index 1d05086ef401..1ab6aa3f48ac 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java @@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter; +import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingProducerMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; @@ -136,7 +137,8 @@ private static Instrumenter createProducerInstrumenter() { .addAttributesExtractor( createMessagingAttributesExtractor(getter, MessageOperation.PUBLISH)) .addAttributesExtractor( - ServerAttributesExtractor.create(new PulsarNetClientAttributesGetter())); + ServerAttributesExtractor.create(new PulsarNetClientAttributesGetter())) + .addOperationMetrics(MessagingProducerMetrics.get()); if (AgentInstrumentationConfig.get() .getBoolean("otel.instrumentation.pulsar.experimental-span-attributes", false)) { diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java index f32daa20e074..316ff576c7c3 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/AbstractPulsarClientTest.java @@ -13,7 +13,7 @@ import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID; -import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION; +import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_SYSTEM; import static org.assertj.core.api.Assertions.assertThat; @@ -22,6 +22,7 @@ import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.sdk.testing.assertj.AttributeAssertion; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; import io.opentelemetry.sdk.trace.data.LinkData; import io.opentelemetry.sdk.trace.data.SpanData; import java.time.Duration; @@ -76,6 +77,10 @@ abstract class AbstractPulsarClientTest { private static final AttributeKey MESSAGE_TYPE = AttributeKey.stringKey("messaging.pulsar.message.type"); + private static final double[] DURATION_BUCKETS = + new double[] { + 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0 + }; @BeforeAll static void beforeAll() throws PulsarClientException { @@ -163,6 +168,26 @@ void testConsumeNonPartitionedTopicUsingBatchReceive() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( batchReceiveAttributes(topic, null, false)))); + + assertThat(testing.metrics()) + .satisfiesExactlyInAnyOrder( + metric -> + OpenTelemetryAssertions.assertThat(metric) + .hasName("messaging.publish.duration") + .hasUnit("s") + .hasDescription("Measures the duration of publish operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfying( + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(SERVER_PORT, brokerPort), + equalTo(SERVER_ADDRESS, brokerHost)) + .hasBucketBoundaries(DURATION_BUCKETS)))); } @Test @@ -237,7 +262,7 @@ static List sendAttributes( equalTo(SERVER_ADDRESS, brokerHost), equalTo(SERVER_PORT, brokerPort), equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION, "publish"), + equalTo(MESSAGING_OPERATION_TYPE, "publish"), equalTo(MESSAGING_MESSAGE_ID, messageId), satisfies(MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative), equalTo(MESSAGE_TYPE, "normal"))); @@ -270,7 +295,7 @@ static List receiveAttributes( equalTo(SERVER_ADDRESS, brokerHost), equalTo(SERVER_PORT, brokerPort), equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION, "receive"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"), equalTo(MESSAGING_MESSAGE_ID, messageId), satisfies(MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative))); if (testHeaders) { @@ -292,7 +317,7 @@ static List processAttributes( Arrays.asList( equalTo(MESSAGING_SYSTEM, "pulsar"), equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION, "process"), + equalTo(MESSAGING_OPERATION_TYPE, "process"), equalTo(MESSAGING_MESSAGE_ID, messageId), satisfies(MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative))); if (testHeaders) { diff --git a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java index 8ac63c9aa873..36ebe81accbf 100644 --- a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java +++ b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java @@ -7,8 +7,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; -import io.opentelemetry.instrumentation.r2dbc.v1_0.R2dbcTelemetry; -import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.R2dbcNetAttributesGetter; +import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetry; +import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.internal.R2dbcNetAttributesGetter; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; diff --git a/instrumentation/r2dbc-1.0/library-instrumentation-shaded/build.gradle.kts b/instrumentation/r2dbc-1.0/library-instrumentation-shaded/build.gradle.kts index 7551f9c0cf68..4367637190c8 100644 --- a/instrumentation/r2dbc-1.0/library-instrumentation-shaded/build.gradle.kts +++ b/instrumentation/r2dbc-1.0/library-instrumentation-shaded/build.gradle.kts @@ -23,7 +23,11 @@ tasks { } relocate( "io.r2dbc.proxy", - "io.opentelemetry.instrumentation.r2dbc.v1_0.shaded.io.r2dbc.proxy" + "io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.io.r2dbc.proxy" + ) + relocate( + "io.opentelemetry.instrumentation.r2dbc.v1_0", + "io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded" ) } diff --git a/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java b/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java index 465c0e40bef6..6af3290b979c 100644 --- a/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java +++ b/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java @@ -8,13 +8,12 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_QUERY_TEXT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; import static io.r2dbc.spi.ConnectionFactoryOptions.DATABASE; import static io.r2dbc.spi.ConnectionFactoryOptions.DRIVER; import static io.r2dbc.spi.ConnectionFactoryOptions.HOST; @@ -170,11 +169,10 @@ void testQueries(Parameter parameter) { DB_CONNECTION_STRING, parameter.system + "://localhost:" + port), equalTo(DB_SYSTEM, parameter.system), - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, parameter.expectedStatement), - equalTo(DB_OPERATION, parameter.operation), - equalTo(DB_SQL_TABLE, parameter.table), + equalTo(DB_NAMESPACE, DB), + equalTo(DB_QUERY_TEXT, parameter.expectedStatement), + equalTo(DB_OPERATION_NAME, parameter.operation), + equalTo(DB_COLLECTION_NAME, parameter.table), equalTo(SERVER_ADDRESS, container.getHost()), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitMqTest.java b/instrumentation/rabbitmq-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitMqTest.java index 8347f81df4f8..f6fefd81f0c4 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitMqTest.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitMqTest.java @@ -839,7 +839,7 @@ private static void verifyMessagingAttributes( }); if (operation != null && !operation.equals("publish")) { - span.hasAttribute(MessagingIncubatingAttributes.MESSAGING_OPERATION, operation); + span.hasAttribute(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, operation); } } diff --git a/instrumentation/reactor/reactor-kafka-1.0/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/AbstractReactorKafkaTest.java b/instrumentation/reactor/reactor-kafka-1.0/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/AbstractReactorKafkaTest.java index becea32946d4..ee6889a5946d 100644 --- a/instrumentation/reactor/reactor-kafka-1.0/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/AbstractReactorKafkaTest.java +++ b/instrumentation/reactor/reactor-kafka-1.0/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/AbstractReactorKafkaTest.java @@ -181,7 +181,7 @@ protected static List sendAttributes(ProducerRecord stringAssert.startsWith("producer")), @@ -205,7 +205,7 @@ protected static List receiveAttributes(String topic) { asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, topic), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("consumer")), @@ -223,7 +223,7 @@ protected static List processAttributes( asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, record.topic()), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("consumer")), diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy b/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy index 5f6e10ab0acc..cb1af9916c0f 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy +++ b/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy @@ -91,7 +91,7 @@ class RediscalaClientTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "$DbIncubatingAttributes.DB_OPERATION" "SET" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SET" } } } @@ -126,7 +126,7 @@ class RediscalaClientTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "$DbIncubatingAttributes.DB_OPERATION" "SET" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SET" } } span(2) { @@ -135,7 +135,7 @@ class RediscalaClientTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "$DbIncubatingAttributes.DB_OPERATION" "GET" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "GET" } } } diff --git a/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonAsyncClientTest.java b/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonAsyncClientTest.java index 9a005c90315c..6b15b703975a 100644 --- a/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonAsyncClientTest.java +++ b/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonAsyncClientTest.java @@ -118,8 +118,8 @@ void futureSet() throws ExecutionException, InterruptedException, TimeoutExcepti equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")))); } @Test @@ -151,8 +151,8 @@ void futureWhenComplete() throws ExecutionException, InterruptedException, Timeo equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SADD set1 ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SADD")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SADD set1 ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SADD")) .hasParent(trace.getSpan(0)), span -> span.hasName("callback").hasKind(INTERNAL).hasParent(trace.getSpan(0)))); } @@ -225,7 +225,7 @@ void atomicBatchCommand() throws ExecutionException, InterruptedException, Timeo equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "MULTI;SET batch1 ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "MULTI;SET batch1 ?")) .hasParent(trace.getSpan(0)), span -> span.hasName("SET") @@ -235,8 +235,8 @@ void atomicBatchCommand() throws ExecutionException, InterruptedException, Timeo equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET batch2 ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET batch2 ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")) .hasParent(trace.getSpan(0)), span -> span.hasName("EXEC") @@ -246,8 +246,8 @@ void atomicBatchCommand() throws ExecutionException, InterruptedException, Timeo equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "EXEC"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "EXEC")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "EXEC"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "EXEC")) .hasParent(trace.getSpan(0)), span -> span.hasName("callback").hasKind(INTERNAL).hasParent(trace.getSpan(0)))); } diff --git a/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonClientTest.java b/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonClientTest.java index d25aa7e4fcd4..ca52e2b52641 100644 --- a/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonClientTest.java +++ b/instrumentation/redisson/redisson-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/AbstractRedissonClientTest.java @@ -121,8 +121,8 @@ void stringCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET foo ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET"))), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET foo ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET"))), trace -> trace.hasSpansSatisfyingExactly( span -> @@ -133,8 +133,8 @@ void stringCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "GET foo"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "GET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "GET foo"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); } @Test @@ -160,7 +160,7 @@ void batchCommand() equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "SET batch1 ?;SET batch2 ?")))); } @@ -201,7 +201,7 @@ void atomicBatchCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "MULTI;SET batch1 ?")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "MULTI;SET batch1 ?")) .hasParent(trace.getSpan(0)), span -> span.hasName("SET") @@ -211,8 +211,8 @@ void atomicBatchCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SET batch2 ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SET")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SET batch2 ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")) .hasParent(trace.getSpan(0)), span -> span.hasName("EXEC") @@ -222,8 +222,8 @@ void atomicBatchCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "EXEC"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "EXEC")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "EXEC"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "EXEC")) .hasParent(trace.getSpan(0)))); } @@ -244,8 +244,8 @@ void listCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "RPUSH list1 ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "RPUSH")) + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "RPUSH list1 ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "RPUSH")) .hasNoParent())); } @@ -270,9 +270,9 @@ void hashCommand() { equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, String.format("EVAL %s 1 map1 ? ?", script)), - equalTo(DbIncubatingAttributes.DB_OPERATION, "EVAL"))), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "EVAL"))), trace -> trace.hasSpansSatisfyingExactly( span -> @@ -283,8 +283,8 @@ void hashCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "HGET map1 key1"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "HGET")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "HGET map1 key1"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "HGET")))); } @Test @@ -304,8 +304,8 @@ void setCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SADD set1 ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SADD")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "SADD set1 ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SADD")))); } @Test @@ -333,8 +333,8 @@ void sortedSetCommand() equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), equalTo( - DbIncubatingAttributes.DB_STATEMENT, "ZADD sort_set1 ? ? ? ? ? ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "ZADD")))); + DbIncubatingAttributes.DB_QUERY_TEXT, "ZADD sort_set1 ? ? ? ? ? ?"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "ZADD")))); } private static void invokeAddAll(RScoredSortedSet object, Map arg) @@ -359,8 +359,8 @@ void atomicLongCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "INCR AtomicLong"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "INCR")))); + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, "INCR AtomicLong"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "INCR")))); } @Test @@ -385,9 +385,9 @@ void lockCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "EVAL"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "EVAL"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("EVAL"))))); traceAsserts.add( trace -> @@ -400,9 +400,9 @@ void lockCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "EVAL"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "EVAL"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("EVAL"))))); if (lockHas3Traces()) { traceAsserts.add( @@ -416,9 +416,9 @@ void lockCommand() { equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), equalTo(NetworkAttributes.NETWORK_PEER_PORT, (long) port), equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DEL"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DEL"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, stringAssert -> stringAssert.startsWith("DEL"))))); } diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/library/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqInstrumenterFactory.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/library/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqInstrumenterFactory.java index f01f9b3ead35..a7b9007a7c4a 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/library/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqInstrumenterFactory.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/library/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqInstrumenterFactory.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v4_8; +import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor.constant; import io.opentelemetry.api.OpenTelemetry; @@ -28,8 +29,8 @@ class RocketMqInstrumenterFactory { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.rocketmq-client-4.8"; // copied from MessagingIncubatingAttributes - private static final AttributeKey MESSAGING_OPERATION = - AttributeKey.stringKey("messaging.operation"); + private static final AttributeKey MESSAGING_OPERATION_TYPE = + stringKey("messaging.operation.type"); private static final AttributeKey MESSAGING_SYSTEM = AttributeKey.stringKey("messaging.system"); @@ -65,7 +66,7 @@ static RocketMqConsumerInstrumenter createConsumerInstrumenter( Instrumenter.builder( openTelemetry, INSTRUMENTATION_NAME, RocketMqInstrumenterFactory::spanNameOnReceive) .addAttributesExtractor(constant(MESSAGING_SYSTEM, "rocketmq")) - .addAttributesExtractor(constant(MESSAGING_OPERATION, "receive")); + .addAttributesExtractor(constant(MESSAGING_OPERATION_TYPE, "receive")); return new RocketMqConsumerInstrumenter( createProcessInstrumenter( diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/AbstractRocketMqClientTest.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/AbstractRocketMqClientTest.java index 60b277d7a46d..54ec0e7b8048 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/AbstractRocketMqClientTest.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/AbstractRocketMqClientTest.java @@ -143,7 +143,8 @@ public void onException(Throwable throwable) { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -166,7 +167,8 @@ public void onException(Throwable throwable) { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, val -> val.isInstanceOf(Long.class)), @@ -219,7 +221,8 @@ void testRocketmqProduceAndConsume() throws Exception { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -242,7 +245,8 @@ void testRocketmqProduceAndConsume() throws Exception { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, val -> val.isInstanceOf(Long.class)), @@ -307,7 +311,9 @@ void testRocketmqProduceAndBatchConsume() throws Exception { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -334,7 +340,8 @@ void testRocketmqProduceAndBatchConsume() throws Exception { .hasAttributesSatisfyingExactly( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "rocketmq"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive")), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "receive")), span -> span.hasName(sharedTopic + " process") .hasKind(SpanKind.CONSUMER) @@ -346,7 +353,8 @@ void testRocketmqProduceAndBatchConsume() throws Exception { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, val -> val.isInstanceOf(Long.class)), @@ -376,7 +384,8 @@ void testRocketmqProduceAndBatchConsume() throws Exception { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, val -> val.isInstanceOf(Long.class)), @@ -434,7 +443,8 @@ void captureMessageHeaderAsSpanAttributes() throws Exception { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)), @@ -461,7 +471,8 @@ void captureMessageHeaderAsSpanAttributes() throws Exception { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, sharedTopic), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, val -> val.isInstanceOf(Long.class)), diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java index c9b0557e79a5..bedd6c0c5bef 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java @@ -9,7 +9,7 @@ import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID; -import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION; +import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_ROCKETMQ_CLIENT_GROUP; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_ROCKETMQ_MESSAGE_KEYS; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_ROCKETMQ_MESSAGE_TAG; @@ -124,7 +124,7 @@ void testSendAndConsumeMessage() throws Throwable { MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "publish")), + equalTo(MESSAGING_OPERATION_TYPE, "publish")), span -> span.hasKind(SpanKind.CONSUMER) .hasName(topic + " process") @@ -141,7 +141,7 @@ void testSendAndConsumeMessage() throws Throwable { MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "process")), + equalTo(MESSAGING_OPERATION_TYPE, "process")), span -> span.hasName("child") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java index beab651f2a8f..5bef54777626 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/testing/src/main/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java @@ -11,7 +11,7 @@ import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID; -import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION; +import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_ROCKETMQ_CLIENT_GROUP; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_ROCKETMQ_MESSAGE_DELIVERY_TIMESTAMP; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_ROCKETMQ_MESSAGE_GROUP; @@ -421,7 +421,7 @@ private static SpanDataAssert assertProducerSpan( equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "publish"))); + equalTo(MESSAGING_OPERATION_TYPE, "publish"))); attributeAssertions.addAll(Arrays.asList(extraAttributes)); return span.hasKind(SpanKind.PRODUCER) @@ -452,7 +452,7 @@ private static SpanDataAssert assertProducerSpanWithFifoMessage( equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "publish"))); + equalTo(MESSAGING_OPERATION_TYPE, "publish"))); attributeAssertions.addAll(Arrays.asList(extraAttributes)); return span.hasKind(SpanKind.PRODUCER) @@ -483,7 +483,7 @@ private static SpanDataAssert assertProducerSpanWithDelayMessage( equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "publish"))); + equalTo(MESSAGING_OPERATION_TYPE, "publish"))); attributeAssertions.addAll(Arrays.asList(extraAttributes)); return span.hasKind(SpanKind.PRODUCER) @@ -501,7 +501,7 @@ private static SpanDataAssert assertReceiveSpan( equalTo(MESSAGING_ROCKETMQ_CLIENT_GROUP, consumerGroup), equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "receive"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"), equalTo(MESSAGING_BATCH_MESSAGE_COUNT, 1)); } @@ -525,7 +525,7 @@ private static SpanDataAssert assertProcessSpan( equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "process"))); + equalTo(MESSAGING_OPERATION_TYPE, "process"))); attributeAssertions.addAll(Arrays.asList(extraAttributes)); return span.hasKind(SpanKind.CONSUMER) @@ -558,7 +558,7 @@ private static SpanDataAssert assertProcessSpanWithFifoMessage( equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "process"))); + equalTo(MESSAGING_OPERATION_TYPE, "process"))); attributeAssertions.addAll(Arrays.asList(extraAttributes)); return span.hasKind(SpanKind.CONSUMER) @@ -591,7 +591,7 @@ private static SpanDataAssert assertProcessSpanWithDelayMessage( equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_MESSAGE_ID, sendReceipt.getMessageId().toString()), equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION, "process"))); + equalTo(MESSAGING_OPERATION_TYPE, "process"))); attributeAssertions.addAll(Arrays.asList(extraAttributes)); return span.hasKind(SpanKind.CONSUMER) diff --git a/instrumentation/spring/spring-boot-autoconfigure/README.md b/instrumentation/spring/spring-boot-autoconfigure-2/README.md similarity index 100% rename from instrumentation/spring/spring-boot-autoconfigure/README.md rename to instrumentation/spring/spring-boot-autoconfigure-2/README.md diff --git a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts b/instrumentation/spring/spring-boot-autoconfigure-2/build.gradle.kts similarity index 94% rename from instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts rename to instrumentation/spring/spring-boot-autoconfigure-2/build.gradle.kts index 4356534ad15e..cf1f041567de 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts +++ b/instrumentation/spring/spring-boot-autoconfigure-2/build.gradle.kts @@ -1,9 +1,9 @@ plugins { id("otel.library-instrumentation") + id("otel.japicmp-conventions") } -// Name the Spring Boot modules in accordance with https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration.custom-starter -base.archivesName.set("opentelemetry-spring-boot") +base.archivesName.set("opentelemetry-autoconfigure-spring-boot-2") group = "io.opentelemetry.instrumentation" val springBootVersion = "2.7.18" // AutoConfiguration is added in 2.7.0, but can be used with older versions @@ -33,9 +33,7 @@ dependencies { implementation(project(":instrumentation:spring:spring-kafka-2.7:library")) implementation(project(":instrumentation:spring:spring-web:spring-web-3.1:library")) implementation(project(":instrumentation:spring:spring-webmvc:spring-webmvc-5.3:library")) - implementation(project(":instrumentation:spring:spring-webmvc:spring-webmvc-6.0:library")) compileOnly("javax.servlet:javax.servlet-api:3.1.0") - compileOnly("jakarta.servlet:jakarta.servlet-api:5.0.0") implementation(project(":instrumentation:spring:spring-webflux:spring-webflux-5.3:library")) implementation(project(":instrumentation:micrometer:micrometer-1.5:library")) implementation(project(":instrumentation:log4j:log4j-appender-2.17:library")) diff --git a/instrumentation/spring/spring-boot-autoconfigure-2/gradle.properties b/instrumentation/spring/spring-boot-autoconfigure-2/gradle.properties new file mode 100644 index 000000000000..45d64bec279d --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-2/gradle.properties @@ -0,0 +1 @@ +otel.stable=true diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/OpenTelemetryAutoConfiguration.java similarity index 87% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/OpenTelemetryAutoConfiguration.java index eaa97f6c23a4..f3f936f37693 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/OpenTelemetryAutoConfiguration.java @@ -3,18 +3,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.TracerProvider; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.MapConverter; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringConfigProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.DistroVersionResourceProvider; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.SpringResourceProvider; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.MapConverter; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.SdkEnabled; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtelResourceProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtlpExporterProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.PropagationProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.SpringConfigProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.resources.DistroVersionResourceProvider; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.resources.SpringResourceProvider; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; import io.opentelemetry.sdk.autoconfigure.internal.ComponentLoader; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/ConditionalOnEnabledInstrumentation.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/ConditionalOnEnabledInstrumentation.java similarity index 91% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/ConditionalOnEnabledInstrumentation.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/ConditionalOnEnabledInstrumentation.java index 7c55f430d1e4..e54ca70fa971 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/ConditionalOnEnabledInstrumentation.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/ConditionalOnEnabledInstrumentation.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal; import io.opentelemetry.api.OpenTelemetry; import java.lang.annotation.ElementType; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/InstrumentationPropertyEnabled.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/InstrumentationPropertyEnabled.java similarity index 94% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/InstrumentationPropertyEnabled.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/InstrumentationPropertyEnabled.java index 87687f668b6c..ef049fa7eed1 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/InstrumentationPropertyEnabled.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/InstrumentationPropertyEnabled.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal; import java.util.Map; import org.springframework.context.annotation.Condition; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/MapConverter.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/MapConverter.java similarity index 93% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/MapConverter.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/MapConverter.java index 86e043bf1696..94344c8dadda 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/MapConverter.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/MapConverter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import java.util.Collections; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/SdkEnabled.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/SdkEnabled.java similarity index 89% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/SdkEnabled.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/SdkEnabled.java index 082bdebc00b7..871d23ca712c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/SdkEnabled.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/SdkEnabled.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal; import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java similarity index 71% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java index 052f499d4a1c..a0d9c83e9fd6 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.annotations.WithSpan; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import org.aspectj.lang.annotation.Aspect; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; @@ -15,7 +15,12 @@ import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.ParameterNameDiscoverer; -/** Configures {@link WithSpanAspect} to trace bean methods annotated with {@link WithSpan}. */ +/** + * Configures {@link WithSpanAspect} to trace bean methods annotated with {@link WithSpan}. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. + */ @ConditionalOnEnabledInstrumentation(module = "annotations") @ConditionalOnClass(Aspect.class) @Configuration diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspect.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationWithSpanAspect.java similarity index 90% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspect.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationWithSpanAspect.java index 5cf80fce7ecc..2eda95bfdda1 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspect.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationWithSpanAspect.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import io.opentelemetry.api.OpenTelemetry; import org.aspectj.lang.ProceedingJoinPoint; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JoinPointRequest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/JoinPointRequest.java similarity index 95% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JoinPointRequest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/JoinPointRequest.java index a308bc80fd12..817546cd0727 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JoinPointRequest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/JoinPointRequest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.annotations.WithSpan; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JointPointCodeAttributesExtractor.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/JointPointCodeAttributesExtractor.java similarity index 84% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JointPointCodeAttributesExtractor.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/JointPointCodeAttributesExtractor.java index 1077a35c07ce..043392a8cd62 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JointPointCodeAttributesExtractor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/JointPointCodeAttributesExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesGetter; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspect.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/WithSpanAspect.java similarity index 95% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspect.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/WithSpanAspect.java index 246deef6f61a..b07a66f8e451 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspect.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/WithSpanAspect.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; @@ -28,7 +28,7 @@ * can not be applied to constructors. */ abstract class WithSpanAspect { - private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-boot-autoconfigure"; + private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-boot-autoconfigure-2"; private final Instrumenter instrumenter; private final JoinPointRequest.Factory requestFactory; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java similarity index 95% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java index 6c81c7dde0df..19f66be02daa 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import io.opentelemetry.instrumentation.annotations.SpanAttribute; import io.opentelemetry.instrumentation.api.annotation.support.ParameterAttributeNamesExtractor; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/jdbc/DataSourcePostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/jdbc/DataSourcePostProcessor.java similarity index 90% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/jdbc/DataSourcePostProcessor.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/jdbc/DataSourcePostProcessor.java index d733caa22b43..104b93594133 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/jdbc/DataSourcePostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/jdbc/DataSourcePostProcessor.java @@ -3,12 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.jdbc; import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.InstrumentationConfigUtil; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import javax.sql.DataSource; import org.springframework.aop.scope.ScopedProxyUtils; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java similarity index 80% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java index 2e012f97687c..42772394264c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.jdbc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import javax.sql.DataSource; import org.springframework.beans.factory.ObjectProvider; @@ -16,6 +16,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ @ConditionalOnEnabledInstrumentation(module = "jdbc") @AutoConfiguration(after = DataSourceAutoConfiguration.class) @ConditionalOnBean({DataSource.class}) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java similarity index 95% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java index c746a72014c9..daeb9332c446 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.kafka; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java similarity index 84% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java index 1eab4c4e6346..83b35db656ff 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.kafka; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.kafkaclients.v2_6.KafkaTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -17,6 +17,10 @@ import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; import org.springframework.kafka.core.KafkaTemplate; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ @ConditionalOnEnabledInstrumentation(module = "kafka") @ConditionalOnClass({KafkaTemplate.class, ConcurrentKafkaListenerContainerFactory.class}) @Configuration diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderApplicationListener.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderApplicationListener.java similarity index 91% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderApplicationListener.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderApplicationListener.java index 646e8119bc01..208e285e0647 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderApplicationListener.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderApplicationListener.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; @@ -13,6 +13,10 @@ import org.springframework.context.event.GenericApplicationListener; import org.springframework.core.ResolvableType; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ public class LogbackAppenderApplicationListener implements GenericApplicationListener { private static final Class[] SOURCE_TYPES = { diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderInstaller.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderInstaller.java similarity index 98% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderInstaller.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderInstaller.java index 811dacb31bf7..f68815a7d8a8 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderInstaller.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderInstaller.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java similarity index 82% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java index b9bb519f61ce..2423a7022783 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java @@ -3,16 +3,20 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ @Configuration @SuppressWarnings("OtelPrivateConstructorForUtilityClass") public class OpenTelemetryAppenderAutoConfiguration { diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java similarity index 81% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java index 8be9811fa84d..716ef47261a0 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.micrometer; import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.MeterRegistry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -19,6 +19,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ @ConditionalOnEnabledInstrumentation(module = "micrometer", enabledByDefault = false) @AutoConfigureAfter(MetricsAutoConfiguration.class) @AutoConfigureBefore(CompositeMeterRegistryAutoConfiguration.class) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java similarity index 76% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java index 0eee74e37965..04cd707e456e 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.mongo; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.mongo; import com.mongodb.MongoClientSettings; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.mongo.v3_1.MongoTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.InstrumentationConfigUtil; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -17,6 +17,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ @ConditionalOnBean(OpenTelemetry.class) @ConditionalOnClass(MongoClientSettings.class) @ConditionalOnEnabledInstrumentation(module = "mongo") diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java similarity index 79% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java index 5c9a3b62665a..303e631cfd20 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.r2dbc; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.r2dbc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.r2dbc.spi.ConnectionFactory; import org.springframework.beans.factory.ObjectProvider; @@ -15,6 +15,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ @ConditionalOnBean(OpenTelemetry.class) @ConditionalOnClass(ConnectionFactory.class) @ConditionalOnEnabledInstrumentation(module = "r2dbc") diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java similarity index 88% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java index d3bddb3d8055..9bc780ecc6ce 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.r2dbc; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.r2dbc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.r2dbc.v1_0.R2dbcTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.InstrumentationConfigUtil; +import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetry; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.r2dbc.spi.ConnectionFactory; import io.r2dbc.spi.ConnectionFactoryOptions; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/RestTemplateBeanPostProcessor.java similarity index 92% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessor.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/RestTemplateBeanPostProcessor.java index 096e97c83061..9e8fda03d009 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/RestTemplateBeanPostProcessor.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateInstrumentation.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/RestTemplateInstrumentation.java similarity index 84% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateInstrumentation.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/RestTemplateInstrumentation.java index deb84cfcc23b..8097c4d2d921 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateInstrumentation.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/RestTemplateInstrumentation.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.web; import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry; import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -24,7 +24,7 @@ static RestTemplate addIfNotPresent( RestTemplate restTemplate, OpenTelemetry openTelemetry, ConfigProperties config) { ClientHttpRequestInterceptor instrumentationInterceptor = - InstrumentationConfigUtil.configureBuilder( + InstrumentationConfigUtil.configureClientBuilder( config, SpringWebTelemetry.builder(openTelemetry), WebTelemetryUtil.getBuilderExtractor()) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java similarity index 83% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java index 7fed019fe527..5a1df99aba65 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -18,7 +18,10 @@ /** * Configures {@link RestTemplate} for tracing. * - *

Adds Open Telemetry instrumentation to RestTemplate beans after initialization + *

Adds Open Telemetry instrumentation to RestTemplate beans after initialization. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. */ @ConditionalOnEnabledInstrumentation(module = "spring-web") @ConditionalOnClass(RestTemplate.class) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java similarity index 57% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java index cfd5f5eb5ed7..564269156aa7 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webflux; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxTelemetry; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; @@ -18,7 +18,10 @@ /** * Configures {@link WebClient} for tracing. * - *

Adds Open Telemetry instrumentation to WebClient beans after initialization + *

Adds Open Telemetry instrumentation to WebClient beans after initialization. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. */ @ConditionalOnEnabledInstrumentation(module = "spring-webflux") @ConditionalOnClass(WebClient.class) @@ -30,14 +33,14 @@ public SpringWebfluxInstrumentationAutoConfiguration() {} // static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning @Bean static WebClientBeanPostProcessor otelWebClientBeanPostProcessor( - ObjectProvider openTelemetryProvider) { - return new WebClientBeanPostProcessor(openTelemetryProvider); + ObjectProvider openTelemetryProvider, + ObjectProvider configPropertiesProvider) { + return new WebClientBeanPostProcessor(openTelemetryProvider, configPropertiesProvider); } @Bean - WebFilter telemetryFilter(OpenTelemetry openTelemetry) { - return SpringWebfluxTelemetry.builder(openTelemetry) - .build() + WebFilter telemetryFilter(OpenTelemetry openTelemetry, ConfigProperties config) { + return WebClientBeanPostProcessor.getWebfluxTelemetry(openTelemetry, config) .createWebFilterAndRegisterReactorHook(); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/WebClientBeanPostProcessor.java similarity index 55% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessor.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/WebClientBeanPostProcessor.java index 1ee2c56c1da0..651a38e9fa9e 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/WebClientBeanPostProcessor.java @@ -3,10 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webflux; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxTelemetry; +import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.SpringWebfluxBuilderUtil; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.web.reactive.function.client.WebClient; @@ -19,9 +22,23 @@ final class WebClientBeanPostProcessor implements BeanPostProcessor { private final ObjectProvider openTelemetryProvider; + private final ObjectProvider configPropertiesProvider; - WebClientBeanPostProcessor(ObjectProvider openTelemetryProvider) { + WebClientBeanPostProcessor( + ObjectProvider openTelemetryProvider, + ObjectProvider configPropertiesProvider) { this.openTelemetryProvider = openTelemetryProvider; + this.configPropertiesProvider = configPropertiesProvider; + } + + static SpringWebfluxTelemetry getWebfluxTelemetry( + OpenTelemetry openTelemetry, ConfigProperties config) { + return InstrumentationConfigUtil.configureClientAndServerBuilder( + config, + SpringWebfluxTelemetry.builder(openTelemetry), + SpringWebfluxBuilderUtil.getClientBuilderExtractor(), + SpringWebfluxBuilderUtil.getServerBuilderExtractor()) + .build(); } @Override @@ -38,7 +55,8 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { private WebClient.Builder wrapBuilder(WebClient.Builder webClientBuilder) { SpringWebfluxTelemetry instrumentation = - SpringWebfluxTelemetry.create(openTelemetryProvider.getObject()); + getWebfluxTelemetry( + openTelemetryProvider.getObject(), configPropertiesProvider.getObject()); return webClientBuilder.filters(instrumentation::addClientTracingFilter); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java new file mode 100644 index 000000000000..a3c3ca3e8778 --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java @@ -0,0 +1,40 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webmvc; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; +import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry; +import io.opentelemetry.instrumentation.spring.webmvc.v5_3.internal.SpringMvcBuilderUtil; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import javax.servlet.Filter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.OncePerRequestFilter; +import org.springframework.web.servlet.DispatcherServlet; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +@ConditionalOnEnabledInstrumentation(module = "spring-webmvc") +@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class}) +@Configuration +@SuppressWarnings("OtelPrivateConstructorForUtilityClass") +public class SpringWebMvc5InstrumentationAutoConfiguration { + + @Bean + Filter otelWebMvcFilter(OpenTelemetry openTelemetry, ConfigProperties config) { + return InstrumentationConfigUtil.configureServerBuilder( + config, + SpringWebMvcTelemetry.builder(openTelemetry), + SpringMvcBuilderUtil.getBuilderExtractor()) + .build() + .createServletFilter(); + } +} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/ConfigPropertiesBridge.java similarity index 96% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/ConfigPropertiesBridge.java index 49d50f94cc5c..156b95a92d21 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/ConfigPropertiesBridge.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties; import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; diff --git a/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/InstrumentationConfigUtil.java new file mode 100644 index 000000000000..a0dfae102e13 --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/InstrumentationConfigUtil.java @@ -0,0 +1,63 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import java.util.function.Function; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class InstrumentationConfigUtil { + private InstrumentationConfigUtil() {} + + @CanIgnoreReturnValue + public static + T configureClientAndServerBuilder( + ConfigProperties config, + T builder, + Function> + getClientBuilder, + Function> + getServerBuilder) { + CommonConfig commonConfig = getConfig(config); + getClientBuilder.apply(builder).configure(commonConfig); + getServerBuilder.apply(builder).configure(commonConfig); + return builder; + } + + @CanIgnoreReturnValue + public static T configureClientBuilder( + ConfigProperties config, + T builder, + Function> getBuilder) { + getBuilder.apply(builder).configure(getConfig(config)); + return builder; + } + + @CanIgnoreReturnValue + public static T configureServerBuilder( + ConfigProperties config, + T builder, + Function> getBuilder) { + getBuilder.apply(builder).configure(getConfig(config)); + return builder; + } + + private static CommonConfig getConfig(ConfigProperties config) { + return new CommonConfig(new ConfigPropertiesBridge(config)); + } + + public static boolean isStatementSanitizationEnabled(ConfigProperties config, String key) { + return config.getBoolean( + key, config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true)); + } +} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/OtelResourceProperties.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtelResourceProperties.java similarity index 88% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/OtelResourceProperties.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtelResourceProperties.java index 0bb967079537..7cd552ea17ae 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/OtelResourceProperties.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtelResourceProperties.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties; import java.util.Collections; import java.util.Map; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/OtlpExporterProperties.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtlpExporterProperties.java similarity index 93% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/OtlpExporterProperties.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtlpExporterProperties.java index b159d10b80f3..f4c706dccfa0 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/OtlpExporterProperties.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtlpExporterProperties.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties; import java.util.HashMap; import java.util.Map; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/PropagationProperties.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/PropagationProperties.java similarity index 88% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/PropagationProperties.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/PropagationProperties.java index 4b582ac3fc2c..53056c5506fe 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/PropagationProperties.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/PropagationProperties.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties; import java.util.Collections; import java.util.List; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringConfigProperties.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/SpringConfigProperties.java similarity index 98% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringConfigProperties.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/SpringConfigProperties.java index c2a4f10aca1f..9b9b67038513 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringConfigProperties.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/SpringConfigProperties.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties; import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/resources/DistroVersionResourceProvider.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/DistroVersionResourceProvider.java similarity index 91% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/resources/DistroVersionResourceProvider.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/DistroVersionResourceProvider.java index 8ba185f97b98..755f14559677 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/resources/DistroVersionResourceProvider.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/DistroVersionResourceProvider.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.resources; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; @@ -19,7 +19,7 @@ public class DistroVersionResourceProvider implements ResourceProvider { public static final String VERSION = - EmbeddedInstrumentationProperties.findVersion("io.opentelemetry.spring-boot-autoconfigure"); + EmbeddedInstrumentationProperties.findVersion("io.opentelemetry.spring-boot-autoconfigure-2"); private static final AttributeKey TELEMETRY_DISTRO_NAME = AttributeKey.stringKey("telemetry.distro.name"); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/resources/SpringResourceProvider.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringResourceProvider.java similarity index 94% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/resources/SpringResourceProvider.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringResourceProvider.java index 5f562025764b..975bf1b3e46d 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/resources/SpringResourceProvider.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringResourceProvider.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.resources; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/additional-spring-configuration-metadata.json similarity index 96% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 1bd1e0c59f07..3b309aae4739 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -279,6 +279,12 @@ "description": "Enables the DB statement sanitization.", "defaultValue": true }, + { + "name": "otel.instrumentation.common.default-enabled", + "type": "java.lang.Boolean", + "description": "Enables all instrumentations. Set to false to disable all instrumentations and then enable specific modules individually, e.g. otel.instrumentation.jdbc.enabled=true.", + "defaultValue": true + }, { "name": "otel.instrumentation.common.peer-service-mapping", "type": "java.util.Map", @@ -306,6 +312,22 @@ "description": "Configures the instrumentation to recognize an alternative set of HTTP request methods. All other methods will be treated as _OTHER.", "defaultValue": "CONNECT,DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT,TRACE" }, + { + "name": "otel.instrumentation.http.server.capture-request-headers", + "type": "java.util.List", + "description": "List of HTTP request headers to capture in HTTP servers." + }, + { + "name": "otel.instrumentation.http.server.capture-response-headers", + "type": "java.util.List", + "description": "List of HTTP response headers to capture in HTTP servers." + }, + { + "name": "otel.instrumentation.http.server.emit-experimental-telemetry", + "type": "java.lang.Boolean", + "description": "Enable the capture of experimental HTTP server telemetry. Add the http.request.body.size and http.response.body.size attributes to spans, and record the http.server.request.body.size and http.server.response.body.size metrics.", + "defaultValue": false + }, { "name": "otel.instrumentation.jdbc.enabled", "type": "java.lang.Boolean", diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/native-image/io.opentelemetry.instrumentation/opentelemetry-spring-boot/resource-config.json b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/native-image/io.opentelemetry.instrumentation/opentelemetry-spring-boot/resource-config.json similarity index 100% rename from instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/native-image/io.opentelemetry.instrumentation/opentelemetry-spring-boot/resource-config.json rename to instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/native-image/io.opentelemetry.instrumentation/opentelemetry-spring-boot/resource-config.json diff --git a/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/spring.factories b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000000..f06e51c2e314 --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/spring.factories @@ -0,0 +1,15 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.kafka.KafkaInstrumentationAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.mongo.MongoClientInstrumentationAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.jdbc.JdbcInstrumentationAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.micrometer.MicrometerBridgeAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.r2dbc.R2dbcInstrumentationAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.web.SpringWebInstrumentationAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration,\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webmvc.SpringWebMvc5InstrumentationAutoConfiguration + +org.springframework.context.ApplicationListener=\ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging.LogbackAppenderApplicationListener diff --git a/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000000..f8be45c43e75 --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,10 @@ +io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.kafka.KafkaInstrumentationAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.mongo.MongoClientInstrumentationAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.jdbc.JdbcInstrumentationAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.micrometer.MicrometerBridgeAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.r2dbc.R2dbcInstrumentationAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.web.SpringWebInstrumentationAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/OpenTelemetryAutoConfigurationTest.java similarity index 98% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/OpenTelemetryAutoConfigurationTest.java index c13eb6e2fce7..0529c70e9e94 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/OpenTelemetryAutoConfigurationTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java similarity index 92% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java index a625252eacef..d9c9053b53ea 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import static org.assertj.core.api.Assertions.assertThat; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspectTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationWithSpanAspectTest.java similarity index 99% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspectTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationWithSpanAspectTest.java index 69f71af6d71b..9d6818b367bf 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspectTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/annotations/InstrumentationWithSpanAspectTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations; import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java similarity index 95% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java index 753e660bf72e..2994c26414f4 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.micrometer; import static org.assertj.core.api.Assertions.assertThat; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java similarity index 91% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java index b7bc9a25b997..c3dc0da25794 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.r2dbc; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.r2dbc; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; @@ -50,13 +50,13 @@ void statementSanitizerEnabledByDefault() { trace.hasSpansSatisfyingExactly( span -> span.hasAttribute( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "CREATE TABLE IF NOT EXISTS player(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(?), age INT, PRIMARY KEY (id))")), trace -> trace.hasSpansSatisfyingExactly( span -> span.hasAttribute( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "SELECT * FROM player WHERE id = ?"))); }); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java similarity index 97% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java index 9091047c8432..108cb5d3efed 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.web; import static org.assertj.core.api.Assertions.assertThat; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java similarity index 79% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java index aeecebf37807..6ec594630095 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java @@ -3,11 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webflux; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -17,6 +20,9 @@ class SpringWebfluxInstrumentationAutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) + .withBean( + ConfigProperties.class, + () -> DefaultConfigProperties.createFromMap(Collections.emptyMap())) .withConfiguration( AutoConfigurations.of(SpringWebfluxInstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessorTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/WebClientBeanPostProcessorTest.java similarity index 73% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessorTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/WebClientBeanPostProcessorTest.java index 55abca473a01..5aca77fd32ce 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessorTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webflux/WebClientBeanPostProcessorTest.java @@ -3,11 +3,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webflux; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import java.util.Collections; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanPostProcessor; @@ -20,6 +23,8 @@ class WebClientBeanPostProcessorTest { static { beanFactory.registerSingleton("openTelemetry", OpenTelemetry.noop()); + beanFactory.registerSingleton( + "configProperties", DefaultConfigProperties.createFromMap(Collections.emptyMap())); } @Test @@ -27,7 +32,9 @@ class WebClientBeanPostProcessorTest { "when processed bean is NOT of type WebClient or WebClientBuilder should return Object") void returnsObject() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); + new WebClientBeanPostProcessor( + beanFactory.getBeanProvider(OpenTelemetry.class), + beanFactory.getBeanProvider(ConfigProperties.class)); assertThat(underTest.postProcessAfterInitialization(new Object(), "testObject")) .isExactlyInstanceOf(Object.class); @@ -37,7 +44,9 @@ void returnsObject() { @DisplayName("when processed bean is of type WebClient should return WebClient") void returnsWebClient() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); + new WebClientBeanPostProcessor( + beanFactory.getBeanProvider(OpenTelemetry.class), + beanFactory.getBeanProvider(ConfigProperties.class)); assertThat(underTest.postProcessAfterInitialization(WebClient.create(), "testWebClient")) .isInstanceOf(WebClient.class); @@ -47,7 +56,9 @@ void returnsWebClient() { @DisplayName("when processed bean is of type WebClientBuilder should return WebClientBuilder") void returnsWebClientBuilder() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); + new WebClientBeanPostProcessor( + beanFactory.getBeanProvider(OpenTelemetry.class), + beanFactory.getBeanProvider(ConfigProperties.class)); assertThat( underTest.postProcessAfterInitialization(WebClient.builder(), "testWebClientBuilder")) @@ -58,7 +69,9 @@ void returnsWebClientBuilder() { @DisplayName("when processed bean is of type WebClient should add exchange filter to WebClient") void addsExchangeFilterWebClient() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); + new WebClientBeanPostProcessor( + beanFactory.getBeanProvider(OpenTelemetry.class), + beanFactory.getBeanProvider(ConfigProperties.class)); WebClient webClient = WebClient.create(); Object processedWebClient = @@ -81,7 +94,9 @@ void addsExchangeFilterWebClient() { "when processed bean is of type WebClientBuilder should add ONE exchange filter to WebClientBuilder") void addsExchangeFilterWebClientBuilder() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); + new WebClientBeanPostProcessor( + beanFactory.getBeanProvider(OpenTelemetry.class), + beanFactory.getBeanProvider(ConfigProperties.class)); WebClient.Builder webClientBuilder = WebClient.builder(); underTest.postProcessAfterInitialization(webClientBuilder, "testWebClientBuilder"); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java similarity index 79% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java index fffc164eabfd..31835cbe93c7 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java @@ -3,12 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.webmvc; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assumptions.assumeFalse; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import java.util.Collections; import javax.servlet.Filter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -20,6 +23,9 @@ class SpringWebMvcInstrumentation5AutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) + .withBean( + ConfigProperties.class, + () -> DefaultConfigProperties.createFromMap(Collections.emptyMap())) .withConfiguration( AutoConfigurations.of(SpringWebMvc5InstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/properties/OtlpExporterPropertiesTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtlpExporterPropertiesTest.java similarity index 86% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/properties/OtlpExporterPropertiesTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtlpExporterPropertiesTest.java index 4146a76a090f..4d6ea10115ae 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/properties/OtlpExporterPropertiesTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/properties/OtlpExporterPropertiesTest.java @@ -3,16 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.properties; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; -import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringConfigProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import java.util.Arrays; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/DistroVersionResourceProviderTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/DistroVersionResourceProviderTest.java similarity index 91% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/DistroVersionResourceProviderTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/DistroVersionResourceProviderTest.java index 1454354fdbcf..e05fa73fc36c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/DistroVersionResourceProviderTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/DistroVersionResourceProviderTest.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.resources; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.resources; import static org.assertj.core.api.Assertions.assertThat; import com.google.common.collect.ImmutableMap; import io.opentelemetry.api.common.AttributeKey; -import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration; import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import org.junit.jupiter.api.DisplayName; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/SpringConfigPropertiesTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringConfigPropertiesTest.java similarity index 80% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/SpringConfigPropertiesTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringConfigPropertiesTest.java index f9488ea49955..44cc94df327b 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/SpringConfigPropertiesTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringConfigPropertiesTest.java @@ -3,16 +3,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.resources; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.resources; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; -import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringConfigProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtelResourceProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtlpExporterProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.PropagationProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.SpringConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import java.util.HashMap; import java.util.Map; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/SpringResourceProviderTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringResourceProviderTest.java similarity index 81% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/SpringResourceProviderTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringResourceProviderTest.java index c8187e6040db..001ebf398f5a 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/resources/SpringResourceProviderTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/resources/SpringResourceProviderTest.java @@ -3,14 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.resources; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.resources; -import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringConfigProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.SpringResourceProvider; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtelResourceProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtlpExporterProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.PropagationProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.SpringConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.testing.assertj.AttributesAssert; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderTest.java similarity index 97% rename from instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderTest.java index 9d1336b67ff6..818296833e76 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackAppenderTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging; import static org.assertj.core.api.Assertions.assertThat; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/resources/logback-test.xml b/instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackAppender/resources/logback-test.xml similarity index 100% rename from instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/resources/logback-test.xml rename to instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackAppender/resources/logback-test.xml diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackMissing/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackMissingTest.java b/instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackMissing/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackMissingTest.java similarity index 87% rename from instrumentation/spring/spring-boot-autoconfigure/src/testLogbackMissing/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackMissingTest.java rename to instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackMissing/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackMissingTest.java index 4afcc33f32aa..f4beb3e47205 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackMissing/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackMissingTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-2/src/testLogbackMissing/java/io/opentelemetry/instrumentation/spring/autoconfigure/v2/internal/instrumentation/logging/LogbackMissingTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging; +package io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.logging; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/build.gradle.kts b/instrumentation/spring/spring-boot-autoconfigure-3/build.gradle.kts index 17e54b614de3..0ec7f0aa4195 100644 --- a/instrumentation/spring/spring-boot-autoconfigure-3/build.gradle.kts +++ b/instrumentation/spring/spring-boot-autoconfigure-3/build.gradle.kts @@ -1,9 +1,9 @@ plugins { id("otel.library-instrumentation") + id("otel.japicmp-conventions") } -// Name the Spring Boot modules in accordance with https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration.custom-starter -base.archivesName.set("opentelemetry-spring-boot-3") +base.archivesName.set("opentelemetry-autoconfigure-spring-boot-3") group = "io.opentelemetry.instrumentation" otelJava { @@ -13,11 +13,13 @@ otelJava { dependencies { val springBootVersion = "3.2.4" library("org.springframework.boot:spring-boot-starter-web:$springBootVersion") - compileOnly(project(":instrumentation:spring:spring-boot-autoconfigure")) + implementation(project(":instrumentation:spring:spring-boot-autoconfigure-2")) implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") implementation(project(":instrumentation:spring:spring-web:spring-web-3.1:library")) + implementation(project(":instrumentation:spring:spring-webmvc:spring-webmvc-6.0:library")) + compileOnly("jakarta.servlet:jakarta.servlet-api:5.0.0") - testImplementation(project(":instrumentation:spring:spring-boot-autoconfigure")) + testImplementation(project(":instrumentation:spring:spring-boot-autoconfigure-2")) testLibrary("org.springframework.boot:spring-boot-starter-test:$springBootVersion") { exclude("org.junit.vintage", "junit-vintage-engine") } diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/gradle.properties b/instrumentation/spring/spring-boot-autoconfigure-3/gradle.properties new file mode 100644 index 000000000000..45d64bec279d --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-3/gradle.properties @@ -0,0 +1 @@ +otel.stable=true diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/annotations/OpenTelemetryAnnotationsRuntimeHints.java b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/annotations/OpenTelemetryAnnotationsRuntimeHints.java new file mode 100644 index 000000000000..a3b48085646b --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/annotations/OpenTelemetryAnnotationsRuntimeHints.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.annotations; + +import org.springframework.aot.hint.MemberCategory; +import org.springframework.aot.hint.RuntimeHints; +import org.springframework.aot.hint.RuntimeHintsRegistrar; +import org.springframework.aot.hint.TypeReference; + +class OpenTelemetryAnnotationsRuntimeHints implements RuntimeHintsRegistrar { + + @Override + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + hints + .reflection() + .registerType( + TypeReference.of( + "io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.annotations.InstrumentationWithSpanAspect"), + hint -> hint.withMembers(MemberCategory.INVOKE_PUBLIC_METHODS)); + } +} diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientBeanPostProcessor.java similarity index 87% rename from instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientBeanPostProcessor.java rename to instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientBeanPostProcessor.java index 469fdfadd741..fd448ad77980 100644 --- a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientBeanPostProcessor.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web; +package io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry; import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -15,7 +15,7 @@ import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.web.client.RestClient; -public final class RestClientBeanPostProcessor implements BeanPostProcessor { +final class RestClientBeanPostProcessor implements BeanPostProcessor { private final ObjectProvider openTelemetryProvider; private final ObjectProvider configPropertiesProvider; @@ -56,7 +56,7 @@ private static RestClient addRestClientInterceptorIfNotPresent( static ClientHttpRequestInterceptor getInterceptor( OpenTelemetry openTelemetry, ConfigProperties config) { - return InstrumentationConfigUtil.configureBuilder( + return InstrumentationConfigUtil.configureClientBuilder( config, SpringWebTelemetry.builder(openTelemetry), WebTelemetryUtil.getBuilderExtractor()) diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientInstrumentationAutoConfiguration.java similarity index 83% rename from instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientInstrumentationAutoConfiguration.java rename to instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientInstrumentationAutoConfiguration.java index f261dbcd2324..ef5fcca64b0f 100644 --- a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientInstrumentationAutoConfiguration.java @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web; +package io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; @@ -20,7 +20,10 @@ /** * Configures {@link RestClient} for tracing. * - *

Adds Open Telemetry instrumentation to {@link RestClient} beans after initialization + *

Adds Open Telemetry instrumentation to {@link RestClient} beans after initialization. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. */ @ConditionalOnEnabledInstrumentation(module = "spring-web") @ConditionalOnClass(RestClient.class) diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java new file mode 100644 index 000000000000..15ec1cf95d9b --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java @@ -0,0 +1,40 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.webmvc; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.ConditionalOnEnabledInstrumentation; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.InstrumentationConfigUtil; +import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry; +import io.opentelemetry.instrumentation.spring.webmvc.v6_0.internal.SpringMvcBuilderUtil; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import jakarta.servlet.Filter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.OncePerRequestFilter; +import org.springframework.web.servlet.DispatcherServlet; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +@ConditionalOnEnabledInstrumentation(module = "spring-webmvc") +@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class}) +@Configuration +@SuppressWarnings("OtelPrivateConstructorForUtilityClass") +public class SpringWebMvc6InstrumentationAutoConfiguration { + + @Bean + Filter otelWebMvcFilter(OpenTelemetry openTelemetry, ConfigProperties config) { + return InstrumentationConfigUtil.configureServerBuilder( + config, + SpringWebMvcTelemetry.builder(openTelemetry), + SpringMvcBuilderUtil.getBuilderExtractor()) + .build() + .createServletFilter(); + } +} diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring.factories b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 3aa46add58d1..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.RestClientInstrumentationAutoConfiguration diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring/aot.factories b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring/aot.factories new file mode 100644 index 000000000000..13207fe900de --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring/aot.factories @@ -0,0 +1,2 @@ +org.springframework.aot.hint.RuntimeHintsRegistrar=\ +io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.annotations.OpenTelemetryAnnotationsRuntimeHints diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 576dd0fab37a..18b469908e99 100644 --- a/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1,2 @@ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.RestClientInstrumentationAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.web.RestClientInstrumentationAutoConfiguration +io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.webmvc.SpringWebMvc6InstrumentationAutoConfiguration diff --git a/instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java similarity index 96% rename from instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java index 58237e0f8fd8..990ceb989028 100644 --- a/instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web; +package io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.web; import static org.assertj.core.api.Assertions.assertThat; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java similarity index 79% rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java rename to instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java index 4b37d5819b10..b50d1af4729c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure-3/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/v3/internal/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java @@ -3,13 +3,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc; +package io.opentelemetry.instrumentation.spring.autoconfigure.v3.internal.instrumentation.webmvc; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assumptions.assumeTrue; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import jakarta.servlet.Filter; +import java.util.Collections; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; @@ -20,6 +23,9 @@ class SpringWebMvcInstrumentation6AutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) + .withBean( + ConfigProperties.class, + () -> DefaultConfigProperties.createFromMap(Collections.emptyMap())) .withConfiguration( AutoConfigurations.of(SpringWebMvc6InstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EnableOpenTelemetry.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EnableOpenTelemetry.java deleted file mode 100644 index 8a5b2b95c9fa..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EnableOpenTelemetry.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -/** Auto-configures OpenTelemetry. Enables OpenTelemetry in Spring applications */ -@Configuration -@ComponentScan(basePackages = "io.opentelemetry.instrumentation.spring.autoconfigure") -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface EnableOpenTelemetry {} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java deleted file mode 100644 index a57d2ab79df5..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc; - -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry; -import javax.servlet.Filter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.filter.OncePerRequestFilter; -import org.springframework.web.servlet.DispatcherServlet; - -@ConditionalOnEnabledInstrumentation(module = "spring-webmvc") -@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class}) -@Configuration -@SuppressWarnings("OtelPrivateConstructorForUtilityClass") -public class SpringWebMvc5InstrumentationAutoConfiguration { - - @Bean - Filter otelWebMvcFilter(OpenTelemetry openTelemetry) { - return SpringWebMvcTelemetry.create(openTelemetry).createServletFilter(); - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java deleted file mode 100644 index ca68d0e90d19..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc; - -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry; -import jakarta.servlet.Filter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.filter.OncePerRequestFilter; -import org.springframework.web.servlet.DispatcherServlet; - -@ConditionalOnEnabledInstrumentation(module = "spring-webmvc") -@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class}) -@Configuration -@SuppressWarnings("OtelPrivateConstructorForUtilityClass") -public class SpringWebMvc6InstrumentationAutoConfiguration { - - @Bean - Filter otelWebMvcFilter(OpenTelemetry openTelemetry) { - return SpringWebMvcTelemetry.create(openTelemetry).createServletFilter(); - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/InstrumentationConfigUtil.java deleted file mode 100644 index 0fec424a5e85..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/InstrumentationConfigUtil.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure.internal; - -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public class InstrumentationConfigUtil { - private InstrumentationConfigUtil() {} - - public static boolean isStatementSanitizationEnabled(ConfigProperties config, String key) { - return config.getBoolean( - key, config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true)); - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java deleted file mode 100644 index 692f7296b375..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; - -import com.google.errorprone.annotations.CanIgnoreReturnValue; -import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import java.util.function.Function; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public class InstrumentationConfigUtil { - private InstrumentationConfigUtil() {} - - @CanIgnoreReturnValue - public static T configureBuilder( - ConfigProperties config, - T builder, - Function> getBuilder) { - getBuilder.apply(builder).configure(new CommonConfig(new ConfigPropertiesBridge(config))); - return builder; - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 9ad2f41464f5..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,15 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.mongo.MongoClientInstrumentationAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc.JdbcInstrumentationAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.r2dbc.R2dbcInstrumentationAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration,\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc.SpringWebMvc5InstrumentationAutoConfiguration - -org.springframework.context.ApplicationListener=\ -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.LogbackAppenderApplicationListener diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 4d7a3f31c3b4..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,11 +0,0 @@ -io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.mongo.MongoClientInstrumentationAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.jdbc.JdbcInstrumentationAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.r2dbc.R2dbcInstrumentationAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration -io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc.SpringWebMvc6InstrumentationAutoConfiguration diff --git a/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java b/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java index 826bf0877497..4ece3165d53f 100644 --- a/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java +++ b/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java @@ -7,13 +7,12 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_QUERY_TEXT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; @@ -82,11 +81,10 @@ void testFindAll() { .isLessThanOrEqualTo(trace.getSpan(1).getEndEpochNanos())) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db"), - equalTo(DB_USER, "sa"), - equalTo(DB_STATEMENT, "SELECT CUSTOMER.* FROM CUSTOMER"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "CUSTOMER"), + equalTo(DB_NAMESPACE, "db"), + equalTo(DB_QUERY_TEXT, "SELECT CUSTOMER.* FROM CUSTOMER"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_COLLECTION_NAME, "CUSTOMER"), equalTo(DB_CONNECTION_STRING, "h2:mem://localhost"), equalTo(SERVER_ADDRESS, "localhost")))); } diff --git a/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/AbstractSpringJpaTest.java b/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/AbstractSpringJpaTest.java index 670999905aa5..b9ddf9756ce3 100644 --- a/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/AbstractSpringJpaTest.java +++ b/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/AbstractSpringJpaTest.java @@ -81,13 +81,12 @@ static void assertHibernate4Trace(TraceAssert trace, String repoClassName) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, val -> val.startsWith("insert ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "INSERT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer"))); + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("insert ")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "INSERT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer"))); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -104,26 +103,24 @@ static void assertHibernateTrace(TraceAssert trace, String repoClassName) { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("call next value for ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "CALL")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "CALL")), span -> span.hasName("INSERT test.JpaCustomer") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, val -> val.startsWith("insert ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "INSERT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer"))); + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("insert ")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "INSERT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer"))); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -153,14 +150,13 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")))); clearData(); repo.save(customer); @@ -191,28 +187,26 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")), span -> span.hasName("UPDATE test.JpaCustomer") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("update ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "UPDATE"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "UPDATE"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")))); clearData(); customer = findByLastName(repo, "Anonymous").get(0); @@ -231,14 +225,13 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")))); clearData(); repo.delete(customer); @@ -257,28 +250,26 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")), span -> span.hasName("DELETE test.JpaCustomer") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("delete ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "DELETE"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "DELETE"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")))); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -306,14 +297,13 @@ void testCustomRepositoryMethod() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")))); } @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation @@ -353,13 +343,12 @@ void testFailedRepositoryMethod() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(DbIncubatingAttributes.DB_NAME, "test"), - equalTo(DbIncubatingAttributes.DB_USER, "sa"), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "test"), equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, "hsqldb:mem:"), satisfies( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, val -> val.startsWith("select ")), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT"), - equalTo(DbIncubatingAttributes.DB_SQL_TABLE, "JpaCustomer")))); + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SELECT"), + equalTo(DbIncubatingAttributes.DB_COLLECTION_NAME, "JpaCustomer")))); } } diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/groovy/SpringIntegrationAndRabbitTest.groovy b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/groovy/SpringIntegrationAndRabbitTest.groovy index 33fc7906b3bf..6bcd93acdb0f 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/groovy/SpringIntegrationAndRabbitTest.groovy +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/groovy/SpringIntegrationAndRabbitTest.groovy @@ -61,7 +61,7 @@ class SpringIntegrationAndRabbitTest extends AgentInstrumentationSpecification i "$NetworkAttributes.NETWORK_TYPE" { it == "ipv4" || it == "ipv6" || it == null } "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "rabbitmq" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testTopic" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "publish" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "publish" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE" Long "$MessagingIncubatingAttributes.MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY" String } @@ -79,7 +79,7 @@ class SpringIntegrationAndRabbitTest extends AgentInstrumentationSpecification i "$NetworkAttributes.NETWORK_TYPE" { it == "ipv4" || it == "ipv6" || it == null } "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "rabbitmq" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testTopic" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE" Long "$MessagingIncubatingAttributes.MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY" String } @@ -93,7 +93,7 @@ class SpringIntegrationAndRabbitTest extends AgentInstrumentationSpecification i attributes { "$MessagingIncubatingAttributes.MESSAGING_SYSTEM" "rabbitmq" "$MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME" "testTopic" - "$MessagingIncubatingAttributes.MESSAGING_OPERATION" "process" + "$MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE" "process" "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID" String "$MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE" Long } diff --git a/instrumentation/spring/spring-jms/spring-jms-2.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/jms/v2_0/AbstractJmsTest.java b/instrumentation/spring/spring-jms/spring-jms-2.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/jms/v2_0/AbstractJmsTest.java index 6e679ecd2f3d..4d878d0bf8c3 100644 --- a/instrumentation/spring/spring-jms/spring-jms-2.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/jms/v2_0/AbstractJmsTest.java +++ b/instrumentation/spring/spring-jms/spring-jms-2.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/jms/v2_0/AbstractJmsTest.java @@ -40,7 +40,7 @@ protected List producerAttributeAssertions( asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "jms"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, val -> val.isInstanceOf(String.class)))); @@ -89,7 +89,7 @@ protected List consumerAttributeAssertions( asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "jms"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, operation))); + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, operation))); if (msgId != null) { attributeAssertions.add(equalTo(MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, msgId)); } else { diff --git a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsListenerTest.java b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsListenerTest.java index d0f50978b3f0..543a27c70d3d 100644 --- a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsListenerTest.java +++ b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsListenerTest.java @@ -50,7 +50,8 @@ void assertSpringJmsListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank))); @@ -69,7 +70,8 @@ void assertSpringJmsListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank)), @@ -83,7 +85,8 @@ void assertSpringJmsListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank)), @@ -136,7 +139,8 @@ void shouldCaptureHeaders(Class configClass) equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank), @@ -157,7 +161,8 @@ void shouldCaptureHeaders(Class configClass) equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank), @@ -176,7 +181,8 @@ void shouldCaptureHeaders(Class configClass) equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank), diff --git a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringListenerSuppressReceiveSpansTest.java b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringListenerSuppressReceiveSpansTest.java index 043cf148ab9b..44c80d9ce19d 100644 --- a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringListenerSuppressReceiveSpansTest.java +++ b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringListenerSuppressReceiveSpansTest.java @@ -30,7 +30,8 @@ void assertSpringJmsListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank)), @@ -44,7 +45,8 @@ void assertSpringJmsListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "spring-jms-listener"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID, AbstractStringAssert::isNotBlank)), diff --git a/instrumentation/spring/spring-kafka-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaTest.java b/instrumentation/spring/spring-kafka-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaTest.java index edf932d59af9..8a95bb35efda 100644 --- a/instrumentation/spring/spring-kafka-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaTest.java +++ b/instrumentation/spring/spring-kafka-2.7/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaTest.java @@ -77,7 +77,8 @@ void shouldCreateSpansForSingleRecordProcess() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID, AbstractStringAssert::isNotEmpty), @@ -102,7 +103,8 @@ void shouldCreateSpansForSingleRecordProcess() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testSingleListener"), @@ -121,7 +123,8 @@ void shouldCreateSpansForSingleRecordProcess() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative), @@ -167,7 +170,7 @@ void shouldHandleFailureInKafkaListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testSingleListener"), @@ -179,7 +182,7 @@ void shouldHandleFailureInKafkaListener() { Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative), @@ -212,7 +215,8 @@ void shouldHandleFailureInKafkaListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID, AbstractStringAssert::isNotEmpty), @@ -286,7 +290,8 @@ void shouldCreateSpansForBatchReceiveAndProcess() throws InterruptedException { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID, AbstractStringAssert::isNotEmpty), @@ -306,7 +311,8 @@ void shouldCreateSpansForBatchReceiveAndProcess() throws InterruptedException { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID, AbstractStringAssert::isNotEmpty), @@ -332,7 +338,8 @@ void shouldCreateSpansForBatchReceiveAndProcess() throws InterruptedException { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testBatchListener"), @@ -353,7 +360,8 @@ void shouldCreateSpansForBatchReceiveAndProcess() throws InterruptedException { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testBatchListener"), @@ -393,7 +401,8 @@ void shouldHandleFailureInKafkaBatchListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_DESTINATION_PARTITION_ID, AbstractStringAssert::isNotEmpty), @@ -451,7 +460,7 @@ private static void assertReceiveSpan(SpanDataAssert span) { .hasAttributesSatisfyingExactly( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "receive"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "receive"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testBatchListener"), satisfies( @@ -469,7 +478,7 @@ private static void assertProcessSpan( .hasAttributesSatisfyingExactly( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testBatchListener"), satisfies( diff --git a/instrumentation/spring/spring-kafka-2.7/testing/src/main/java/io/opentelemetry/testing/AbstractSpringKafkaNoReceiveTelemetryTest.java b/instrumentation/spring/spring-kafka-2.7/testing/src/main/java/io/opentelemetry/testing/AbstractSpringKafkaNoReceiveTelemetryTest.java index 53535037d566..ecc416cbdbb2 100644 --- a/instrumentation/spring/spring-kafka-2.7/testing/src/main/java/io/opentelemetry/testing/AbstractSpringKafkaNoReceiveTelemetryTest.java +++ b/instrumentation/spring/spring-kafka-2.7/testing/src/main/java/io/opentelemetry/testing/AbstractSpringKafkaNoReceiveTelemetryTest.java @@ -56,7 +56,8 @@ void shouldCreateSpansForSingleRecordProcess() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -80,7 +81,8 @@ void shouldCreateSpansForSingleRecordProcess() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative), @@ -120,7 +122,7 @@ void shouldHandleFailureInKafkaListener() { Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative), @@ -152,7 +154,8 @@ void shouldHandleFailureInKafkaListener() { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testSingleTopic"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -216,7 +219,9 @@ void shouldCreateSpansForBatchReceiveAndProcess() throws InterruptedException { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -237,7 +242,9 @@ void shouldCreateSpansForBatchReceiveAndProcess() throws InterruptedException { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -270,7 +277,8 @@ void shouldCreateSpansForBatchReceiveAndProcess() throws InterruptedException { MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), equalTo( - MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testBatchListener"), @@ -302,7 +310,7 @@ void shouldHandleFailureInKafkaBatchListener() { Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), equalTo( MessagingIncubatingAttributes.MESSAGING_KAFKA_CONSUMER_GROUP, "testBatchListener"), satisfies( @@ -325,7 +333,9 @@ void shouldHandleFailureInKafkaBatchListener() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testBatchTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, + "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitMqTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitMqTest.java index 950ee620dbae..141c7c7dc5f0 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitMqTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitMqTest.java @@ -110,7 +110,7 @@ private static List getAssertions( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative))); if (operation != null) { - assertions.add(equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, operation)); + assertions.add(equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, operation)); } if (peerAddress != null) { assertions.add(equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4")); diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java index b13e8a67a2e8..99ee1a3f9273 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java @@ -5,17 +5,12 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client; -import static java.util.Collections.singletonList; - import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientPeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory; import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientHttpAttributesGetter; import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientTracingFilter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpClientInstrumenters; import java.util.List; -import java.util.function.Function; import org.springframework.web.reactive.function.client.ClientRequest; import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.ExchangeFilterFunction; @@ -23,20 +18,8 @@ public final class WebClientHelper { private static final Instrumenter instrumenter = - ClientInstrumenterFactory.create( - GlobalOpenTelemetry.get(), - builder -> - builder - .setCapturedRequestHeaders(AgentCommonConfig.get().getClientRequestHeaders()) - .setCapturedResponseHeaders(AgentCommonConfig.get().getClientResponseHeaders()) - .setKnownMethods(AgentCommonConfig.get().getKnownHttpRequestMethods()), - builder -> builder.setKnownMethods(AgentCommonConfig.get().getKnownHttpRequestMethods()), - Function.identity(), - singletonList( - HttpClientPeerServiceAttributesExtractor.create( - WebClientHttpAttributesGetter.INSTANCE, - AgentCommonConfig.get().getPeerServiceResolver())), - AgentCommonConfig.get().shouldEmitExperimentalHttpClientTelemetry()); + JavaagentHttpClientInstrumenters.create( + "io.opentelemetry.spring-webflux-5.0", WebClientHttpAttributesGetter.INSTANCE); public static void addFilter(List exchangeFilterFunctions) { for (ExchangeFilterFunction filterFunction : exchangeFilterFunctions) { diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java index a24930d01695..e8387880cd32 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java @@ -7,26 +7,16 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExperimentalMetrics; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor; -import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory; -import java.util.ArrayList; +import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.SpringWebfluxBuilderUtil; +import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientHttpAttributesGetter; import java.util.List; import java.util.Set; -import java.util.function.Consumer; import java.util.function.Function; import org.springframework.web.reactive.function.client.ClientRequest; import org.springframework.web.reactive.function.client.ClientResponse; @@ -36,38 +26,25 @@ public final class SpringWebfluxTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webflux-5.3"; - private final OpenTelemetry openTelemetry; + private final DefaultHttpClientInstrumenterBuilder clientBuilder; + private final DefaultHttpServerInstrumenterBuilder + serverBuilder; - private final List> - clientAdditionalExtractors = new ArrayList<>(); - private final List> - serverAdditionalExtractors = new ArrayList<>(); - - private final HttpServerAttributesExtractorBuilder - httpServerAttributesExtractorBuilder = - HttpServerAttributesExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE); - private final HttpSpanNameExtractorBuilder httpServerSpanNameExtractorBuilder = - HttpSpanNameExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE); - private final HttpServerRouteBuilder httpServerRouteBuilder = - HttpServerRoute.builder(WebfluxServerHttpAttributesGetter.INSTANCE); - - private Function< - SpanNameExtractor, ? extends SpanNameExtractor> - clientSpanNameExtractorTransformer = Function.identity(); - private Function< - SpanNameExtractor, - ? extends SpanNameExtractor> - serverSpanNameExtractorTransformer = Function.identity(); - - private Consumer> - clientExtractorConfigurer = builder -> {}; - private Consumer> clientSpanNameExtractorConfigurer = - builder -> {}; - private boolean emitExperimentalHttpClientTelemetry = false; - private boolean emitExperimentalHttpServerTelemetry = false; + static { + SpringWebfluxBuilderUtil.setClientBuilderExtractor( + SpringWebfluxTelemetryBuilder::getClientBuilder); + SpringWebfluxBuilderUtil.setServerBuilderExtractor( + SpringWebfluxTelemetryBuilder::getServerBuilder); + } SpringWebfluxTelemetryBuilder(OpenTelemetry openTelemetry) { - this.openTelemetry = openTelemetry; + clientBuilder = + new DefaultHttpClientInstrumenterBuilder<>( + INSTRUMENTATION_NAME, openTelemetry, WebClientHttpAttributesGetter.INSTANCE); + serverBuilder = + new DefaultHttpServerInstrumenterBuilder<>( + INSTRUMENTATION_NAME, openTelemetry, WebfluxServerHttpAttributesGetter.INSTANCE) + .setHeaderGetter(WebfluxTextMapGetter.INSTANCE); } /** @@ -77,7 +54,7 @@ public final class SpringWebfluxTelemetryBuilder { @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder addClientAttributesExtractor( AttributesExtractor attributesExtractor) { - clientAdditionalExtractors.add(attributesExtractor); + clientBuilder.addAttributeExtractor(attributesExtractor); return this; } @@ -89,9 +66,7 @@ public SpringWebfluxTelemetryBuilder addClientAttributesExtractor( @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder setCapturedClientRequestHeaders( List requestHeaders) { - clientExtractorConfigurer = - clientExtractorConfigurer.andThen( - builder -> builder.setCapturedRequestHeaders(requestHeaders)); + clientBuilder.setCapturedRequestHeaders(requestHeaders); return this; } @@ -103,9 +78,7 @@ public SpringWebfluxTelemetryBuilder setCapturedClientRequestHeaders( @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder setCapturedClientResponseHeaders( List responseHeaders) { - clientExtractorConfigurer = - clientExtractorConfigurer.andThen( - builder -> builder.setCapturedResponseHeaders(responseHeaders)); + clientBuilder.setCapturedResponseHeaders(responseHeaders); return this; } @@ -116,7 +89,7 @@ public SpringWebfluxTelemetryBuilder setCapturedClientResponseHeaders( @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder addServerAttributesExtractor( AttributesExtractor attributesExtractor) { - serverAdditionalExtractors.add(attributesExtractor); + serverBuilder.addAttributesExtractor(attributesExtractor); return this; } @@ -129,7 +102,7 @@ public SpringWebfluxTelemetryBuilder addServerAttributesExtractor( @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder setCapturedServerRequestHeaders( List requestHeaders) { - httpServerAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders); + serverBuilder.setCapturedRequestHeaders(requestHeaders); return this; } @@ -142,7 +115,7 @@ public SpringWebfluxTelemetryBuilder setCapturedServerRequestHeaders( @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder setCapturedServerResponseHeaders( List responseHeaders) { - httpServerAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders); + serverBuilder.setCapturedResponseHeaders(responseHeaders); return this; } @@ -162,13 +135,8 @@ public SpringWebfluxTelemetryBuilder setCapturedServerResponseHeaders( */ @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder setKnownMethods(Set knownMethods) { - clientExtractorConfigurer = - clientExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); - clientSpanNameExtractorConfigurer = - clientSpanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); - httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods); - httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods); - httpServerRouteBuilder.setKnownMethods(knownMethods); + clientBuilder.setKnownMethods(knownMethods); + serverBuilder.setKnownMethods(knownMethods); return this; } @@ -181,7 +149,7 @@ public SpringWebfluxTelemetryBuilder setKnownMethods(Set knownMethods) { @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpClientTelemetry( boolean emitExperimentalHttpClientTelemetry) { - this.emitExperimentalHttpClientTelemetry = emitExperimentalHttpClientTelemetry; + clientBuilder.setEmitExperimentalHttpClientMetrics(emitExperimentalHttpClientTelemetry); return this; } @@ -194,7 +162,7 @@ public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpClientTelemetry( @CanIgnoreReturnValue public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpServerTelemetry( boolean emitExperimentalHttpServerTelemetry) { - this.emitExperimentalHttpServerTelemetry = emitExperimentalHttpServerTelemetry; + serverBuilder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerTelemetry); return this; } @@ -203,7 +171,7 @@ public SpringWebfluxTelemetryBuilder setEmitExperimentalHttpServerTelemetry( public SpringWebfluxTelemetryBuilder setClientSpanNameExtractor( Function, ? extends SpanNameExtractor> clientSpanNameExtractor) { - this.clientSpanNameExtractorTransformer = clientSpanNameExtractor; + clientBuilder.setSpanNameExtractor(clientSpanNameExtractor); return this; } @@ -214,7 +182,7 @@ public SpringWebfluxTelemetryBuilder setServerSpanNameExtractor( SpanNameExtractor, ? extends SpanNameExtractor> serverSpanNameExtractor) { - this.serverSpanNameExtractorTransformer = serverSpanNameExtractor; + serverBuilder.setSpanNameExtractor(serverSpanNameExtractor); return this; } @@ -223,40 +191,18 @@ public SpringWebfluxTelemetryBuilder setServerSpanNameExtractor( * SpringWebfluxTelemetryBuilder}. */ public SpringWebfluxTelemetry build() { - Instrumenter clientInstrumenter = - ClientInstrumenterFactory.create( - openTelemetry, - clientExtractorConfigurer, - clientSpanNameExtractorConfigurer, - clientSpanNameExtractorTransformer, - clientAdditionalExtractors, - emitExperimentalHttpClientTelemetry); - - Instrumenter serverInstrumenter = - buildServerInstrumenter(); - return new SpringWebfluxTelemetry( - clientInstrumenter, serverInstrumenter, openTelemetry.getPropagators()); + clientBuilder.build(), + serverBuilder.build(), + clientBuilder.getOpenTelemetry().getPropagators()); } - private Instrumenter buildServerInstrumenter() { - WebfluxServerHttpAttributesGetter getter = WebfluxServerHttpAttributesGetter.INSTANCE; - SpanNameExtractor spanNameExtractor = - serverSpanNameExtractorTransformer.apply(httpServerSpanNameExtractorBuilder.build()); + private DefaultHttpClientInstrumenterBuilder getClientBuilder() { + return clientBuilder; + } - InstrumenterBuilder builder = - Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor) - .setSpanStatusExtractor(HttpSpanStatusExtractor.create(getter)) - .addAttributesExtractor(httpServerAttributesExtractorBuilder.build()) - .addAttributesExtractors(serverAdditionalExtractors) - .addContextCustomizer(httpServerRouteBuilder.build()) - .addOperationMetrics(HttpServerMetrics.get()); - if (emitExperimentalHttpServerTelemetry) { - builder - .addAttributesExtractor(HttpExperimentalAttributesExtractor.create(getter)) - .addOperationMetrics(HttpServerExperimentalMetrics.get()); - } - return builder.buildServerInstrumenter(WebfluxTextMapGetter.INSTANCE); + private DefaultHttpServerInstrumenterBuilder + getServerBuilder() { + return serverBuilder; } } diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java deleted file mode 100644 index bb8217539da3..000000000000 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.webflux.v5_3.internal; - -import static io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor.alwaysClient; - -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientExperimentalMetrics; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; -import org.springframework.web.reactive.function.client.ClientRequest; -import org.springframework.web.reactive.function.client.ClientResponse; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -// client builder is separate so that it can be used by javaagent instrumentation -// which supports 5.0, without triggering the server instrumentation which depends on webflux 5.3 -public final class ClientInstrumenterFactory { - - private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webflux-5.3"; - - public static Instrumenter create( - OpenTelemetry openTelemetry, - Consumer> - extractorConfigurer, - Consumer> spanNameExtractorConfigurer, - Function, ? extends SpanNameExtractor> - spanNameExtractorTransformer, - List> additionalExtractors, - boolean emitExperimentalHttpClientTelemetry) { - - WebClientHttpAttributesGetter httpAttributesGetter = WebClientHttpAttributesGetter.INSTANCE; - - HttpClientAttributesExtractorBuilder extractorBuilder = - HttpClientAttributesExtractor.builder(httpAttributesGetter); - extractorConfigurer.accept(extractorBuilder); - - HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = - HttpSpanNameExtractor.builder(httpAttributesGetter); - spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder); - SpanNameExtractor spanNameExtractor = - spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build()); - - InstrumenterBuilder clientBuilder = - Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor) - .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) - .addAttributesExtractor(extractorBuilder.build()) - .addAttributesExtractors(additionalExtractors) - .addOperationMetrics(HttpClientMetrics.get()); - - if (emitExperimentalHttpClientTelemetry) { - clientBuilder - .addAttributesExtractor(HttpExperimentalAttributesExtractor.create(httpAttributesGetter)) - .addOperationMetrics(HttpClientExperimentalMetrics.get()); - } - - // headers are injected elsewhere; ClientRequest is immutable - return clientBuilder.buildInstrumenter(alwaysClient()); - } - - private ClientInstrumenterFactory() {} -} diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/SpringWebfluxBuilderUtil.java b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/SpringWebfluxBuilderUtil.java new file mode 100644 index 000000000000..ec1d643b1d88 --- /dev/null +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/SpringWebfluxBuilderUtil.java @@ -0,0 +1,64 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.webflux.v5_3.internal; + +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; +import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxTelemetryBuilder; +import java.util.function.Function; +import org.springframework.web.reactive.function.client.ClientRequest; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.server.ServerWebExchange; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class SpringWebfluxBuilderUtil { + private SpringWebfluxBuilderUtil() {} + + // allows access to the private field for the spring starter + private static Function< + SpringWebfluxTelemetryBuilder, + DefaultHttpClientInstrumenterBuilder> + clientBuilderExtractor; + + // allows access to the private field for the spring starter + private static Function< + SpringWebfluxTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + serverBuilderExtractor; + + public static Function< + SpringWebfluxTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + getServerBuilderExtractor() { + return serverBuilderExtractor; + } + + public static void setServerBuilderExtractor( + Function< + SpringWebfluxTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + serverBuilderExtractor) { + SpringWebfluxBuilderUtil.serverBuilderExtractor = serverBuilderExtractor; + } + + public static Function< + SpringWebfluxTelemetryBuilder, + DefaultHttpClientInstrumenterBuilder> + getClientBuilderExtractor() { + return clientBuilderExtractor; + } + + public static void setClientBuilderExtractor( + Function< + SpringWebfluxTelemetryBuilder, + DefaultHttpClientInstrumenterBuilder> + clientBuilderExtractor) { + SpringWebfluxBuilderUtil.clientBuilderExtractor = clientBuilderExtractor; + } +} diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java b/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java index 67a3a000b3ae..588263aff6e6 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java @@ -7,21 +7,11 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExperimentalMetrics; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor; -import java.util.ArrayList; +import io.opentelemetry.instrumentation.spring.webmvc.v5_3.internal.SpringMvcBuilderUtil; import java.util.List; import java.util.Set; import java.util.function.Function; @@ -33,24 +23,18 @@ public final class SpringWebMvcTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webmvc-5.3"; - private final OpenTelemetry openTelemetry; - private final List> - additionalExtractors = new ArrayList<>(); - private final HttpServerAttributesExtractorBuilder - httpAttributesExtractorBuilder = - HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); - private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = - HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); - private final HttpServerRouteBuilder httpServerRouteBuilder = - HttpServerRoute.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); - private Function< - SpanNameExtractor, - ? extends SpanNameExtractor> - spanNameExtractorTransformer = Function.identity(); - private boolean emitExperimentalHttpServerMetrics = false; + private final DefaultHttpServerInstrumenterBuilder + builder; + + static { + SpringMvcBuilderUtil.setBuilderExtractor(SpringWebMvcTelemetryBuilder::getBuilder); + } SpringWebMvcTelemetryBuilder(OpenTelemetry openTelemetry) { - this.openTelemetry = openTelemetry; + builder = + new DefaultHttpServerInstrumenterBuilder<>( + INSTRUMENTATION_NAME, openTelemetry, SpringWebMvcHttpAttributesGetter.INSTANCE) + .setHeaderGetter(JavaxHttpServletRequestGetter.INSTANCE); } /** @@ -60,7 +44,7 @@ public final class SpringWebMvcTelemetryBuilder { @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder addAttributesExtractor( AttributesExtractor attributesExtractor) { - additionalExtractors.add(attributesExtractor); + builder.addAttributesExtractor(attributesExtractor); return this; } @@ -71,7 +55,7 @@ public SpringWebMvcTelemetryBuilder addAttributesExtractor( */ @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List requestHeaders) { - httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders); + builder.setCapturedRequestHeaders(requestHeaders); return this; } @@ -82,7 +66,7 @@ public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List reque */ @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setCapturedResponseHeaders(List responseHeaders) { - httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders); + builder.setCapturedResponseHeaders(responseHeaders); return this; } @@ -93,7 +77,7 @@ public SpringWebMvcTelemetryBuilder setSpanNameExtractor( SpanNameExtractor, ? extends SpanNameExtractor> spanNameExtractor) { - this.spanNameExtractorTransformer = spanNameExtractor; + builder.setSpanNameExtractor(spanNameExtractor); return this; } @@ -112,9 +96,7 @@ public SpringWebMvcTelemetryBuilder setSpanNameExtractor( */ @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setKnownMethods(Set knownMethods) { - httpAttributesExtractorBuilder.setKnownMethods(knownMethods); - httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); - httpServerRouteBuilder.setKnownMethods(knownMethods); + builder.setKnownMethods(knownMethods); return this; } @@ -127,7 +109,7 @@ public SpringWebMvcTelemetryBuilder setKnownMethods(Set knownMethods) { @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics( boolean emitExperimentalHttpServerMetrics) { - this.emitExperimentalHttpServerMetrics = emitExperimentalHttpServerMetrics; + builder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics); return this; } @@ -136,26 +118,11 @@ public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics( * SpringWebMvcTelemetryBuilder}. */ public SpringWebMvcTelemetry build() { - SpringWebMvcHttpAttributesGetter httpAttributesGetter = - SpringWebMvcHttpAttributesGetter.INSTANCE; - SpanNameExtractor spanNameExtractor = - spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build()); - - InstrumenterBuilder builder = - Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor) - .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) - .addAttributesExtractor(httpAttributesExtractorBuilder.build()) - .addAttributesExtractors(additionalExtractors) - .addContextCustomizer(httpServerRouteBuilder.build()) - .addOperationMetrics(HttpServerMetrics.get()); - if (emitExperimentalHttpServerMetrics) { - builder - .addAttributesExtractor(HttpExperimentalAttributesExtractor.create(httpAttributesGetter)) - .addOperationMetrics(HttpServerExperimentalMetrics.get()); - } + return new SpringWebMvcTelemetry(builder.build()); + } - return new SpringWebMvcTelemetry( - builder.buildServerInstrumenter(JavaxHttpServletRequestGetter.INSTANCE)); + public DefaultHttpServerInstrumenterBuilder + getBuilder() { + return builder; } } diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/internal/SpringMvcBuilderUtil.java b/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/internal/SpringMvcBuilderUtil.java new file mode 100644 index 000000000000..74ac99e33d8a --- /dev/null +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/internal/SpringMvcBuilderUtil.java @@ -0,0 +1,41 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.webmvc.v5_3.internal; + +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; +import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetryBuilder; +import java.util.function.Function; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class SpringMvcBuilderUtil { + private SpringMvcBuilderUtil() {} + + // allows access to the private field for the spring starter + private static Function< + SpringWebMvcTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + builderExtractor; + + public static Function< + SpringWebMvcTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + getBuilderExtractor() { + return builderExtractor; + } + + public static void setBuilderExtractor( + Function< + SpringWebMvcTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + builderExtractor) { + SpringMvcBuilderUtil.builderExtractor = builderExtractor; + } +} diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java index 9b3e3b9e4e48..7978664dd053 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java @@ -7,23 +7,13 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor; -import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExperimentalMetrics; +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder; -import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor; +import io.opentelemetry.instrumentation.spring.webmvc.v6_0.internal.SpringMvcBuilderUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.function.Function; @@ -32,25 +22,18 @@ public final class SpringWebMvcTelemetryBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webmvc-6.0"; + private final DefaultHttpServerInstrumenterBuilder + builder; - private final OpenTelemetry openTelemetry; - private final List> - additionalExtractors = new ArrayList<>(); - private final HttpServerAttributesExtractorBuilder - httpAttributesExtractorBuilder = - HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); - private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = - HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); - private final HttpServerRouteBuilder httpServerRouteBuilder = - HttpServerRoute.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); - private Function< - SpanNameExtractor, - ? extends SpanNameExtractor> - spanNameExtractorTransformer = Function.identity(); - private boolean emitExperimentalHttpServerMetrics = false; + static { + SpringMvcBuilderUtil.setBuilderExtractor(SpringWebMvcTelemetryBuilder::getBuilder); + } SpringWebMvcTelemetryBuilder(OpenTelemetry openTelemetry) { - this.openTelemetry = openTelemetry; + builder = + new DefaultHttpServerInstrumenterBuilder<>( + INSTRUMENTATION_NAME, openTelemetry, SpringWebMvcHttpAttributesGetter.INSTANCE) + .setHeaderGetter(JakartaHttpServletRequestGetter.INSTANCE); } /** @@ -60,7 +43,7 @@ public final class SpringWebMvcTelemetryBuilder { @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder addAttributesExtractor( AttributesExtractor attributesExtractor) { - additionalExtractors.add(attributesExtractor); + builder.addAttributesExtractor(attributesExtractor); return this; } @@ -71,7 +54,7 @@ public SpringWebMvcTelemetryBuilder addAttributesExtractor( */ @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List requestHeaders) { - httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders); + builder.setCapturedRequestHeaders(requestHeaders); return this; } @@ -82,7 +65,7 @@ public SpringWebMvcTelemetryBuilder setCapturedRequestHeaders(List reque */ @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setCapturedResponseHeaders(List responseHeaders) { - httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders); + builder.setCapturedResponseHeaders(responseHeaders); return this; } @@ -93,7 +76,7 @@ public SpringWebMvcTelemetryBuilder setSpanNameExtractor( SpanNameExtractor, ? extends SpanNameExtractor> spanNameExtractor) { - this.spanNameExtractorTransformer = spanNameExtractor; + builder.setSpanNameExtractor(spanNameExtractor); return this; } @@ -112,9 +95,7 @@ public SpringWebMvcTelemetryBuilder setSpanNameExtractor( */ @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setKnownMethods(Set knownMethods) { - httpAttributesExtractorBuilder.setKnownMethods(knownMethods); - httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); - httpServerRouteBuilder.setKnownMethods(knownMethods); + builder.setKnownMethods(knownMethods); return this; } @@ -127,7 +108,7 @@ public SpringWebMvcTelemetryBuilder setKnownMethods(Set knownMethods) { @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics( boolean emitExperimentalHttpServerMetrics) { - this.emitExperimentalHttpServerMetrics = emitExperimentalHttpServerMetrics; + builder.setEmitExperimentalHttpServerMetrics(emitExperimentalHttpServerMetrics); return this; } @@ -136,26 +117,11 @@ public SpringWebMvcTelemetryBuilder setEmitExperimentalHttpServerMetrics( * SpringWebMvcTelemetryBuilder}. */ public SpringWebMvcTelemetry build() { - SpringWebMvcHttpAttributesGetter httpAttributesGetter = - SpringWebMvcHttpAttributesGetter.INSTANCE; - SpanNameExtractor spanNameExtractor = - spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build()); - - InstrumenterBuilder builder = - Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor) - .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) - .addAttributesExtractor(httpAttributesExtractorBuilder.build()) - .addAttributesExtractors(additionalExtractors) - .addContextCustomizer(httpServerRouteBuilder.build()) - .addOperationMetrics(HttpServerMetrics.get()); - if (emitExperimentalHttpServerMetrics) { - builder - .addAttributesExtractor(HttpExperimentalAttributesExtractor.create(httpAttributesGetter)) - .addOperationMetrics(HttpServerExperimentalMetrics.get()); - } + return new SpringWebMvcTelemetry(builder.build()); + } - return new SpringWebMvcTelemetry( - builder.buildServerInstrumenter(JakartaHttpServletRequestGetter.INSTANCE)); + public DefaultHttpServerInstrumenterBuilder + getBuilder() { + return builder; } } diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/internal/SpringMvcBuilderUtil.java b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/internal/SpringMvcBuilderUtil.java new file mode 100644 index 000000000000..d60102acd19a --- /dev/null +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/internal/SpringMvcBuilderUtil.java @@ -0,0 +1,41 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.webmvc.v6_0.internal; + +import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; +import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetryBuilder; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.util.function.Function; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class SpringMvcBuilderUtil { + private SpringMvcBuilderUtil() {} + + // allows access to the private field for the spring starter + private static Function< + SpringWebMvcTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + builderExtractor; + + public static Function< + SpringWebMvcTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + getBuilderExtractor() { + return builderExtractor; + } + + public static void setBuilderExtractor( + Function< + SpringWebMvcTelemetryBuilder, + DefaultHttpServerInstrumenterBuilder> + builderExtractor) { + SpringMvcBuilderUtil.builderExtractor = builderExtractor; + } +} diff --git a/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts b/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts index 83bc9b8f7c0b..43427c5323d7 100644 --- a/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts +++ b/instrumentation/spring/starters/spring-boot-starter/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("otel.java-conventions") id("otel.publish-conventions") + id("otel.japicmp-conventions") } group = "io.opentelemetry.instrumentation" @@ -10,7 +11,7 @@ val springBootVersion = "2.6.15" dependencies { compileOnly("org.springframework.boot:spring-boot-starter:$springBootVersion") compileOnly("org.springframework.boot:spring-boot-starter-aop:$springBootVersion") - api(project(":instrumentation:spring:spring-boot-autoconfigure")) + api(project(":instrumentation:spring:spring-boot-autoconfigure-2")) api(project(":instrumentation:spring:spring-boot-autoconfigure-3")) api(project(":instrumentation-annotations")) implementation(project(":instrumentation:resources:library")) diff --git a/instrumentation/spring/starters/spring-boot-starter/gradle.properties b/instrumentation/spring/starters/spring-boot-starter/gradle.properties new file mode 100644 index 000000000000..45d64bec279d --- /dev/null +++ b/instrumentation/spring/starters/spring-boot-starter/gradle.properties @@ -0,0 +1 @@ +otel.stable=true diff --git a/instrumentation/spring/starters/zipkin-spring-boot-starter/README.md b/instrumentation/spring/starters/zipkin-spring-boot-starter/README.md index 3302d231331a..a91e52ea4d5a 100644 --- a/instrumentation/spring/starters/zipkin-spring-boot-starter/README.md +++ b/instrumentation/spring/starters/zipkin-spring-boot-starter/README.md @@ -1,7 +1,7 @@ # OpenTelemetry Zipkin Exporter Starter -The OpenTelemetry Exporter Starter for Java is a starter package that includes packages required to enable tracing using OpenTelemetry. It also provides the dependency and corresponding auto-configuration. Check out [opentelemetry-spring-boot-autoconfigure](../../spring-boot-autoconfigure/README.md#features) for the list of supported libraries and features. +The OpenTelemetry Exporter Starter for Java is a starter package that includes packages required to enable tracing using OpenTelemetry. It also provides the dependency and corresponding auto-configuration. Check out [opentelemetry-spring-boot-autoconfigure](../../spring-boot-autoconfigure-2/README.md#features) for the list of supported libraries and features. -OpenTelemetry Zipkin Exporter Starter is a starter package that includes the opentelemetry-api, opentelemetry-sdk, opentelemetry-extension-annotations, opentelemetry-logging-exporter, opentelemetry-spring-boot-autoconfigurations and spring framework starters required to setup distributed tracing. It also provides the [opentelemetry-exporters-zipkin](https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/zipkin) artifact and corresponding exporter auto-configuration. Check out [opentelemetry-spring-boot-autoconfigure](../../spring-boot-autoconfigure/README.md#features) for the list of supported libraries and features. +OpenTelemetry Zipkin Exporter Starter is a starter package that includes the opentelemetry-api, opentelemetry-sdk, opentelemetry-extension-annotations, opentelemetry-logging-exporter, opentelemetry-spring-boot-autoconfigurations and spring framework starters required to setup distributed tracing. It also provides the [opentelemetry-exporters-zipkin](https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/zipkin) artifact and corresponding exporter auto-configuration. Check out [opentelemetry-spring-boot-autoconfigure](../../spring-boot-autoconfigure-2/README.md#features) for the list of supported libraries and features. Documentation for the OpenTelemetry Zipkin Exporter Starter can be found [here](https://opentelemetry.io/docs/zero-code/java/spring-boot/#zipkin-starter). diff --git a/instrumentation/spymemcached-2.12/javaagent/src/test/groovy/SpymemcachedTest.groovy b/instrumentation/spymemcached-2.12/javaagent/src/test/groovy/SpymemcachedTest.groovy index fed320ec30b2..5b72b5653eca 100644 --- a/instrumentation/spymemcached-2.12/javaagent/src/test/groovy/SpymemcachedTest.groovy +++ b/instrumentation/spymemcached-2.12/javaagent/src/test/groovy/SpymemcachedTest.groovy @@ -623,7 +623,7 @@ class SpymemcachedTest extends AgentInstrumentationSpecification { attributes { "$DbIncubatingAttributes.DB_SYSTEM" "memcached" - "$DbIncubatingAttributes.DB_OPERATION" operation + "$DbIncubatingAttributes.DB_OPERATION_NAME" operation if (error == "canceled") { "spymemcached.command.cancelled" true diff --git a/instrumentation/vertx/vertx-kafka-client-3.6/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/AbstractVertxKafkaTest.java b/instrumentation/vertx/vertx-kafka-client-3.6/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/AbstractVertxKafkaTest.java index 2fdacdf5f531..a462e4369cb3 100644 --- a/instrumentation/vertx/vertx-kafka-client-3.6/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/AbstractVertxKafkaTest.java +++ b/instrumentation/vertx/vertx-kafka-client-3.6/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/AbstractVertxKafkaTest.java @@ -202,7 +202,7 @@ protected static List sendAttributes( Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, record.topic()), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -234,7 +234,7 @@ private static List batchConsumerAttributes(String topic, St Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, topic), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, operation), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, operation), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("consumer")), @@ -255,7 +255,7 @@ protected static List processAttributes( Arrays.asList( equalTo(MessagingIncubatingAttributes.MESSAGING_SYSTEM, "kafka"), equalTo(MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, record.topic()), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("consumer")), diff --git a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesExtractor.java b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesExtractor.java index 5203ed1e96b8..5dfd8f8091c4 100644 --- a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesExtractor.java +++ b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesExtractor.java @@ -21,7 +21,9 @@ enum VertxRedisClientAttributesExtractor public void onStart( AttributesBuilder attributes, Context parentContext, VertxRedisClientRequest request) { internalSet( - attributes, DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX, request.getDatabaseIndex()); + attributes, + DbIncubatingAttributes.DB_NAMESPACE, + String.valueOf(request.getDatabaseIndex())); } @Override diff --git a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java index 69add7333329..06544ad24f6e 100644 --- a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java +++ b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java @@ -202,9 +202,9 @@ void commandWithNoArguments() throws Exception { private static AttributeAssertion[] redisSpanAttributes(String operation, String statement) { return new AttributeAssertion[] { equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, statement), - equalTo(DbIncubatingAttributes.DB_OPERATION, operation), - equalTo(DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX, 1), + equalTo(DbIncubatingAttributes.DB_QUERY_TEXT, statement), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, operation), + equalTo(DbIncubatingAttributes.DB_NAMESPACE, "1"), equalTo(ServerAttributes.SERVER_ADDRESS, host), equalTo(ServerAttributes.SERVER_PORT, port), equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), diff --git a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy index 7e776c9ab177..2ff8b865fe1c 100644 --- a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy +++ b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy @@ -99,12 +99,11 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf span(2) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "SELECT id, name, price, weight FROM products" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "products" } } } @@ -199,12 +198,11 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf(span(3)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id AS request$requestId, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "SELECT id AS request$requestId, name, price, weight FROM products" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "products" } } } diff --git a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy index 9490912c8f93..9bc757268ff4 100644 --- a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy +++ b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy @@ -99,12 +99,11 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf span(2) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "SELECT id, name, price, weight FROM products" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "products" } } } @@ -198,12 +197,11 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf(span(3)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" + "$DbIncubatingAttributes.DB_NAMESPACE" "test" "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id AS request$requestId, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "$DbIncubatingAttributes.DB_QUERY_TEXT" "SELECT id AS request$requestId, name, price, weight FROM products" + "$DbIncubatingAttributes.DB_OPERATION_NAME" "SELECT" + "$DbIncubatingAttributes.DB_COLLECTION_NAME" "products" } } } diff --git a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java index 17f318eb375f..89b27ce0aae0 100644 --- a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java +++ b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java @@ -12,11 +12,10 @@ import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; -import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_COLLECTION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAMESPACE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_QUERY_TEXT; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension; @@ -137,11 +136,10 @@ void testSimpleSelect() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(DB_NAMESPACE, DB), + equalTo(DB_QUERY_TEXT, "select * from test"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_COLLECTION_NAME, "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -193,9 +191,8 @@ void testInvalidQuery() throws Exception { EXCEPTION_STACKTRACE, val -> val.isInstanceOf(String.class)))) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "invalid"), + equalTo(DB_NAMESPACE, DB), + equalTo(DB_QUERY_TEXT, "invalid"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -227,11 +224,10 @@ private static void assertPreparedSelect() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test where id = $1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(DB_NAMESPACE, DB), + equalTo(DB_QUERY_TEXT, "select * from test where id = $1"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_COLLECTION_NAME, "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -257,11 +253,10 @@ void testBatch() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "insert into test values ($1, $2) returning *"), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(DB_NAMESPACE, DB), + equalTo(DB_QUERY_TEXT, "insert into test values ($1, $2) returning *"), + equalTo(DB_OPERATION_NAME, "INSERT"), + equalTo(DB_COLLECTION_NAME, "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -343,11 +338,10 @@ void testManyQueries() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(DB_NAMESPACE, DB), + equalTo(DB_QUERY_TEXT, "select * from test"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_COLLECTION_NAME, "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -408,11 +402,10 @@ void testConcurrency() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test where id = $1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(DB_NAMESPACE, DB), + equalTo(DB_QUERY_TEXT, "select * from test where id = $1"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_COLLECTION_NAME, "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java index 9d8bb78b8200..7f404090b679 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java @@ -49,6 +49,10 @@ public abstract class InstrumentationModule implements Ordered { * InstrumentationModule} must have a default constructor (for SPI), so they have to pass the * instrumentation names to the super class constructor. * + *

When enabling or disabling the instrumentation module configuration property that + * corresponds to the main instrumentation name is considered first, after that additional + * instrumentation names are considered in the order they are listed here. + * *

The instrumentation names should follow several rules: * *

    diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java index 3077b56536c0..66ac96401612 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java @@ -11,20 +11,14 @@ public final class AgentConfig { public static boolean isInstrumentationEnabled( ConfigProperties config, Iterable instrumentationNames, boolean defaultEnabled) { - // If default is enabled, we want to enable individually, - // if default is disabled, we want to disable individually. - boolean anyEnabled = defaultEnabled; for (String name : instrumentationNames) { String propertyName = "otel.instrumentation." + name + ".enabled"; - boolean enabled = config.getBoolean(propertyName, defaultEnabled); - - if (defaultEnabled) { - anyEnabled &= enabled; - } else { - anyEnabled |= enabled; + Boolean enabled = config.getBoolean(propertyName); + if (enabled != null) { + return enabled; } } - return anyEnabled; + return defaultEnabled; } public static boolean isDebugModeEnabled(ConfigProperties config) { diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java index e4b36be6c51a..ab428499269d 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java @@ -25,16 +25,14 @@ class AgentConfigTest { @ArgumentsSource(InstrumentationEnabledParams.class) void testIsInstrumentationEnabled( @SuppressWarnings("unused") String description, - boolean firstEnabled, - boolean secondEnabled, + Boolean firstEnabled, + Boolean secondEnabled, boolean defaultEnabled, boolean expected) { ConfigProperties config = mock(ConfigProperties.class); - when(config.getBoolean("otel.instrumentation.first.enabled", defaultEnabled)) - .thenReturn(firstEnabled); - when(config.getBoolean("otel.instrumentation.second.enabled", defaultEnabled)) - .thenReturn(secondEnabled); + when(config.getBoolean("otel.instrumentation.first.enabled")).thenReturn(firstEnabled); + when(config.getBoolean("otel.instrumentation.second.enabled")).thenReturn(secondEnabled); assertEquals( expected, @@ -49,13 +47,41 @@ public Stream provideArguments(ExtensionContext context) { return Stream.of( Arguments.of( "enabled by default, both instrumentations are off", false, false, true, false), - Arguments.of("enabled by default, one instrumentation is on", true, false, true, false), + Arguments.of("enabled by default, first instrumentation is on", true, null, true, true), + Arguments.of("enabled by default, second instrumentation is on", null, true, true, true), Arguments.of("enabled by default, both instrumentations are on", true, true, true, true), + Arguments.of( + "enabled by default, first instrumentation is off, second is on", + false, + true, + true, + false), + Arguments.of( + "enabled by default, first instrumentation is on, second is off", + true, + false, + true, + true), + Arguments.of("enabled by default", null, null, true, true), Arguments.of( "disabled by default, both instrumentations are off", false, false, false, false), - Arguments.of("disabled by default, one instrumentation is on", true, false, false, true), + Arguments.of("disabled by default, first instrumentation is on", true, null, false, true), + Arguments.of( + "disabled by default, second instrumentation is on", null, true, false, true), + Arguments.of("disabled by default, both instrumentation are on", true, true, false, true), + Arguments.of( + "disabled by default, first instrumentation is off, second is on", + false, + true, + false, + false), Arguments.of( - "disabled by default, both instrumentation are on", true, true, false, true)); + "disabled by default, first instrumentation is on, second is off", + true, + false, + false, + true), + Arguments.of("disabled by default", null, null, false, false)); } } } diff --git a/licenses/licenses.md b/licenses/licenses.md index 1ed39a0d3b56..c50bdf6f6419 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -1,7 +1,7 @@ # javaagent ## Dependency License Report -_2024-07-08 16:22:15 PDT_ +_2024-07-09 23:05:09 CST_ ## Apache License, Version 2.0 **1** **Group:** `com.blogspot.mydailyjava` **Name:** `weak-lock-free` **Version:** `0.18` @@ -159,11 +159,11 @@ _2024-07-08 16:22:15 PDT_ > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**36** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.25.0-alpha` +**36** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.26.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/semantic-conventions-java](https://github.com/open-telemetry/semantic-conventions-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**37** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv-incubating` **Version:** `1.25.0-alpha` +**37** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv-incubating` **Version:** `1.26.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/semantic-conventions-java](https://github.com/open-telemetry/semantic-conventions-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/settings.gradle.kts b/settings.gradle.kts index 85b8498cffa1..7cbfdaa083fc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -550,7 +550,7 @@ include(":instrumentation:servlet:servlet-javax-common:javaagent") include(":instrumentation:spark-2.3:javaagent") include(":instrumentation:spring:spring-batch-3.0:javaagent") include(":instrumentation:spring:spring-boot-actuator-autoconfigure-2.0:javaagent") -include(":instrumentation:spring:spring-boot-autoconfigure") +include(":instrumentation:spring:spring-boot-autoconfigure-2") include(":instrumentation:spring:spring-boot-autoconfigure-3") include(":instrumentation:spring:spring-boot-resources:javaagent") include(":instrumentation:spring:spring-boot-resources:javaagent-unit-tests") diff --git a/smoke-tests-otel-starter/spring-boot-2/build.gradle.kts b/smoke-tests-otel-starter/spring-boot-2/build.gradle.kts index 7483b76355d2..9fe628dd698b 100644 --- a/smoke-tests-otel-starter/spring-boot-2/build.gradle.kts +++ b/smoke-tests-otel-starter/spring-boot-2/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { implementation("org.apache.commons:commons-dbcp2") implementation("org.springframework.kafka:spring-kafka") implementation("org.springframework.boot:spring-boot-starter-data-mongodb") + implementation("org.springframework.boot:spring-boot-starter-aop") implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)) implementation(project(":smoke-tests-otel-starter:spring-boot-common")) diff --git a/smoke-tests-otel-starter/spring-boot-3.2/build.gradle.kts b/smoke-tests-otel-starter/spring-boot-3.2/build.gradle.kts index 502de91d64af..8b125966863b 100644 --- a/smoke-tests-otel-starter/spring-boot-3.2/build.gradle.kts +++ b/smoke-tests-otel-starter/spring-boot-3.2/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { implementation("org.apache.commons:commons-dbcp2") implementation("org.springframework.kafka:spring-kafka") implementation("org.springframework.boot:spring-boot-starter-data-mongodb") + implementation("org.springframework.boot:spring-boot-starter-aop") implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)) implementation(project(":smoke-tests-otel-starter:spring-boot-common")) diff --git a/smoke-tests-otel-starter/spring-boot-3.2/src/test/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTest.java b/smoke-tests-otel-starter/spring-boot-3.2/src/test/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTest.java index cfb46104aadd..f01bafb6e22e 100644 --- a/smoke-tests-otel-starter/spring-boot-3.2/src/test/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTest.java +++ b/smoke-tests-otel-starter/spring-boot-3.2/src/test/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTest.java @@ -51,7 +51,8 @@ void restClient() { private static void assertClient(TraceAssert traceAssert) { traceAssert.hasSpansSatisfyingExactly( - span -> AbstractOtelSpringStarterSmokeTest.assertClientSpan(span, "/ping"), - span -> span.hasKind(SpanKind.SERVER).hasAttribute(HttpAttributes.HTTP_ROUTE, "/ping")); + span -> HttpSpanDataAssert.create(span).assertClientGetRequest("/ping"), + span -> span.hasKind(SpanKind.SERVER).hasAttribute(HttpAttributes.HTTP_ROUTE, "/ping"), + span -> withSpanAssert(span)); } } diff --git a/smoke-tests-otel-starter/spring-boot-3/build.gradle.kts b/smoke-tests-otel-starter/spring-boot-3/build.gradle.kts index a9e7e556e4f8..78e01e6685e1 100644 --- a/smoke-tests-otel-starter/spring-boot-3/build.gradle.kts +++ b/smoke-tests-otel-starter/spring-boot-3/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { implementation("org.apache.commons:commons-dbcp2") implementation("org.springframework.kafka:spring-kafka") implementation("org.springframework.boot:spring-boot-starter-data-mongodb") + implementation("org.springframework.boot:spring-boot-starter-aop") implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)) implementation(project(":smoke-tests-otel-starter:spring-boot-common")) diff --git a/smoke-tests-otel-starter/spring-boot-common/build.gradle.kts b/smoke-tests-otel-starter/spring-boot-common/build.gradle.kts index e32d7771828e..1e4df320a25f 100644 --- a/smoke-tests-otel-starter/spring-boot-common/build.gradle.kts +++ b/smoke-tests-otel-starter/spring-boot-common/build.gradle.kts @@ -19,6 +19,7 @@ dependencies { compileOnly("org.testcontainers:junit-jupiter") compileOnly("org.testcontainers:kafka") compileOnly("org.testcontainers:mongodb") + compileOnly("org.springframework.boot:spring-boot-starter-aop") api(project(":smoke-tests-otel-starter:spring-smoke-testing")) diff --git a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmKafkaSpringStarterSmokeTest.java b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmKafkaSpringStarterSmokeTest.java index 8be2b86e9539..b99c537aee4c 100644 --- a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmKafkaSpringStarterSmokeTest.java +++ b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmKafkaSpringStarterSmokeTest.java @@ -6,8 +6,8 @@ package io.opentelemetry.spring.smoketest; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration; -import io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.kafka.KafkaInstrumentationAutoConfiguration; import java.time.Duration; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; diff --git a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmMongodbSpringStarterSmokeTest.java b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmMongodbSpringStarterSmokeTest.java index ac213a4b4669..3e667e4c9e3b 100644 --- a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmMongodbSpringStarterSmokeTest.java +++ b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractJvmMongodbSpringStarterSmokeTest.java @@ -7,8 +7,8 @@ import com.mongodb.client.MongoClient; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration; -import io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.mongo.MongoClientInstrumentationAutoConfiguration; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.OpenTelemetryAutoConfiguration; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.instrumentation.mongo.MongoClientInstrumentationAutoConfiguration; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; diff --git a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractKafkaSpringStarterSmokeTest.java b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractKafkaSpringStarterSmokeTest.java index 28a4d8980d9a..741f5cecc773 100644 --- a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractKafkaSpringStarterSmokeTest.java +++ b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractKafkaSpringStarterSmokeTest.java @@ -60,7 +60,8 @@ void shouldInstrumentProducerAndConsumer() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "publish"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "publish"), satisfies( MessagingIncubatingAttributes.MESSAGING_CLIENT_ID, stringAssert -> stringAssert.startsWith("producer")), @@ -81,7 +82,8 @@ void shouldInstrumentProducerAndConsumer() { equalTo( MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME, "testTopic"), - equalTo(MessagingIncubatingAttributes.MESSAGING_OPERATION, "process"), + equalTo( + MessagingIncubatingAttributes.MESSAGING_OPERATION_TYPE, "process"), satisfies( MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE, AbstractLongAssert::isNotNegative), diff --git a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelSpringStarterSmokeTest.java b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelSpringStarterSmokeTest.java index ec9af70ca329..7c18442aaaf8 100644 --- a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelSpringStarterSmokeTest.java +++ b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelSpringStarterSmokeTest.java @@ -12,29 +12,26 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.SpanKind; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringConfigProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtelResourceProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.OtlpExporterProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.PropagationProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.v2.internal.properties.SpringConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.resources.Resource; -import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.semconv.ClientAttributes; import io.opentelemetry.semconv.HttpAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; -import io.opentelemetry.semconv.incubating.HttpIncubatingAttributes; import io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes; import java.util.Collections; import java.util.List; import org.assertj.core.api.AbstractCharSequenceAssert; import org.assertj.core.api.AbstractIterableAssert; -import org.assertj.core.api.AbstractLongAssert; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; @@ -139,7 +136,7 @@ void shouldSendTelemetry() { spanDataAssert .hasKind(SpanKind.CLIENT) .hasAttribute( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "create table customer (id bigint not null, name varchar not null, primary key (id))")), traceAssert -> traceAssert.hasSpansSatisfyingExactly( @@ -155,8 +152,8 @@ void shouldSendTelemetry() { ServerAttributes.SERVER_PORT, integerAssert -> integerAssert.isNotZero())), serverSpan -> - serverSpan - .hasKind(SpanKind.SERVER) + HttpSpanDataAssert.create(serverSpan) + .assertServerGetRequest("/ping") .hasResourceSatisfying( r -> r.hasAttribute( @@ -175,7 +172,8 @@ void shouldSendTelemetry() { equalTo(ClientAttributes.CLIENT_ADDRESS, "127.0.0.1"), satisfies( ServerAttributes.SERVER_PORT, - integerAssert -> integerAssert.isNotZero())))); + integerAssert -> integerAssert.isNotZero())), + span -> withSpanAssert(span))); // Metric testing.waitAndAssertMetrics( @@ -221,7 +219,7 @@ void databaseQuery() { span -> span.hasKind(SpanKind.CLIENT) .hasAttribute( - DbIncubatingAttributes.DB_STATEMENT, + DbIncubatingAttributes.DB_QUERY_TEXT, "select name from customer where id = 1"))); } @@ -234,18 +232,9 @@ void restTemplate() { testing.waitAndAssertTraces( traceAssert -> traceAssert.hasSpansSatisfyingExactly( - span -> assertClientSpan(span, "/ping"), + span -> HttpSpanDataAssert.create(span).assertClientGetRequest("/ping"), span -> - span.hasKind(SpanKind.SERVER) - .hasAttribute(HttpAttributes.HTTP_ROUTE, "/ping"))); - } - - public static void assertClientSpan(SpanDataAssert span, String path) { - span.hasKind(SpanKind.CLIENT) - .hasAttributesSatisfying( - satisfies(UrlAttributes.URL_FULL, a -> a.endsWith(path)), - // this attribute is set by the experimental http instrumentation - satisfies( - HttpIncubatingAttributes.HTTP_RESPONSE_BODY_SIZE, AbstractLongAssert::isPositive)); + span.hasKind(SpanKind.SERVER).hasAttribute(HttpAttributes.HTTP_ROUTE, "/ping"), + span -> withSpanAssert(span))); } } diff --git a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTestController.java b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTestController.java index 891666797bf6..7d02c29d5fc1 100644 --- a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTestController.java +++ b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/OtelSpringStarterSmokeTestController.java @@ -20,15 +20,19 @@ public class OtelSpringStarterSmokeTestController { public static final String TEST_HISTOGRAM = "histogram-test-otel-spring-starter"; public static final String METER_SCOPE_NAME = "scope"; private final LongHistogram histogram; + private final SpringComponent component; - public OtelSpringStarterSmokeTestController(OpenTelemetry openTelemetry) { + public OtelSpringStarterSmokeTestController( + OpenTelemetry openTelemetry, SpringComponent springComponent) { Meter meter = openTelemetry.getMeter(METER_SCOPE_NAME); histogram = meter.histogramBuilder(TEST_HISTOGRAM).ofLongs().build(); + this.component = springComponent; } @GetMapping(PING) public String ping() { histogram.record(10); + component.withSpanMethod("from-controller"); return "pong"; } } diff --git a/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/SpringComponent.java b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/SpringComponent.java new file mode 100644 index 000000000000..072b39393b01 --- /dev/null +++ b/smoke-tests-otel-starter/spring-boot-common/src/main/java/io/opentelemetry/spring/smoketest/SpringComponent.java @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.spring.smoketest; + +import io.opentelemetry.instrumentation.annotations.SpanAttribute; +import io.opentelemetry.instrumentation.annotations.WithSpan; +import org.springframework.stereotype.Component; + +@Component +public class SpringComponent { + + @SuppressWarnings("MethodCanBeStatic") + @WithSpan + public void withSpanMethod(@SpanAttribute String paramName) {} +} diff --git a/smoke-tests-otel-starter/spring-boot-common/src/main/resources/application.yaml b/smoke-tests-otel-starter/spring-boot-common/src/main/resources/application.yaml index df0764948302..1995223b3841 100644 --- a/smoke-tests-otel-starter/spring-boot-common/src/main/resources/application.yaml +++ b/smoke-tests-otel-starter/spring-boot-common/src/main/resources/application.yaml @@ -11,6 +11,8 @@ otel: http: client: emit-experimental-telemetry: true + server: + emit-experimental-telemetry: true propagators: - b3 resource: diff --git a/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelReactiveSpringStarterSmokeTest.java b/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelReactiveSpringStarterSmokeTest.java index 7bc32e819fcc..79dc20534afa 100644 --- a/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelReactiveSpringStarterSmokeTest.java +++ b/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/java/io/opentelemetry/spring/smoketest/AbstractOtelReactiveSpringStarterSmokeTest.java @@ -8,8 +8,6 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; -import io.opentelemetry.semconv.HttpAttributes; -import io.opentelemetry.semconv.UrlAttributes; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -52,29 +50,20 @@ void webClientAndWebFluxAndR2dbc() { trace.hasSpansSatisfyingExactly(span -> span.hasName("CREATE TABLE testdb.player")), trace -> trace.hasSpansSatisfyingExactly( - span -> - span.hasKind(SpanKind.CLIENT) - .hasName("GET") - .hasAttributesSatisfying( - a -> assertThat(a.get(UrlAttributes.URL_FULL)).endsWith("/webflux")), - span -> - span.hasKind(SpanKind.SERVER) - .hasName("GET /webflux") - .hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "GET") - .hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L) - .hasAttribute(HttpAttributes.HTTP_ROUTE, "/webflux"), + span -> HttpSpanDataAssert.create(span).assertClientGetRequest("/webflux"), + span -> HttpSpanDataAssert.create(span).assertServerGetRequest("/webflux"), span -> span.hasKind(SpanKind.CLIENT) .satisfies( s -> assertThat(s.getName()) .isEqualToIgnoringCase("SELECT testdb.PLAYER")) - .hasAttribute(DbIncubatingAttributes.DB_NAME, "testdb") + .hasAttribute(DbIncubatingAttributes.DB_NAMESPACE, "testdb") // 2 is not replaced by ?, // otel.instrumentation.common.db-statement-sanitizer.enabled=false .hasAttributesSatisfying( a -> - assertThat(a.get(DbIncubatingAttributes.DB_STATEMENT)) + assertThat(a.get(DbIncubatingAttributes.DB_QUERY_TEXT)) .isEqualToIgnoringCase( "SELECT PLAYER.* FROM PLAYER WHERE PLAYER.ID = $1 LIMIT 2")) .hasAttribute(DbIncubatingAttributes.DB_SYSTEM, "h2"))); diff --git a/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/resources/application.yaml b/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/resources/application.yaml index f0568098a28b..26b301f52d79 100644 --- a/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/resources/application.yaml +++ b/smoke-tests-otel-starter/spring-boot-reactive-common/src/main/resources/application.yaml @@ -3,6 +3,11 @@ otel: common: db-statement-sanitizer: enabled: false + http: + client: + emit-experimental-telemetry: true + server: + emit-experimental-telemetry: true spring: r2dbc: diff --git a/smoke-tests-otel-starter/spring-smoke-testing/build.gradle.kts b/smoke-tests-otel-starter/spring-smoke-testing/build.gradle.kts index cc34ef0d91bb..a1ac6fc9a58e 100644 --- a/smoke-tests-otel-starter/spring-smoke-testing/build.gradle.kts +++ b/smoke-tests-otel-starter/spring-smoke-testing/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { compileOnly("org.springframework.boot:spring-boot-starter") compileOnly("org.springframework.boot:spring-boot-starter-test") api(project(":testing-common")) - api(project(":instrumentation:spring:spring-boot-autoconfigure")) + api(project(":instrumentation:spring:spring-boot-autoconfigure-2")) api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") } diff --git a/smoke-tests-otel-starter/spring-smoke-testing/src/main/java/io/opentelemetry/spring/smoketest/AbstractSpringStarterSmokeTest.java b/smoke-tests-otel-starter/spring-smoke-testing/src/main/java/io/opentelemetry/spring/smoketest/AbstractSpringStarterSmokeTest.java index d762c78de4d4..7ca5cab29615 100644 --- a/smoke-tests-otel-starter/spring-smoke-testing/src/main/java/io/opentelemetry/spring/smoketest/AbstractSpringStarterSmokeTest.java +++ b/smoke-tests-otel-starter/spring-smoke-testing/src/main/java/io/opentelemetry/spring/smoketest/AbstractSpringStarterSmokeTest.java @@ -8,6 +8,8 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.AfterEach; @@ -61,4 +63,9 @@ void checkSpringLogs(CapturedOutput output) { } }); } + + static SpanDataAssert withSpanAssert(SpanDataAssert span) { + return span.hasName("SpringComponent.withSpanMethod") + .hasAttribute(AttributeKey.stringKey("paramName"), "from-controller"); + } } diff --git a/smoke-tests-otel-starter/spring-smoke-testing/src/main/java/io/opentelemetry/spring/smoketest/HttpSpanDataAssert.java b/smoke-tests-otel-starter/spring-smoke-testing/src/main/java/io/opentelemetry/spring/smoketest/HttpSpanDataAssert.java new file mode 100644 index 000000000000..4f6018d46167 --- /dev/null +++ b/smoke-tests-otel-starter/spring-smoke-testing/src/main/java/io/opentelemetry/spring/smoketest/HttpSpanDataAssert.java @@ -0,0 +1,62 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.spring.smoketest; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.sdk.testing.assertj.ResourceAssert; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.semconv.HttpAttributes; +import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.incubating.HttpIncubatingAttributes; +import java.util.function.Consumer; +import org.assertj.core.api.AbstractLongAssert; + +public final class HttpSpanDataAssert { + + private final SpanDataAssert span; + + private HttpSpanDataAssert(SpanDataAssert span) { + this.span = span; + } + + public static HttpSpanDataAssert create(SpanDataAssert serverSpan) { + return new HttpSpanDataAssert(serverSpan); + } + + @CanIgnoreReturnValue + public HttpSpanDataAssert assertClientGetRequest(String path) { + span.hasKind(SpanKind.CLIENT) + .hasAttributesSatisfying( + satisfies(UrlAttributes.URL_FULL, a -> a.endsWith(path)), + // this attribute is set by the experimental http instrumentation + satisfies( + HttpIncubatingAttributes.HTTP_RESPONSE_BODY_SIZE, + AbstractLongAssert::isNotNegative)); + return this; + } + + @CanIgnoreReturnValue + public HttpSpanDataAssert assertServerGetRequest(String route) { + span.hasKind(SpanKind.SERVER) + .hasAttributesSatisfying( + equalTo(HttpAttributes.HTTP_REQUEST_METHOD, "GET"), + equalTo(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L), + equalTo(HttpAttributes.HTTP_ROUTE, route), + // this attribute is set by the experimental http instrumentation + satisfies( + HttpIncubatingAttributes.HTTP_RESPONSE_BODY_SIZE, + AbstractLongAssert::isNotNegative)); + return this; + } + + public SpanDataAssert hasResourceSatisfying(Consumer resource) { + return span.hasResourceSatisfying(resource); + } +} diff --git a/smoke-tests/build.gradle.kts b/smoke-tests/build.gradle.kts index c67b52bf7d98..9a42517d912e 100644 --- a/smoke-tests/build.gradle.kts +++ b/smoke-tests/build.gradle.kts @@ -15,7 +15,7 @@ otelJava { maxJavaVersionForTests.set(JavaVersion.VERSION_11) } -val dockerJavaVersion = "3.3.6" +val dockerJavaVersion = "3.4.0" dependencies { testCompileOnly("com.google.auto.value:auto-value-annotations") testAnnotationProcessor("com.google.auto.value:auto-value") @@ -23,7 +23,7 @@ dependencies { api("org.spockframework:spock-core") api(project(":testing-common")) - implementation(platform("io.grpc:grpc-bom:1.65.0")) + implementation(platform("io.grpc:grpc-bom:1.65.1")) implementation("org.slf4j:slf4j-api") implementation("io.opentelemetry:opentelemetry-api") implementation("io.opentelemetry.proto:opentelemetry-proto") diff --git a/smoke-tests/images/early-jdk8/Dockerfile b/smoke-tests/images/early-jdk8/Dockerfile index 02c04ee4ac7e..0476bce8d9ec 100644 --- a/smoke-tests/images/early-jdk8/Dockerfile +++ b/smoke-tests/images/early-jdk8/Dockerfile @@ -1,5 +1,5 @@ # https://github.com/zulu-openjdk/zulu-openjdk/blob/master/ubuntu/8u412-8.78/Dockerfile -FROM ubuntu:jammy +FROM ubuntu:noble ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8' diff --git a/smoke-tests/images/fake-backend/build.gradle.kts b/smoke-tests/images/fake-backend/build.gradle.kts index e9f778b5f45f..6b5e965d8cd3 100644 --- a/smoke-tests/images/fake-backend/build.gradle.kts +++ b/smoke-tests/images/fake-backend/build.gradle.kts @@ -12,7 +12,7 @@ plugins { } dependencies { - implementation("com.linecorp.armeria:armeria-grpc:1.29.1") + implementation("com.linecorp.armeria:armeria-grpc:1.29.2") implementation("io.opentelemetry.proto:opentelemetry-proto") runtimeOnly("org.slf4j:slf4j-simple") } diff --git a/smoke-tests/images/grpc/build.gradle.kts b/smoke-tests/images/grpc/build.gradle.kts index 0ca89e2414e1..a973ecb5e238 100644 --- a/smoke-tests/images/grpc/build.gradle.kts +++ b/smoke-tests/images/grpc/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } dependencies { - implementation(platform("io.grpc:grpc-bom:1.65.0")) + implementation(platform("io.grpc:grpc-bom:1.65.1")) implementation(platform("io.opentelemetry:opentelemetry-bom:1.0.0")) implementation(platform("io.opentelemetry:opentelemetry-bom-alpha:1.0.0-alpha")) implementation(platform("org.apache.logging.log4j:log4j-bom:2.23.1")) diff --git a/smoke-tests/images/quarkus/build.gradle.kts b/smoke-tests/images/quarkus/build.gradle.kts index 06983310e86b..b61074f9de95 100644 --- a/smoke-tests/images/quarkus/build.gradle.kts +++ b/smoke-tests/images/quarkus/build.gradle.kts @@ -12,11 +12,11 @@ plugins { id("otel.java-conventions") id("com.google.cloud.tools.jib") - id("io.quarkus") version "3.12.1" + id("io.quarkus") version "3.12.2" } dependencies { - implementation(enforcedPlatform("io.quarkus:quarkus-bom:3.12.1")) + implementation(enforcedPlatform("io.quarkus:quarkus-bom:3.12.2")) implementation("io.quarkus:quarkus-resteasy") } diff --git a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/CrashEarlyJdk8Test.groovy b/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/CrashEarlyJdk8Test.groovy index e1aefc5b128d..c6f79a2fea6d 100644 --- a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/CrashEarlyJdk8Test.groovy +++ b/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/CrashEarlyJdk8Test.groovy @@ -13,7 +13,6 @@ import org.testcontainers.containers.output.Slf4jLogConsumer import org.testcontainers.containers.wait.strategy.Wait import org.testcontainers.utility.DockerImageName import org.testcontainers.utility.MountableFile -import spock.lang.Ignore import spock.lang.IgnoreIf import spock.lang.Specification @@ -25,12 +24,6 @@ import static io.opentelemetry.smoketest.TestContainerManager.useWindowsContaine // java.lang.invoke.CallSite // This test verifies that such jvm does not crash with opentelemetry agent @IgnoreIf({ useWindowsContainers() }) -// com.github.dockerjava.api.exception.DockerClientException: Could not pull image: [DEPRECATION NOTICE] -// Docker Image Format v1 and Docker Image manifest version 2, schema 1 support is disabled by default -// and will be removed in an upcoming release. Suggest the author of docker.io/azul/zulu-openjdk:8u31 -// to upgrade the image to the OCI Format or Docker Image manifest v2, schema 2. More information -// at https://docs.docker.com/go/deprecated-image-specs/ -@Ignore class CrashEarlyJdk8Test extends Specification { private static final Logger logger = LoggerFactory.getLogger(CrashEarlyJdk8Test) @@ -40,7 +33,7 @@ class CrashEarlyJdk8Test extends Specification { def "test crash on early jdk8"() { setup: GenericContainer target = - new GenericContainer<>(DockerImageName.parse("azul/zulu-openjdk:8u31")) + new GenericContainer<>(DockerImageName.parse("ghcr.io/open-telemetry/opentelemetry-java-instrumentation/smoke-test-zulu-openjdk-8u31:20240709.9848833570")) .withStartupTimeout(Duration.ofMinutes(5)) .withLogConsumer(new Slf4jLogConsumer(logger)) .withCopyFileToContainer( diff --git a/testing/armeria-shaded-for-testing/build.gradle.kts b/testing/armeria-shaded-for-testing/build.gradle.kts index 9b157fdde048..832490f4d7de 100644 --- a/testing/armeria-shaded-for-testing/build.gradle.kts +++ b/testing/armeria-shaded-for-testing/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } dependencies { - implementation("com.linecorp.armeria:armeria-junit5:1.29.1") + implementation("com.linecorp.armeria:armeria-junit5:1.29.2") } tasks {