From b359519eadde0d4015e912de078fed478ea2f20e Mon Sep 17 00:00:00 2001 From: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:54:55 +0000 Subject: [PATCH 1/5] Update the OpenTelemetry SDK version to 1.42.0 --- dependencyManagement/build.gradle.kts | 2 +- examples/distro/build.gradle | 2 +- examples/extension/build.gradle | 2 +- licenses/licenses.md | 50 +++++++++++++-------------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 519458faf39f..6601d7294373 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -8,7 +8,7 @@ val dependencyVersions = hashMapOf() rootProject.extra["versions"] = dependencyVersions // this line is managed by .github/scripts/update-sdk-version.sh -val otelSdkVersion = "1.41.0" +val otelSdkVersion = "1.42.0" val otelContribVersion = "1.38.0-alpha" val otelSdkAlphaVersion = otelSdkVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1") diff --git a/examples/distro/build.gradle b/examples/distro/build.gradle index 4d57ca72b963..564d5e34e3ab 100644 --- a/examples/distro/build.gradle +++ b/examples/distro/build.gradle @@ -27,7 +27,7 @@ subprojects { ext { versions = [ // this line is managed by .github/scripts/update-sdk-version.sh - opentelemetrySdk : "1.41.0", + opentelemetrySdk : "1.42.0", // these lines are managed by .github/scripts/update-version.sh opentelemetryJavaagent : "2.8.0-SNAPSHOT", diff --git a/examples/extension/build.gradle b/examples/extension/build.gradle index 233155b5bd5e..4a12d794fe4a 100644 --- a/examples/extension/build.gradle +++ b/examples/extension/build.gradle @@ -23,7 +23,7 @@ version '1.0' ext { versions = [ // this line is managed by .github/scripts/update-sdk-version.sh - opentelemetrySdk : "1.41.0", + opentelemetrySdk : "1.42.0", // these lines are managed by .github/scripts/update-version.sh opentelemetryJavaagent : "2.8.0-SNAPSHOT", diff --git a/licenses/licenses.md b/licenses/licenses.md index 8d979cb97ee1..6857b6220516 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -59,91 +59,91 @@ > - **POM Project URL**: [https://github.com/square/okio/](https://github.com/square/okio/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**11** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.41.0` +**11** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**12** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-incubator` **Version:** `1.41.0-alpha` +**12** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-incubator` **Version:** `1.42.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**13** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.41.0` +**13** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**14** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.41.0` +**14** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**15** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging` **Version:** `1.41.0` +**15** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**16** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging-otlp` **Version:** `1.41.0` +**16** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging-otlp` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**17** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.41.0` +**17** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**18** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.41.0` +**18** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**19** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-prometheus` **Version:** `1.41.0-alpha` +**19** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-prometheus` **Version:** `1.42.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**20** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.41.0` +**20** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**21** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-zipkin` **Version:** `1.41.0` +**21** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-zipkin` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**22** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-kotlin` **Version:** `1.41.0` +**22** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-kotlin` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**23** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.41.0` +**23** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**24** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.41.0` +**24** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**25** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.41.0` +**25** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**26** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.41.0` +**26** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**27** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.41.0` +**27** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**28** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-incubator` **Version:** `1.41.0-alpha` +**28** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-incubator` **Version:** `1.42.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**29** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-jaeger-remote-sampler` **Version:** `1.41.0` +**29** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-jaeger-remote-sampler` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**30** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.41.0` +**30** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**31** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.41.0` +**31** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**32** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.41.0` +**32** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.42.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) @@ -221,15 +221,15 @@ > - **POM Project URL**: [http://www.jetbrains.org](http://www.jetbrains.org) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**50** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `2.0.10` +**50** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `2.0.20` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**51** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `2.0.10` +**51** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `2.0.20` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**52** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `2.0.10` +**52** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `2.0.20` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) From 3cb6f14199f71f2155e7419b891f5d160d0dc718 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 9 Sep 2024 16:13:09 +0300 Subject: [PATCH 2/5] LogRecordData.getBody() is deprecated --- .../instrumentation/opentelemetryapi/v1_27/LoggerTest.java | 1 + .../internal/instrumentation/logging/LogbackAppenderTest.java | 2 +- .../spring/smoketest/AbstractOtelSpringStarterSmokeTest.java | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java index 3149502caec1..6ff5e0977320 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java @@ -47,6 +47,7 @@ void setupLogger(TestInfo test) { .build(); } + @SuppressWarnings("deprecation") // LogRecordData.getBody() is deprecated @Test void logRecordBuilder() { SpanContext spanContext = diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/LogbackAppenderTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/LogbackAppenderTest.java index 61200b2c6465..86a366b14fce 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/LogbackAppenderTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/logging/LogbackAppenderTest.java @@ -81,7 +81,7 @@ void shouldInitializeAppender() { // be added a second time by LogbackAppenderApplicationListener logRecord -> { assertThat(logRecord.getInstrumentationScopeInfo().getName()).isEqualTo("test"); - assertThat(logRecord.getBody().asString()).contains("test log message"); + assertThat(logRecord.getBodyValue().asString()).contains("test log message"); Attributes attributes = logRecord.getAttributes(); // key1 and key2, the code attributes should not be present because they are enabled 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 4e802dd3bccb..60a9392293d7 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 @@ -187,7 +187,7 @@ void shouldSendTelemetry() { if (System.getProperty("org.graalvm.nativeimage.imagecode") == null) { // log records differ in native image mode due to different startup timing LogRecordData firstLog = exportedLogRecords.get(0); - assertThat(firstLog.getBody().asString()) + assertThat(firstLog.getBodyValue().asString()) .as("Should instrument logs") .startsWith("Starting ") .contains(this.getClass().getSimpleName()); From e412447d5b53b14686182884efd57a8c1847b241 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 9 Sep 2024 16:37:18 +0300 Subject: [PATCH 3/5] force older version of sdk for testing to get around LogRecordData.getBody() incompatibility --- .../opentelemetry-api-1.27/javaagent/build.gradle.kts | 2 ++ .../instrumentation/opentelemetryapi/v1_27/LoggerTest.java | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/build.gradle.kts b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/build.gradle.kts index bbbb75e6da99..311de19e02c5 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/build.gradle.kts +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/build.gradle.kts @@ -14,6 +14,8 @@ configurations.configureEach { if (name == "testRuntimeClasspath" || name == "testCompileClasspath") { resolutionStrategy { force("io.opentelemetry:opentelemetry-api:1.27.0") + force("io.opentelemetry:opentelemetry-sdk-logs:1.27.0") + force("io.opentelemetry:opentelemetry-sdk-testing:1.27.0") } } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java index 6ff5e0977320..3149502caec1 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/LoggerTest.java @@ -47,7 +47,6 @@ void setupLogger(TestInfo test) { .build(); } - @SuppressWarnings("deprecation") // LogRecordData.getBody() is deprecated @Test void logRecordBuilder() { SpanContext spanContext = From bafe1d786fa946d6b2bdb35896bad4942ca1c4d0 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 9 Sep 2024 20:13:35 +0300 Subject: [PATCH 4/5] noop instances now implement incubating api --- .../ApplicationDoubleGaugeBuilder.java | 2 +- .../ApplicationDoubleHistogramBuilder.java | 2 +- .../ApplicationLongCounterBuilder.java | 2 +- .../ApplicationLongUpDownCounterBuilder.java | 2 +- .../metrics/ApplicationMeter131.java | 30 +++---------------- .../v1_31/metrics/NoopTest.java | 13 +++++--- .../metrics/ApplicationMeter132Incubator.java | 7 +---- .../v1_32/incubator/metrics/NoopTest.java | 13 +++++--- .../metrics/ApplicationMeter137.java | 7 +---- .../metrics/BaseApplicationMeter137.java | 23 ++------------ .../v1_37/incubator/metrics/NoopTest.java | 13 +++++--- .../metrics/ApplicationMeter138Incubator.java | 7 +---- .../ApplicationDoubleGaugeBuilder138.java | 2 +- .../v1_38/incubator/metrics/NoopTest.java | 13 +++++--- 14 files changed, 51 insertions(+), 85 deletions(-) diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleGaugeBuilder.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleGaugeBuilder.java index 365a6bcb5a6f..4878492c0b2d 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleGaugeBuilder.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleGaugeBuilder.java @@ -16,7 +16,7 @@ public class ApplicationDoubleGaugeBuilder implements DoubleGaugeBuilder { private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder; - public ApplicationDoubleGaugeBuilder( + protected ApplicationDoubleGaugeBuilder( io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) { this.agentBuilder = agentBuilder; } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleHistogramBuilder.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleHistogramBuilder.java index f08ef581ebc1..01e534277b2f 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleHistogramBuilder.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleHistogramBuilder.java @@ -14,7 +14,7 @@ public class ApplicationDoubleHistogramBuilder implements DoubleHistogramBuilder private final io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder; - public ApplicationDoubleHistogramBuilder( + protected ApplicationDoubleHistogramBuilder( io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder) { this.agentBuilder = agentBuilder; } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongCounterBuilder.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongCounterBuilder.java index 4251c93c5396..71857a387eb0 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongCounterBuilder.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongCounterBuilder.java @@ -17,7 +17,7 @@ public class ApplicationLongCounterBuilder implements LongCounterBuilder { private final io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder; - public ApplicationLongCounterBuilder( + protected ApplicationLongCounterBuilder( io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) { this.agentBuilder = agentBuilder; } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongUpDownCounterBuilder.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongUpDownCounterBuilder.java index 5471c4cddf4e..03de81fd43f3 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongUpDownCounterBuilder.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongUpDownCounterBuilder.java @@ -17,7 +17,7 @@ public class ApplicationLongUpDownCounterBuilder implements LongUpDownCounterBui private final io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder; - public ApplicationLongUpDownCounterBuilder( + protected ApplicationLongUpDownCounterBuilder( io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder) { this.agentBuilder = agentBuilder; } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/incubator/metrics/ApplicationMeter131.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/incubator/metrics/ApplicationMeter131.java index 105b38a0aaf3..a82add2467dc 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/incubator/metrics/ApplicationMeter131.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/incubator/metrics/ApplicationMeter131.java @@ -9,10 +9,6 @@ import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder; import application.io.opentelemetry.api.metrics.LongCounterBuilder; import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeter115; public class ApplicationMeter131 extends ApplicationMeter115 { @@ -26,39 +22,21 @@ protected ApplicationMeter131(io.opentelemetry.api.metrics.Meter agentMeter) { @Override public LongCounterBuilder counterBuilder(String name) { - io.opentelemetry.api.metrics.LongCounterBuilder builder = agentMeter.counterBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) { - return new ApplicationLongCounterBuilder131(builder); - } - return new ApplicationLongCounterBuilder(builder); + return new ApplicationLongCounterBuilder131(agentMeter.counterBuilder(name)); } @Override public LongUpDownCounterBuilder upDownCounterBuilder(String name) { - io.opentelemetry.api.metrics.LongUpDownCounterBuilder builder = - agentMeter.upDownCounterBuilder(name); - if (builder - instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) { - return new ApplicationLongUpDownCounterBuilder131(builder); - } - return new ApplicationLongUpDownCounterBuilder(builder); + return new ApplicationLongUpDownCounterBuilder131(agentMeter.upDownCounterBuilder(name)); } @Override public DoubleHistogramBuilder histogramBuilder(String name) { - io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) { - return new ApplicationDoubleHistogramBuilder131(builder); - } - return new ApplicationDoubleHistogramBuilder(builder); + return new ApplicationDoubleHistogramBuilder131(agentMeter.histogramBuilder(name)); } @Override public DoubleGaugeBuilder gaugeBuilder(String name) { - io.opentelemetry.api.metrics.DoubleGaugeBuilder builder = agentMeter.gaugeBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) { - return new ApplicationDoubleGaugeBuilder131(builder); - } - return new ApplicationDoubleGaugeBuilder(builder); + return new ApplicationDoubleGaugeBuilder131(agentMeter.gaugeBuilder(name)); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/NoopTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/NoopTest.java index bf93cb95f539..26ed6ad0db14 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/NoopTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/NoopTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics; +import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.metrics.DoubleGaugeBuilder; @@ -29,15 +30,19 @@ void noopInstance() { Meter meter = testing.getOpenTelemetry().getMeter("test"); LongCounterBuilder counterBuilder = meter.counterBuilder("test"); - assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class); + assertThat(counterBuilder).isInstanceOf(ExtendedLongCounterBuilder.class); + ((ExtendedLongCounterBuilder) counterBuilder).setAttributesAdvice(emptyList()); LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test"); - assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class); + assertThat(upDownCounterBuilder).isInstanceOf(ExtendedLongUpDownCounterBuilder.class); + ((ExtendedLongUpDownCounterBuilder) upDownCounterBuilder).setAttributesAdvice(emptyList()); DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test"); - assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class); + assertThat(gaugeBuilder).isInstanceOf(ExtendedDoubleGaugeBuilder.class); + ((ExtendedDoubleGaugeBuilder) gaugeBuilder).setAttributesAdvice(emptyList()); DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test"); - assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class); + assertThat(histogramBuilder).isInstanceOf(ExtendedDoubleHistogramBuilder.class); + ((ExtendedDoubleHistogramBuilder) histogramBuilder).setAttributesAdvice(emptyList()); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationMeter132Incubator.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationMeter132Incubator.java index d8347dc3adec..422b5c9e4c5d 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationMeter132Incubator.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationMeter132Incubator.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics; import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.incubator.metrics.ApplicationMeter131; class ApplicationMeter132Incubator extends ApplicationMeter131 { @@ -20,10 +19,6 @@ class ApplicationMeter132Incubator extends ApplicationMeter131 { @Override public DoubleHistogramBuilder histogramBuilder(String name) { - io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) { - return new ApplicationDoubleHistogramBuilder132Incubator(builder); - } - return new ApplicationDoubleHistogramBuilder(builder); + return new ApplicationDoubleHistogramBuilder132Incubator(agentMeter.histogramBuilder(name)); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/NoopTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/NoopTest.java index 91a555add5a5..52e1208d4f2a 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/NoopTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/NoopTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics; +import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.metrics.DoubleGaugeBuilder; @@ -29,15 +30,19 @@ void noopInstance() { Meter meter = testing.getOpenTelemetry().getMeter("test"); LongCounterBuilder counterBuilder = meter.counterBuilder("test"); - assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class); + assertThat(counterBuilder).isInstanceOf(ExtendedLongCounterBuilder.class); + ((ExtendedLongCounterBuilder) counterBuilder).setAttributesAdvice(emptyList()); LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test"); - assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class); + assertThat(upDownCounterBuilder).isInstanceOf(ExtendedLongUpDownCounterBuilder.class); + ((ExtendedLongUpDownCounterBuilder) upDownCounterBuilder).setAttributesAdvice(emptyList()); DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test"); - assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class); + assertThat(gaugeBuilder).isInstanceOf(ExtendedDoubleGaugeBuilder.class); + ((ExtendedDoubleGaugeBuilder) gaugeBuilder).setAttributesAdvice(emptyList()); DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test"); - assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class); + assertThat(histogramBuilder).isInstanceOf(ExtendedDoubleHistogramBuilder.class); + ((ExtendedDoubleHistogramBuilder) histogramBuilder).setAttributesAdvice(emptyList()); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeter137.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeter137.java index 65860afca72a..6ed769ccf49b 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeter137.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeter137.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import application.io.opentelemetry.api.metrics.DoubleGaugeBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder; class ApplicationMeter137 extends BaseApplicationMeter137 { @@ -19,10 +18,6 @@ protected ApplicationMeter137(io.opentelemetry.api.metrics.Meter agentMeter) { @Override public DoubleGaugeBuilder gaugeBuilder(String name) { - io.opentelemetry.api.metrics.DoubleGaugeBuilder builder = agentMeter.gaugeBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) { - return new ApplicationDoubleGaugeBuilder137(builder); - } - return new ApplicationDoubleGaugeBuilder(builder); + return new ApplicationDoubleGaugeBuilder137(agentMeter.gaugeBuilder(name)); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/BaseApplicationMeter137.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/BaseApplicationMeter137.java index b3fd0b095142..3a0c0d3ff608 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/BaseApplicationMeter137.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/BaseApplicationMeter137.java @@ -8,9 +8,6 @@ import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder; import application.io.opentelemetry.api.metrics.LongCounterBuilder; import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeter115; // used by both 1.37 and 1.38 @@ -25,30 +22,16 @@ protected BaseApplicationMeter137(io.opentelemetry.api.metrics.Meter agentMeter) @Override public LongCounterBuilder counterBuilder(String name) { - io.opentelemetry.api.metrics.LongCounterBuilder builder = agentMeter.counterBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) { - return new ApplicationLongCounterBuilder137(builder); - } - return new ApplicationLongCounterBuilder(builder); + return new ApplicationLongCounterBuilder137(agentMeter.counterBuilder(name)); } @Override public LongUpDownCounterBuilder upDownCounterBuilder(String name) { - io.opentelemetry.api.metrics.LongUpDownCounterBuilder builder = - agentMeter.upDownCounterBuilder(name); - if (builder - instanceof io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) { - return new ApplicationLongUpDownCounterBuilder137(builder); - } - return new ApplicationLongUpDownCounterBuilder(builder); + return new ApplicationLongUpDownCounterBuilder137(agentMeter.upDownCounterBuilder(name)); } @Override public DoubleHistogramBuilder histogramBuilder(String name) { - io.opentelemetry.api.metrics.DoubleHistogramBuilder builder = agentMeter.histogramBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) { - return new ApplicationDoubleHistogramBuilder137(builder); - } - return new ApplicationDoubleHistogramBuilder(builder); + return new ApplicationDoubleHistogramBuilder137(agentMeter.histogramBuilder(name)); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/NoopTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/NoopTest.java index 47e92b4a862b..d30501e962c5 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/NoopTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/NoopTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; +import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder; @@ -29,15 +30,19 @@ void noopInstance() { Meter meter = testing.getOpenTelemetry().getMeter("test"); LongCounterBuilder counterBuilder = meter.counterBuilder("test"); - assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class); + assertThat(counterBuilder).isInstanceOf(ExtendedLongCounterBuilder.class); + ((ExtendedLongCounterBuilder) counterBuilder).setAttributesAdvice(emptyList()); LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test"); - assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class); + assertThat(upDownCounterBuilder).isInstanceOf(ExtendedLongUpDownCounterBuilder.class); + ((ExtendedLongUpDownCounterBuilder) upDownCounterBuilder).setAttributesAdvice(emptyList()); DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test"); - assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class); + assertThat(gaugeBuilder).isInstanceOf(ExtendedDoubleGaugeBuilder.class); + ((ExtendedDoubleGaugeBuilder) gaugeBuilder).setAttributesAdvice(emptyList()); DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test"); - assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class); + assertThat(histogramBuilder).isInstanceOf(ExtendedDoubleHistogramBuilder.class); + ((ExtendedDoubleHistogramBuilder) histogramBuilder).setAttributesAdvice(emptyList()); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/ApplicationMeter138Incubator.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/ApplicationMeter138Incubator.java index f28e9f5f0ebc..396fdf9785bb 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/ApplicationMeter138Incubator.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/ApplicationMeter138Incubator.java @@ -7,7 +7,6 @@ import application.io.opentelemetry.api.metrics.DoubleGaugeBuilder; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.BaseApplicationMeter137; -import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.metrics.ApplicationDoubleGaugeBuilder138; class ApplicationMeter138Incubator extends BaseApplicationMeter137 { @@ -20,10 +19,6 @@ class ApplicationMeter138Incubator extends BaseApplicationMeter137 { @Override public DoubleGaugeBuilder gaugeBuilder(String name) { - io.opentelemetry.api.metrics.DoubleGaugeBuilder builder = agentMeter.gaugeBuilder(name); - if (builder instanceof io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) { - return new ApplicationDoubleGaugeBuilder138Incubator(builder); - } - return new ApplicationDoubleGaugeBuilder138(builder); + return new ApplicationDoubleGaugeBuilder138Incubator(agentMeter.gaugeBuilder(name)); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/metrics/ApplicationDoubleGaugeBuilder138.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/metrics/ApplicationDoubleGaugeBuilder138.java index 58e0c17c6ad2..f5bd88c9d409 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/metrics/ApplicationDoubleGaugeBuilder138.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/metrics/ApplicationDoubleGaugeBuilder138.java @@ -17,7 +17,7 @@ public class ApplicationDoubleGaugeBuilder138 extends ApplicationDoubleGaugeBuil private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder; - public ApplicationDoubleGaugeBuilder138( + protected ApplicationDoubleGaugeBuilder138( io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) { super(agentBuilder); this.agentBuilder = agentBuilder; diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/NoopTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/NoopTest.java index 00406416976c..d7e5d7806b54 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/NoopTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.38/javaagent/src/noopTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_38/incubator/metrics/NoopTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_38.incubator.metrics; +import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder; @@ -29,15 +30,19 @@ void noopInstance() { Meter meter = testing.getOpenTelemetry().getMeter("test"); LongCounterBuilder counterBuilder = meter.counterBuilder("test"); - assertThat(counterBuilder).isNotInstanceOf(ExtendedLongCounterBuilder.class); + assertThat(counterBuilder).isInstanceOf(ExtendedLongCounterBuilder.class); + ((ExtendedLongCounterBuilder) counterBuilder).setAttributesAdvice(emptyList()); LongUpDownCounterBuilder upDownCounterBuilder = meter.upDownCounterBuilder("test"); - assertThat(upDownCounterBuilder).isNotInstanceOf(ExtendedLongUpDownCounterBuilder.class); + assertThat(upDownCounterBuilder).isInstanceOf(ExtendedLongUpDownCounterBuilder.class); + ((ExtendedLongUpDownCounterBuilder) upDownCounterBuilder).setAttributesAdvice(emptyList()); DoubleGaugeBuilder gaugeBuilder = meter.gaugeBuilder("test"); - assertThat(gaugeBuilder).isNotInstanceOf(ExtendedDoubleGaugeBuilder.class); + assertThat(gaugeBuilder).isInstanceOf(ExtendedDoubleGaugeBuilder.class); + ((ExtendedDoubleGaugeBuilder) gaugeBuilder).setAttributesAdvice(emptyList()); DoubleHistogramBuilder histogramBuilder = meter.histogramBuilder("test"); - assertThat(histogramBuilder).isNotInstanceOf(ExtendedDoubleHistogramBuilder.class); + assertThat(histogramBuilder).isInstanceOf(ExtendedDoubleHistogramBuilder.class); + ((ExtendedDoubleHistogramBuilder) histogramBuilder).setAttributesAdvice(emptyList()); } } From 00db2b4ac8d7440b7bfefbfefcf9817f92eb4784 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 10 Sep 2024 15:04:45 +0300 Subject: [PATCH 5/5] Bridge log AnyValue bodies --- .../log4j/appender/v2_17/Log4j2Test.java | 3 +- .../v1_27/ApplicationOpenTelemetry127.java | 27 +++- .../logs/ApplicationLogRecordBuilder.java | 5 +- .../v1_27/logs/ApplicationLogger.java | 4 +- .../v1_27/logs/ApplicationLoggerBuilder.java | 8 +- .../v1_27/logs/ApplicationLoggerFactory.java | 11 ++ .../logs/ApplicationLoggerFactory127.java | 16 ++ .../v1_27/logs/ApplicationLoggerProvider.java | 9 +- .../javaagent/build.gradle.kts | 26 ++++ ...OpenTelemetryApiInstrumentationModule.java | 32 ++++ .../v1_42/OpenTelemetryInstrumentation.java | 40 +++++ .../logs/ApplicationLogRecordBuilder142.java | 74 +++++++++ .../v1_42/logs/ApplicationLogger142.java | 24 +++ .../logs/ApplicationLoggerFactory142.java | 18 +++ .../opentelemetryapi/v1_42/LoggerTest.java | 142 ++++++++++++++++++ .../build.gradle.kts | 21 +++ settings.gradle.kts | 1 + .../common/AgentTestingExporterAccess.java | 85 +++++++++-- 18 files changed, 520 insertions(+), 26 deletions(-) create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory.java create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory127.java create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/build.gradle.kts create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryApiInstrumentationModule.java create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryInstrumentation.java create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogRecordBuilder142.java create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogger142.java create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLoggerFactory142.java create mode 100644 instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/LoggerTest.java diff --git a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/Log4j2Test.java b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/Log4j2Test.java index 50c0a2999c9e..1187c775ff3c 100644 --- a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/Log4j2Test.java +++ b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/Log4j2Test.java @@ -11,6 +11,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Value; import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; @@ -173,7 +174,7 @@ void testStringMapMessage() { testing.waitAndAssertLogRecords( logRecord -> logRecord - .hasBody("") + .hasBody((Value) null) .hasInstrumentationScope(InstrumentationScopeInfo.builder("abc").build()) .hasSeverity(Severity.INFO) .hasSeverityText("INFO") diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/ApplicationOpenTelemetry127.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/ApplicationOpenTelemetry127.java index 148e3e7d9000..51d4d1f49c55 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/ApplicationOpenTelemetry127.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/ApplicationOpenTelemetry127.java @@ -14,6 +14,8 @@ import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterProvider; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeterFactory115; +import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory; +import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory127; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerProvider; import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_4.trace.ApplicationTracerProvider14; import java.lang.reflect.InvocationTargetException; @@ -39,7 +41,8 @@ private ApplicationOpenTelemetry127() { new ApplicationContextPropagators(agentOpenTelemetry.getPropagators()); applicationMeterProvider = new ApplicationMeterProvider(getMeterFactory(), agentOpenTelemetry.getMeterProvider()); - applicationLoggerProvider = new ApplicationLoggerProvider(agentOpenTelemetry.getLogsBridge()); + applicationLoggerProvider = + new ApplicationLoggerProvider(getLoggerFactory(), agentOpenTelemetry.getLogsBridge()); } @Override @@ -105,9 +108,29 @@ private static ApplicationMeterFactory getMeterFactory() { } private static ApplicationMeterFactory getMeterFactory(String className) { + return getFactory(className, ApplicationMeterFactory.class); + } + + private static ApplicationLoggerFactory getLoggerFactory() { + // this class is defined in opentelemetry-api-1.42 + ApplicationLoggerFactory loggerFactory = + getLoggerFactory( + "io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLoggerFactory142"); + if (loggerFactory == null) { + loggerFactory = new ApplicationLoggerFactory127(); + } + + return loggerFactory; + } + + private static ApplicationLoggerFactory getLoggerFactory(String className) { + return getFactory(className, ApplicationLoggerFactory.class); + } + + private static T getFactory(String className, Class factoryClass) { try { Class clazz = Class.forName(className); - return (ApplicationMeterFactory) clazz.getConstructor().newInstance(); + return factoryClass.cast(clazz.getConstructor().newInstance()); } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogRecordBuilder.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogRecordBuilder.java index 1060663c7d9f..006927fdc605 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogRecordBuilder.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogRecordBuilder.java @@ -15,11 +15,12 @@ import java.time.Instant; import java.util.concurrent.TimeUnit; -class ApplicationLogRecordBuilder implements LogRecordBuilder { +public class ApplicationLogRecordBuilder implements LogRecordBuilder { private final io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder; - ApplicationLogRecordBuilder(io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder) { + protected ApplicationLogRecordBuilder( + io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder) { this.agentLogRecordBuilder = agentLogRecordBuilder; } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogger.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogger.java index 7bfe4898ff0f..d05568f2545e 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogger.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLogger.java @@ -8,11 +8,11 @@ import application.io.opentelemetry.api.logs.LogRecordBuilder; import application.io.opentelemetry.api.logs.Logger; -class ApplicationLogger implements Logger { +public class ApplicationLogger implements Logger { private final io.opentelemetry.api.logs.Logger agentLogger; - ApplicationLogger(io.opentelemetry.api.logs.Logger agentLogger) { + protected ApplicationLogger(io.opentelemetry.api.logs.Logger agentLogger) { this.agentLogger = agentLogger; } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerBuilder.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerBuilder.java index 995697f2aa4a..1636b4d96560 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerBuilder.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerBuilder.java @@ -11,9 +11,13 @@ final class ApplicationLoggerBuilder implements LoggerBuilder { + private final ApplicationLoggerFactory loggerFactory; private final io.opentelemetry.api.logs.LoggerBuilder agentBuilder; - ApplicationLoggerBuilder(io.opentelemetry.api.logs.LoggerBuilder agentBuilder) { + ApplicationLoggerBuilder( + ApplicationLoggerFactory loggerFactory, + io.opentelemetry.api.logs.LoggerBuilder agentBuilder) { + this.loggerFactory = loggerFactory; this.agentBuilder = agentBuilder; } @@ -33,6 +37,6 @@ public LoggerBuilder setInstrumentationVersion(String version) { @Override public Logger build() { - return new ApplicationLogger(agentBuilder.build()); + return loggerFactory.newLogger(agentBuilder.build()); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory.java new file mode 100644 index 000000000000..b66ee7e5722f --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory.java @@ -0,0 +1,11 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs; + +public interface ApplicationLoggerFactory { + + ApplicationLogger newLogger(io.opentelemetry.api.logs.Logger agentLogger); +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory127.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory127.java new file mode 100644 index 000000000000..386852755959 --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerFactory127.java @@ -0,0 +1,16 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs; + +import io.opentelemetry.api.logs.Logger; + +public class ApplicationLoggerFactory127 implements ApplicationLoggerFactory { + + @Override + public ApplicationLogger newLogger(Logger agentLogger) { + return new ApplicationLogger(agentLogger); + } +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerProvider.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerProvider.java index 192f53efbc95..875bf75daaa8 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerProvider.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/logs/ApplicationLoggerProvider.java @@ -12,14 +12,19 @@ @SuppressWarnings("UnnecessarilyFullyQualified") public class ApplicationLoggerProvider implements LoggerProvider { + private final ApplicationLoggerFactory loggerFactory; private final io.opentelemetry.api.logs.LoggerProvider agentLoggerProvider; - public ApplicationLoggerProvider(io.opentelemetry.api.logs.LoggerProvider agentLoggerProvider) { + public ApplicationLoggerProvider( + ApplicationLoggerFactory loggerFactory, + io.opentelemetry.api.logs.LoggerProvider agentLoggerProvider) { + this.loggerFactory = loggerFactory; this.agentLoggerProvider = agentLoggerProvider; } @Override public LoggerBuilder loggerBuilder(String instrumentationName) { - return new ApplicationLoggerBuilder(agentLoggerProvider.loggerBuilder(instrumentationName)); + return new ApplicationLoggerBuilder( + loggerFactory, agentLoggerProvider.loggerBuilder(instrumentationName)); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/build.gradle.kts b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/build.gradle.kts new file mode 100644 index 000000000000..1d96e7a2e605 --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + id("otel.javaagent-instrumentation") +} + +dependencies { + compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_42")) + compileOnly("io.opentelemetry:opentelemetry-api-incubator") + + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.10:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.15:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.27:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.31:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.37:javaagent")) + implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.38:javaagent")) +} + +configurations.configureEach { + if (name.endsWith("testRuntimeClasspath", true) || name.endsWith("testCompileClasspath", true)) { + resolutionStrategy { + force("io.opentelemetry:opentelemetry-api:1.42.0") + } + } +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryApiInstrumentationModule.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryApiInstrumentationModule.java new file mode 100644 index 000000000000..bd9fd79a8542 --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryApiInstrumentationModule.java @@ -0,0 +1,32 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42; + +import static java.util.Collections.singletonList; + +import com.google.auto.service.AutoService; +import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; +import java.util.List; + +@AutoService(InstrumentationModule.class) +public class OpenTelemetryApiInstrumentationModule extends InstrumentationModule + implements ExperimentalInstrumentationModule { + public OpenTelemetryApiInstrumentationModule() { + super("opentelemetry-api", "opentelemetry-api-1.42"); + } + + @Override + public List typeInstrumentations() { + return singletonList(new OpenTelemetryInstrumentation()); + } + + @Override + public String getModuleGroup() { + return "opentelemetry-api-bridge"; + } +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryInstrumentation.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryInstrumentation.java new file mode 100644 index 000000000000..da6c1901f92d --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/OpenTelemetryInstrumentation.java @@ -0,0 +1,40 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.none; + +import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLoggerFactory142; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.matcher.ElementMatcher; + +public class OpenTelemetryInstrumentation implements TypeInstrumentation { + + @Override + public ElementMatcher typeMatcher() { + return named("application.io.opentelemetry.api.GlobalOpenTelemetry"); + } + + @Override + public void transform(TypeTransformer transformer) { + transformer.applyAdviceToMethod( + none(), OpenTelemetryInstrumentation.class.getName() + "$InitAdvice"); + } + + @SuppressWarnings({"ReturnValueIgnored", "unused"}) + public static class InitAdvice { + @Advice.OnMethodEnter + public static void init() { + // the sole purpose of this advice is to ensure that ApplicationLoggerFactory142 is recognized + // as helper class and injected into class loader + ApplicationLoggerFactory142.class.getName(); + } + } +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogRecordBuilder142.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogRecordBuilder142.java new file mode 100644 index 000000000000..57735e01f41f --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogRecordBuilder142.java @@ -0,0 +1,74 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs; + +import application.io.opentelemetry.api.common.KeyValue; +import application.io.opentelemetry.api.common.Value; +import application.io.opentelemetry.api.logs.LogRecordBuilder; +import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogRecordBuilder; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +class ApplicationLogRecordBuilder142 extends ApplicationLogRecordBuilder + implements LogRecordBuilder { + + private final io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder; + + ApplicationLogRecordBuilder142(io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder) { + super(agentLogRecordBuilder); + this.agentLogRecordBuilder = agentLogRecordBuilder; + } + + @Override + public LogRecordBuilder setBody(Value body) { + agentLogRecordBuilder.setBody(convertValue(body)); + return this; + } + + @SuppressWarnings("unchecked") + private static io.opentelemetry.api.common.Value convertValue(Value value) { + if (value == null) { + return null; + } + + switch (value.getType()) { + case STRING: + return io.opentelemetry.api.common.Value.of((String) value.getValue()); + case BOOLEAN: + return io.opentelemetry.api.common.Value.of((Boolean) value.getValue()); + case LONG: + return io.opentelemetry.api.common.Value.of((Long) value.getValue()); + case DOUBLE: + return io.opentelemetry.api.common.Value.of((Double) value.getValue()); + case ARRAY: + List> values = (List>) value.getValue(); + List> convertedValues = new ArrayList<>(); + for (Value source : values) { + convertedValues.add(convertValue(source)); + } + return io.opentelemetry.api.common.Value.of(convertedValues); + case KEY_VALUE_LIST: + List keyValueList = (List) value.getValue(); + io.opentelemetry.api.common.KeyValue[] convertedKeyValueList = + new io.opentelemetry.api.common.KeyValue[keyValueList.size()]; + int i = 0; + for (KeyValue source : keyValueList) { + convertedKeyValueList[i++] = + io.opentelemetry.api.common.KeyValue.of( + source.getKey(), convertValue(source.getValue())); + } + return io.opentelemetry.api.common.Value.of(convertedKeyValueList); + case BYTES: + ByteBuffer byteBuffer = (ByteBuffer) value.getValue(); + byte[] bytes = new byte[byteBuffer.remaining()]; + byteBuffer.get(bytes); + break; + } + + throw new IllegalStateException("Unhandled value type: " + value.getType()); + } +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogger142.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogger142.java new file mode 100644 index 000000000000..e702b600217b --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogger142.java @@ -0,0 +1,24 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs; + +import application.io.opentelemetry.api.logs.LogRecordBuilder; +import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger; + +class ApplicationLogger142 extends ApplicationLogger { + + private final io.opentelemetry.api.logs.Logger agentLogger; + + ApplicationLogger142(io.opentelemetry.api.logs.Logger agentLogger) { + super(agentLogger); + this.agentLogger = agentLogger; + } + + @Override + public LogRecordBuilder logRecordBuilder() { + return new ApplicationLogRecordBuilder142(agentLogger.logRecordBuilder()); + } +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLoggerFactory142.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLoggerFactory142.java new file mode 100644 index 000000000000..4353833b8a42 --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLoggerFactory142.java @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs; + +import io.opentelemetry.api.logs.Logger; +import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger; +import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory; + +public class ApplicationLoggerFactory142 implements ApplicationLoggerFactory { + + @Override + public ApplicationLogger newLogger(Logger agentLogger) { + return new ApplicationLogger142(agentLogger); + } +} diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/LoggerTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/LoggerTest.java new file mode 100644 index 000000000000..912a2f85054a --- /dev/null +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/LoggerTest.java @@ -0,0 +1,142 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.KeyValue; +import io.opentelemetry.api.common.Value; +import io.opentelemetry.api.common.ValueType; +import io.opentelemetry.api.logs.Logger; +import io.opentelemetry.api.logs.Severity; +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.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.sdk.trace.IdGenerator; +import java.time.Instant; +import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class LoggerTest { + + @RegisterExtension + static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create(); + + private String instrumentationName; + private Logger logger; + + @BeforeEach + void setupLogger(TestInfo test) { + instrumentationName = "test-" + test.getDisplayName(); + logger = + GlobalOpenTelemetry.get() + .getLogsBridge() + .loggerBuilder(instrumentationName) + .setInstrumentationVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build(); + } + + @Test + void logRecordBuilder() { + SpanContext spanContext = + SpanContext.create( + IdGenerator.random().generateTraceId(), + IdGenerator.random().generateSpanId(), + TraceFlags.getDefault(), + TraceState.getDefault()); + + logger + .logRecordBuilder() + .setTimestamp(1, TimeUnit.SECONDS) + .setTimestamp(Instant.now()) + .setContext(Context.current().with(Span.wrap(spanContext))) + .setSeverity(Severity.DEBUG) + .setSeverityText("debug") + .setBody("body") + .setAttribute(AttributeKey.stringKey("key"), "value") + .setAllAttributes(Attributes.builder().put("key", "value").build()) + .emit(); + + await() + .untilAsserted( + () -> + assertThat(testing.logRecords()) + .satisfiesExactly( + logRecordData -> { + assertThat(logRecordData.getInstrumentationScopeInfo().getName()) + .isEqualTo(instrumentationName); + assertThat(logRecordData.getInstrumentationScopeInfo().getVersion()) + .isEqualTo("1.2.3"); + assertThat(logRecordData.getTimestampEpochNanos()).isGreaterThan(0); + assertThat(logRecordData.getSpanContext()).isEqualTo(spanContext); + assertThat(logRecordData.getSeverity()).isEqualTo(Severity.DEBUG); + assertThat(logRecordData.getSeverityText()).isEqualTo("debug"); + assertThat(logRecordData.getBodyValue().getType()) + .isEqualTo(ValueType.STRING); + assertThat(logRecordData.getBodyValue().getValue()).isEqualTo("body"); + assertThat(logRecordData.getAttributes()) + .isEqualTo(Attributes.builder().put("key", "value").build()); + })); + } + + private static Stream bodyValues() { + return Stream.of( + Arguments.of(Value.of("hello")), + Arguments.of(Value.of(42)), + Arguments.of(Value.of(42.42)), + Arguments.of(Value.of(true)), + Arguments.of(Value.of(new byte[] {4, 2})), + Arguments.of(Value.of(Value.of("hello"), Value.of(42))), + Arguments.of(Value.of(KeyValue.of("key", Value.of(42))))); + } + + @ParameterizedTest + @MethodSource("bodyValues") + void logBodyValue() { + Value value = Value.of(42); + logger.logRecordBuilder().setBody(value).emit(); + + await() + .untilAsserted( + () -> + assertThat(testing.logRecords()) + .satisfiesExactly( + logRecordData -> { + assertThat(logRecordData.getBodyValue().getType()) + .isEqualTo(value.getType()); + assertThat(logRecordData.getBodyValue().getValue()) + .isEqualTo(value.getValue()); + })); + } + + @Test + void logNullBody() { + Value value = null; + logger.logRecordBuilder().setBody(value).emit(); + + await() + .untilAsserted( + () -> + assertThat(testing.logRecords()) + .satisfiesExactly( + logRecordData -> assertThat(logRecordData.getBodyValue()).isNull())); + } +} diff --git a/opentelemetry-api-shaded-for-instrumenting/build.gradle.kts b/opentelemetry-api-shaded-for-instrumenting/build.gradle.kts index 1f188a09a255..a3849d97fb1d 100644 --- a/opentelemetry-api-shaded-for-instrumenting/build.gradle.kts +++ b/opentelemetry-api-shaded-for-instrumenting/build.gradle.kts @@ -58,6 +58,13 @@ val v1_38Deps by configurations.creating { exclude("io.opentelemetry", "opentelemetry-bom") exclude("io.opentelemetry", "opentelemetry-bom-alpha") } +val v1_42Deps by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + // exclude the bom added by dependencyManagement + exclude("io.opentelemetry", "opentelemetry-bom") + exclude("io.opentelemetry", "opentelemetry-bom-alpha") +} // configuration for publishing the shadowed artifact val v1_10 by configurations.creating { isCanBeConsumed = true @@ -87,6 +94,10 @@ val v1_38 by configurations.creating { isCanBeConsumed = true isCanBeResolved = false } +val v1_42 by configurations.creating { + isCanBeConsumed = true + isCanBeResolved = false +} dependencies { latestDeps("io.opentelemetry:opentelemetry-api") @@ -143,6 +154,11 @@ dependencies { strictly("1.38.0-alpha") } } + v1_42Deps("io.opentelemetry:$it") { + version { + strictly("1.42.0-alpha") + } + } } } @@ -186,6 +202,10 @@ tasks { configurations = listOf(v1_38Deps) archiveClassifier.set("v1_38") } + val v1_42Shadow by registering(ShadowJar::class) { + configurations = listOf(v1_42Deps) + archiveClassifier.set("v1_42") + } artifacts { add(v1_10.name, v1_10Shadow) @@ -195,5 +215,6 @@ tasks { add(v1_32.name, v1_32Shadow) add(v1_37.name, v1_37Shadow) add(v1_38.name, v1_38Shadow) + add(v1_42.name, v1_42Shadow) } } diff --git a/settings.gradle.kts b/settings.gradle.kts index b5a17c333e59..6d5ae2f1bd53 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -457,6 +457,7 @@ include(":instrumentation:opentelemetry-api:opentelemetry-api-1.31:javaagent") include(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent") include(":instrumentation:opentelemetry-api:opentelemetry-api-1.37:javaagent") include(":instrumentation:opentelemetry-api:opentelemetry-api-1.38:javaagent") +include(":instrumentation:opentelemetry-api:opentelemetry-api-1.42:javaagent") include(":instrumentation:opentelemetry-extension-annotations-1.0:javaagent") include(":instrumentation:opentelemetry-extension-kotlin-1.0:javaagent") include(":instrumentation:opentelemetry-instrumentation-annotations-1.16:javaagent") diff --git a/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java b/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java index 41b6b6fb9ec3..7bc9e8e61d97 100644 --- a/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java +++ b/testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java @@ -15,6 +15,7 @@ import com.google.protobuf.InvalidProtocolBufferException; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.common.Value; import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; @@ -29,6 +30,7 @@ import io.opentelemetry.proto.common.v1.ArrayValue; import io.opentelemetry.proto.common.v1.InstrumentationScope; import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.common.v1.KeyValueList; import io.opentelemetry.proto.logs.v1.LogRecord; import io.opentelemetry.proto.logs.v1.ResourceLogs; import io.opentelemetry.proto.logs.v1.ScopeLogs; @@ -91,6 +93,9 @@ public final class AgentTestingExporterAccess { private static final MethodHandle getLogExportRequests; private static final MethodHandle reset; private static final MethodHandle forceFlushCalled; + // opentelemetry-api-1.27:javaagent tests use an older version of opentelemetry-api where Value + // class is missing + private static final boolean canUseValue = classAvailable("io.opentelemetry.api.common.Value"); static { try { @@ -126,6 +131,15 @@ public final class AgentTestingExporterAccess { } } + private static boolean classAvailable(String className) { + try { + Class.forName(className); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + public static void reset() { try { reset.invokeExact(); @@ -402,21 +416,62 @@ private static LogRecordData createLogData( LogRecord logRecord, io.opentelemetry.sdk.resources.Resource resource, InstrumentationScopeInfo instrumentationScopeInfo) { - return TestLogRecordData.builder() - .setResource(resource) - .setInstrumentationScopeInfo(instrumentationScopeInfo) - .setTimestamp(logRecord.getTimeUnixNano(), TimeUnit.NANOSECONDS) - .setSpanContext( - SpanContext.create( - bytesToHex(logRecord.getTraceId().toByteArray()), - bytesToHex(logRecord.getSpanId().toByteArray()), - TraceFlags.getDefault(), - TraceState.getDefault())) - .setSeverity(fromProto(logRecord.getSeverityNumber())) - .setSeverityText(logRecord.getSeverityText()) - .setBody(logRecord.getBody().getStringValue()) - .setAttributes(fromProto(logRecord.getAttributesList())) - .build(); + TestLogRecordData.Builder builder = + TestLogRecordData.builder() + .setResource(resource) + .setInstrumentationScopeInfo(instrumentationScopeInfo) + .setTimestamp(logRecord.getTimeUnixNano(), TimeUnit.NANOSECONDS) + .setSpanContext( + SpanContext.create( + bytesToHex(logRecord.getTraceId().toByteArray()), + bytesToHex(logRecord.getSpanId().toByteArray()), + TraceFlags.getDefault(), + TraceState.getDefault())) + .setSeverity(fromProto(logRecord.getSeverityNumber())) + .setSeverityText(logRecord.getSeverityText()) + .setAttributes(fromProto(logRecord.getAttributesList())); + if (canUseValue) { + builder.setBodyValue(getBodyValue(logRecord.getBody())); + } else { + builder.setBody(logRecord.getBody().getStringValue()); + } + return builder.build(); + } + + private static Value getBodyValue(AnyValue value) { + switch (value.getValueCase()) { + case STRING_VALUE: + return Value.of(value.getStringValue()); + case BOOL_VALUE: + return Value.of(value.getBoolValue()); + case INT_VALUE: + return Value.of(value.getIntValue()); + case DOUBLE_VALUE: + return Value.of(value.getDoubleValue()); + case ARRAY_VALUE: + ArrayValue array = value.getArrayValue(); + List> convertedValues = new ArrayList<>(); + for (int i = 0; i < array.getValuesCount(); i++) { + convertedValues.add(getBodyValue(array.getValues(i))); + } + return Value.of(convertedValues); + case KVLIST_VALUE: + KeyValueList keyValueList = value.getKvlistValue(); + io.opentelemetry.api.common.KeyValue[] convertedKeyValueList = + new io.opentelemetry.api.common.KeyValue[keyValueList.getValuesCount()]; + for (int i = 0; i < keyValueList.getValuesCount(); i++) { + KeyValue keyValue = keyValueList.getValues(i); + convertedKeyValueList[i] = + io.opentelemetry.api.common.KeyValue.of( + keyValue.getKey(), getBodyValue(keyValue.getValue())); + } + return Value.of(convertedKeyValueList); + case BYTES_VALUE: + return Value.of(value.getBytesValue().toByteArray()); + case VALUE_NOT_SET: + return null; + } + throw new IllegalStateException("Unexpected attribute: " + value.getValueCase()); } private static boolean isDouble(List points) {