From 954d19541acf973a38aa02939a7184d20b03e843 Mon Sep 17 00:00:00 2001 From: Sean Li Date: Thu, 24 Sep 2026 14:38:23 -0700 Subject: [PATCH 1/5] Add smoke test for custom measurements for azure-monitor-opentelemetry-autoconfigure --- .../apps/TelemetryProcessors/build.gradle.kts | 3 +- .../smoketestapp/TestController.java | 26 ++++++ .../smoketest/CustomMeasurementsTest.java | 83 +++++++++++++++++++ .../smoketest/schemav2/MessageData.java | 13 +++ 4 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java diff --git a/smoke-tests/apps/TelemetryProcessors/build.gradle.kts b/smoke-tests/apps/TelemetryProcessors/build.gradle.kts index 27abf3e2f59..cfff3d97124 100644 --- a/smoke-tests/apps/TelemetryProcessors/build.gradle.kts +++ b/smoke-tests/apps/TelemetryProcessors/build.gradle.kts @@ -8,5 +8,6 @@ dependencies { } // this dependency is needed to make wildfly happy implementation("org.reactivestreams:reactive-streams:1.0.3") - implementation("io.opentelemetry:opentelemetry-api:1.31.0") + + implementation("io.opentelemetry:opentelemetry-api:1.59.0") } diff --git a/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java b/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java index de2ad9beec1..a1fd8884e72 100644 --- a/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java +++ b/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java @@ -5,8 +5,14 @@ import static io.opentelemetry.api.common.AttributeKey.doubleArrayKey; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Value; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.Span; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.slf4j.MDC; @@ -62,6 +68,26 @@ public String testNonStringRegexSpanAttributes() { return "Test non string regex type span attributes"; } + @GetMapping("/test-custom-measurements") + public String testCustomMeasurements() { + AttributeKey> key = AttributeKey.valueKey("microsoft.custom_measurements"); + Map> measurementValues = new HashMap<>(); + measurementValues.put("itemsProcessed", Value.of(42.0)); + measurementValues.put("queueDepth", Value.of(7.0)); + Value measurements = Value.of(measurementValues); + + Span.current().setAttribute(key, measurements); + GlobalOpenTelemetry.get() + .getLogsBridge() + .get("custom-measurements-test") + .logRecordBuilder() + .setBody("custom measurements") + .setSeverity(Severity.INFO) + .setAttribute(key, measurements) + .emit(); + return "Test custom measurements"; + } + @GetMapping("/mask-user-id-in-log-body") public String maskUserIdInLogBody() { logger.info("User account with userId 123456xx failed to login"); diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java new file mode 100644 index 00000000000..a112ee633d1 --- /dev/null +++ b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.microsoft.applicationinsights.smoketest; + +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_11; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_11_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_17; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_17_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_21; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_21_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_25; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_25_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.WILDFLY_13_JAVA_8; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.WILDFLY_13_JAVA_8_OPENJ9; +import static org.assertj.core.api.Assertions.assertThat; + +import com.microsoft.applicationinsights.smoketest.schemav2.MessageData; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +@UseAgent +abstract class CustomMeasurementsTest { + + @RegisterExtension static final SmokeTestExtension testing = SmokeTestExtension.create(); + + @Test + @TargetUri("/test-custom-measurements") + void customMeasurementsOnSpanAndLogRecord() throws Exception { + Telemetry telemetry = testing.getTelemetry(0); + assertThat(telemetry.rd.getMeasurements()) + .containsEntry("itemsProcessed", 42.0) + .containsEntry("queueDepth", 7.0); + assertThat(telemetry.rd.getProperties()).doesNotContainKey("microsoft.custom_measurements"); + + List logs = testing.mockedIngestion.getMessageDataInRequest(1); + MessageData log = logs.get(0); + assertThat(log.getMessage()).isEqualTo("custom measurements"); + assertThat(log.getMeasurements()) + .containsEntry("itemsProcessed", 42.0) + .containsEntry("queueDepth", 7.0); + assertThat(log.getProperties()).doesNotContainKey("microsoft.custom_measurements"); + } + + @Environment(TOMCAT_8_JAVA_8) + static class Tomcat8Java8Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_8_OPENJ9) + static class Tomcat8Java8OpenJ9Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_11) + static class Tomcat8Java11Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_11_OPENJ9) + static class Tomcat8Java11OpenJ9Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_17) + static class Tomcat8Java17Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_17_OPENJ9) + static class Tomcat8Java17OpenJ9Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_21) + static class Tomcat8Java21Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_21_OPENJ9) + static class Tomcat8Java21OpenJ9Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_25) + static class Tomcat8Java23Test extends CustomMeasurementsTest {} + + @Environment(TOMCAT_8_JAVA_25_OPENJ9) + static class Tomcat8Java23OpenJ9Test extends CustomMeasurementsTest {} + + @Environment(WILDFLY_13_JAVA_8) + static class Wildfly13Java8Test extends CustomMeasurementsTest {} + + @Environment(WILDFLY_13_JAVA_8_OPENJ9) + static class Wildfly13Java8OpenJ9Test extends CustomMeasurementsTest {} +} diff --git a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/schemav2/MessageData.java b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/schemav2/MessageData.java index 096c6cf7cc5..144e475d9e5 100644 --- a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/schemav2/MessageData.java +++ b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/schemav2/MessageData.java @@ -17,6 +17,9 @@ public class MessageData extends Domain { /** Backing field for property Properties. */ private ConcurrentMap properties; + /** Backing field for property Measurements. */ + private ConcurrentMap measurements; + /** Initializes a new instance of the MessageData class. */ public MessageData() {} @@ -48,6 +51,14 @@ public ConcurrentMap getProperties() { return this.properties; } + /** Gets the Measurements property. */ + public ConcurrentMap getMeasurements() { + if (this.measurements == null) { + this.measurements = new ConcurrentHashMap<>(); + } + return this.measurements; + } + @Override public String toString() { return "MessageData{" @@ -58,6 +69,8 @@ public String toString() { + severityLevel + ", properties=" + properties + + ", measurements=" + + measurements + '}'; } } From ab2dd2fb79aacb8283990de50d1feabb2baeb66c Mon Sep 17 00:00:00 2001 From: Sean Li Date: Thu, 24 Sep 2026 14:39:39 -0700 Subject: [PATCH 2/5] Test on locally built AutoConfigure package --- .github/workflows/build-common.yml | 2 +- inst/azure-monitor-opentelemetry-autoconfigure.properties | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 inst/azure-monitor-opentelemetry-autoconfigure.properties diff --git a/.github/workflows/build-common.yml b/.github/workflows/build-common.yml index 280dae0ef39..a509052be43 100644 --- a/.github/workflows/build-common.yml +++ b/.github/workflows/build-common.yml @@ -10,7 +10,7 @@ on: env: # set this to : to build and test with an unreleased # version of the azure-monitor-opentelemetry-autoconfigure dependency - AZURE_MONITOR_OPENTELEMETRY_AUTOCONFIGURE_SNAPSHOT: + AZURE_MONITOR_OPENTELEMETRY_AUTOCONFIGURE_SNAPSHOT: Azure/azure-sdk-for-java:main jobs: spotless: diff --git a/inst/azure-monitor-opentelemetry-autoconfigure.properties b/inst/azure-monitor-opentelemetry-autoconfigure.properties new file mode 100644 index 00000000000..91e77df856b --- /dev/null +++ b/inst/azure-monitor-opentelemetry-autoconfigure.properties @@ -0,0 +1,2 @@ +name=azure-monitor-opentelemetry-autoconfigure +version=1.7.0 \ No newline at end of file From aa49551d99170b0af8a7eec234cb68082ebed5f4 Mon Sep 17 00:00:00 2001 From: Sean Li Date: Thu, 24 Sep 2026 16:42:46 -0700 Subject: [PATCH 3/5] Update AutoConfigure package versions --- agent/agent-tooling/build.gradle.kts | 2 +- agent/agent-tooling/gradle.lockfile | 2 +- inst/azure-monitor-opentelemetry-autoconfigure.properties | 2 -- licenses/more-licenses.md | 2 +- smoke-tests/framework/build.gradle.kts | 2 +- 5 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 inst/azure-monitor-opentelemetry-autoconfigure.properties diff --git a/agent/agent-tooling/build.gradle.kts b/agent/agent-tooling/build.gradle.kts index 01b70cd0406..7c080efe8ec 100644 --- a/agent/agent-tooling/build.gradle.kts +++ b/agent/agent-tooling/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { implementation(project(":agent:agent-profiler:agent-diagnostics")) implementation(project(":etw:java")) - implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.7.0") + implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.8.0-beta.1") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-bootstrap") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling-java9") diff --git a/agent/agent-tooling/gradle.lockfile b/agent/agent-tooling/gradle.lockfile index f1f95ca0735..918d65c6707 100644 --- a/agent/agent-tooling/gradle.lockfile +++ b/agent/agent-tooling/gradle.lockfile @@ -10,7 +10,7 @@ com.azure:azure-core-http-netty:1.16.7=runtimeClasspath com.azure:azure-core:1.59.1=runtimeClasspath com.azure:azure-identity:1.18.4=runtimeClasspath com.azure:azure-json:1.5.1=runtimeClasspath -com.azure:azure-monitor-opentelemetry-autoconfigure:1.7.0=runtimeClasspath +com.azure:azure-monitor-opentelemetry-autoconfigure:1.8.0-beta.1=runtimeClasspath com.azure:azure-sdk-bom:1.3.8=runtimeClasspath com.azure:azure-storage-blob:12.35.0=runtimeClasspath com.azure:azure-storage-common:12.34.0=runtimeClasspath diff --git a/inst/azure-monitor-opentelemetry-autoconfigure.properties b/inst/azure-monitor-opentelemetry-autoconfigure.properties deleted file mode 100644 index 91e77df856b..00000000000 --- a/inst/azure-monitor-opentelemetry-autoconfigure.properties +++ /dev/null @@ -1,2 +0,0 @@ -name=azure-monitor-opentelemetry-autoconfigure -version=1.7.0 \ No newline at end of file diff --git a/licenses/more-licenses.md b/licenses/more-licenses.md index f9a59654c9a..4c24081412e 100644 --- a/licenses/more-licenses.md +++ b/licenses/more-licenses.md @@ -363,7 +363,7 @@ > - **POM Project URL**: [https://github.com/Azure/azure-sdk-for-java](https://github.com/Azure/azure-sdk-for-java) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**69** **Group:** `com.azure` **Name:** `azure-monitor-opentelemetry-autoconfigure` **Version:** `1.7.0` +**69** **Group:** `com.azure` **Name:** `azure-monitor-opentelemetry-autoconfigure` **Version:** `1.8.0-beta.1` > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) **70** **Group:** `com.azure` **Name:** `azure-storage-blob` **Version:** `12.35.0` diff --git a/smoke-tests/framework/build.gradle.kts b/smoke-tests/framework/build.gradle.kts index 8ad3a139a40..758c7ce6453 100644 --- a/smoke-tests/framework/build.gradle.kts +++ b/smoke-tests/framework/build.gradle.kts @@ -31,5 +31,5 @@ dependencies { implementation("org.assertj:assertj-core") implementation("com.azure:azure-json:1.5.1") - implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.7.0") + implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.8.0-beta.1") } From 22c65d297f26180e25dbecf20f027f7e64b4664f Mon Sep 17 00:00:00 2001 From: Sean Li Date: Thu, 24 Sep 2026 16:56:26 -0700 Subject: [PATCH 4/5] Add custom measurements agent smoke test - move custom measurements coverage into a dedicated executable JAR app - inject complex attributes through a test agent extension - verify request and log measurements in Breeze payloads --- settings.gradle.kts | 2 + .../TestExtension/build.gradle.kts | 27 +++++++ .../CustomMeasurementsCustomizer.java | 80 +++++++++++++++++++ ...re.spi.AutoConfigurationCustomizerProvider | 1 + .../apps/CustomMeasurements/build.gradle.kts | 9 +++ .../smoketestapp/SpringBootApp.java | 15 ++++ .../smoketestapp/TestController.java | 30 +++++++ .../smoketest/CustomMeasurementsTest.java | 75 +++++++++-------- .../smoketestapp/TestController.java | 26 ------ 9 files changed, 200 insertions(+), 65 deletions(-) create mode 100644 smoke-tests/apps/CustomMeasurements/TestExtension/build.gradle.kts create mode 100644 smoke-tests/apps/CustomMeasurements/TestExtension/src/main/java/com/microsoft/applicationinsights/smoketestextension/CustomMeasurementsCustomizer.java create mode 100644 smoke-tests/apps/CustomMeasurements/TestExtension/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider create mode 100644 smoke-tests/apps/CustomMeasurements/build.gradle.kts create mode 100644 smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/SpringBootApp.java create mode 100644 smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java rename smoke-tests/apps/{TelemetryProcessors => CustomMeasurements}/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java (50%) diff --git a/settings.gradle.kts b/settings.gradle.kts index ea67d10f977..a550acf1e8b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -78,6 +78,8 @@ hideFromDependabot(":smoke-tests:apps:CoreAndFilter2x") hideFromDependabot(":smoke-tests:apps:CoreAndFilter3x") hideFromDependabot(":smoke-tests:apps:CoreAndFilter3xUsingOld3xAgent") hideFromDependabot(":smoke-tests:apps:CustomDimensions") +hideFromDependabot(":smoke-tests:apps:CustomMeasurements:TestExtension") +hideFromDependabot(":smoke-tests:apps:CustomMeasurements") hideFromDependabot(":smoke-tests:apps:CustomInstrumentation") hideFromDependabot(":smoke-tests:apps:DetectUnexpectedOtelMetrics") hideFromDependabot(":smoke-tests:apps:Diagnostics") diff --git a/smoke-tests/apps/CustomMeasurements/TestExtension/build.gradle.kts b/smoke-tests/apps/CustomMeasurements/TestExtension/build.gradle.kts new file mode 100644 index 00000000000..ddd85bbe531 --- /dev/null +++ b/smoke-tests/apps/CustomMeasurements/TestExtension/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java +} + +dependencies { + compileOnly(platform(project(":dependencyManagement"))) + compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") + compileOnly("io.opentelemetry:opentelemetry-sdk") +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(21)) + } +} + +tasks.withType().configureEach { + with(options) { + release.set(8) + compilerArgs.add("-Werror") + compilerArgs.add("-Xlint:-options") + } +} + +tasks.jar { + archiveFileName.set("extension.jar") +} diff --git a/smoke-tests/apps/CustomMeasurements/TestExtension/src/main/java/com/microsoft/applicationinsights/smoketestextension/CustomMeasurementsCustomizer.java b/smoke-tests/apps/CustomMeasurements/TestExtension/src/main/java/com/microsoft/applicationinsights/smoketestextension/CustomMeasurementsCustomizer.java new file mode 100644 index 00000000000..b21f162fa24 --- /dev/null +++ b/smoke-tests/apps/CustomMeasurements/TestExtension/src/main/java/com/microsoft/applicationinsights/smoketestextension/CustomMeasurementsCustomizer.java @@ -0,0 +1,80 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.microsoft.applicationinsights.smoketestextension; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Value; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; +import io.opentelemetry.sdk.common.CompletableResultCode; +import io.opentelemetry.sdk.logs.LogRecordProcessor; +import io.opentelemetry.sdk.logs.ReadWriteLogRecord; +import io.opentelemetry.sdk.trace.ReadWriteSpan; +import io.opentelemetry.sdk.trace.ReadableSpan; +import io.opentelemetry.sdk.trace.SpanProcessor; +import java.util.HashMap; +import java.util.Map; + +public class CustomMeasurementsCustomizer implements AutoConfigurationCustomizerProvider { + + private static final AttributeKey> CUSTOM_MEASUREMENTS = + AttributeKey.valueKey("microsoft.custom_measurements"); + + @Override + public void customize(AutoConfigurationCustomizer autoConfiguration) { + autoConfiguration + .addTracerProviderCustomizer( + (builder, config) -> builder.addSpanProcessor(new CustomMeasurementsSpanProcessor())) + .addLoggerProviderCustomizer( + (builder, config) -> + builder.addLogRecordProcessor(new CustomMeasurementsLogRecordProcessor())); + } + + private static Value customMeasurements() { + Map> values = new HashMap<>(); + values.put("itemsProcessed", Value.of(42.0)); + values.put("queueDepth", Value.of(7.0)); + return Value.of(values); + } + + private static class CustomMeasurementsSpanProcessor implements SpanProcessor { + + @Override + public void onStart(Context parentContext, ReadWriteSpan span) { + span.setAttribute(CUSTOM_MEASUREMENTS, customMeasurements()); + } + + @Override + public boolean isStartRequired() { + return true; + } + + @Override + public void onEnd(ReadableSpan span) {} + + @Override + public boolean isEndRequired() { + return false; + } + } + + private static class CustomMeasurementsLogRecordProcessor implements LogRecordProcessor { + + @Override + public void onEmit(Context context, ReadWriteLogRecord logRecord) { + logRecord.setAttribute(CUSTOM_MEASUREMENTS, customMeasurements()); + } + + @Override + public CompletableResultCode shutdown() { + return CompletableResultCode.ofSuccess(); + } + + @Override + public CompletableResultCode forceFlush() { + return CompletableResultCode.ofSuccess(); + } + } +} diff --git a/smoke-tests/apps/CustomMeasurements/TestExtension/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider b/smoke-tests/apps/CustomMeasurements/TestExtension/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider new file mode 100644 index 00000000000..e5808a04149 --- /dev/null +++ b/smoke-tests/apps/CustomMeasurements/TestExtension/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider @@ -0,0 +1 @@ +com.microsoft.applicationinsights.smoketestextension.CustomMeasurementsCustomizer diff --git a/smoke-tests/apps/CustomMeasurements/build.gradle.kts b/smoke-tests/apps/CustomMeasurements/build.gradle.kts new file mode 100644 index 00000000000..08bf2254c33 --- /dev/null +++ b/smoke-tests/apps/CustomMeasurements/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("ai.smoke-test-jar") +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-web:2.5.12") + implementation("io.opentelemetry:opentelemetry-api") + compileOnly(project(":smoke-tests:apps:CustomMeasurements:TestExtension")) +} diff --git a/smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/SpringBootApp.java b/smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/SpringBootApp.java new file mode 100644 index 00000000000..95fe11af514 --- /dev/null +++ b/smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/SpringBootApp.java @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.microsoft.applicationinsights.smoketestapp; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootApp { + + public static void main(String[] args) { + SpringApplication.run(SpringBootApp.class, args); + } +} diff --git a/smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java b/smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java new file mode 100644 index 00000000000..af05a70c235 --- /dev/null +++ b/smoke-tests/apps/CustomMeasurements/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.microsoft.applicationinsights.smoketestapp; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.logs.Severity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestController { + + @GetMapping("/") + public String root() { + return "OK"; + } + + @GetMapping("/test-custom-measurements") + public String testCustomMeasurements() { + GlobalOpenTelemetry.get() + .getLogsBridge() + .get("custom-measurements-test") + .logRecordBuilder() + .setBody("custom measurements") + .setSeverity(Severity.INFO) + .emit(); + return "Test custom measurements"; + } +} diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java b/smoke-tests/apps/CustomMeasurements/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java similarity index 50% rename from smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java rename to smoke-tests/apps/CustomMeasurements/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java index a112ee633d1..c71614223f2 100644 --- a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java +++ b/smoke-tests/apps/CustomMeasurements/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CustomMeasurementsTest.java @@ -3,21 +3,20 @@ package com.microsoft.applicationinsights.smoketest; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_11; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_11_OPENJ9; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_17; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_17_OPENJ9; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_21; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_21_OPENJ9; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_25; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_25_OPENJ9; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8_OPENJ9; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.WILDFLY_13_JAVA_8; -import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.WILDFLY_13_JAVA_8_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_11; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_11_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_17; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_17_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_21; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_21_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_25; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_25_OPENJ9; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_8; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.JAVA_8_OPENJ9; import static org.assertj.core.api.Assertions.assertThat; import com.microsoft.applicationinsights.smoketest.schemav2.MessageData; +import java.io.File; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -25,7 +24,11 @@ @UseAgent abstract class CustomMeasurementsTest { - @RegisterExtension static final SmokeTestExtension testing = SmokeTestExtension.create(); + @RegisterExtension + static final SmokeTestExtension testing = + SmokeTestExtension.builder() + .setAgentExtensionFile(new File("TestExtension/build/libs/extension.jar")) + .build(); @Test @TargetUri("/test-custom-measurements") @@ -45,39 +48,33 @@ void customMeasurementsOnSpanAndLogRecord() throws Exception { assertThat(log.getProperties()).doesNotContainKey("microsoft.custom_measurements"); } - @Environment(TOMCAT_8_JAVA_8) - static class Tomcat8Java8Test extends CustomMeasurementsTest {} + @Environment(JAVA_8) + static class Java8Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_8_OPENJ9) - static class Tomcat8Java8OpenJ9Test extends CustomMeasurementsTest {} + @Environment(JAVA_8_OPENJ9) + static class Java8OpenJ9Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_11) - static class Tomcat8Java11Test extends CustomMeasurementsTest {} + @Environment(JAVA_11) + static class Java11Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_11_OPENJ9) - static class Tomcat8Java11OpenJ9Test extends CustomMeasurementsTest {} + @Environment(JAVA_11_OPENJ9) + static class Java11OpenJ9Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_17) - static class Tomcat8Java17Test extends CustomMeasurementsTest {} + @Environment(JAVA_17) + static class Java17Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_17_OPENJ9) - static class Tomcat8Java17OpenJ9Test extends CustomMeasurementsTest {} + @Environment(JAVA_17_OPENJ9) + static class Java17OpenJ9Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_21) - static class Tomcat8Java21Test extends CustomMeasurementsTest {} + @Environment(JAVA_21) + static class Java21Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_21_OPENJ9) - static class Tomcat8Java21OpenJ9Test extends CustomMeasurementsTest {} + @Environment(JAVA_21_OPENJ9) + static class Java21OpenJ9Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_25) - static class Tomcat8Java23Test extends CustomMeasurementsTest {} + @Environment(JAVA_25) + static class Java25Test extends CustomMeasurementsTest {} - @Environment(TOMCAT_8_JAVA_25_OPENJ9) - static class Tomcat8Java23OpenJ9Test extends CustomMeasurementsTest {} - - @Environment(WILDFLY_13_JAVA_8) - static class Wildfly13Java8Test extends CustomMeasurementsTest {} - - @Environment(WILDFLY_13_JAVA_8_OPENJ9) - static class Wildfly13Java8OpenJ9Test extends CustomMeasurementsTest {} + @Environment(JAVA_25_OPENJ9) + static class Java25OpenJ9Test extends CustomMeasurementsTest {} } diff --git a/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java b/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java index a1fd8884e72..de2ad9beec1 100644 --- a/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java +++ b/smoke-tests/apps/TelemetryProcessors/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java @@ -5,14 +5,8 @@ import static io.opentelemetry.api.common.AttributeKey.doubleArrayKey; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.api.common.AttributeKey; -import io.opentelemetry.api.common.Value; -import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.Span; import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.slf4j.MDC; @@ -68,26 +62,6 @@ public String testNonStringRegexSpanAttributes() { return "Test non string regex type span attributes"; } - @GetMapping("/test-custom-measurements") - public String testCustomMeasurements() { - AttributeKey> key = AttributeKey.valueKey("microsoft.custom_measurements"); - Map> measurementValues = new HashMap<>(); - measurementValues.put("itemsProcessed", Value.of(42.0)); - measurementValues.put("queueDepth", Value.of(7.0)); - Value measurements = Value.of(measurementValues); - - Span.current().setAttribute(key, measurements); - GlobalOpenTelemetry.get() - .getLogsBridge() - .get("custom-measurements-test") - .logRecordBuilder() - .setBody("custom measurements") - .setSeverity(Severity.INFO) - .setAttribute(key, measurements) - .emit(); - return "Test custom measurements"; - } - @GetMapping("/mask-user-id-in-log-body") public String maskUserIdInLogBody() { logger.info("User account with userId 123456xx failed to login"); From a8e551585f69f11a05dd6a3433b98d6cc900fc6b Mon Sep 17 00:00:00 2001 From: Sean Li Date: Fri, 25 Sep 2026 00:14:19 -0700 Subject: [PATCH 5/5] Don't change versions, let `build-azure-monitor-dependency.sh` script override to temporary version --- agent/agent-tooling/build.gradle.kts | 2 +- agent/agent-tooling/gradle.lockfile | 2 +- licenses/more-licenses.md | 2 +- smoke-tests/framework/build.gradle.kts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/agent/agent-tooling/build.gradle.kts b/agent/agent-tooling/build.gradle.kts index 7c080efe8ec..01b70cd0406 100644 --- a/agent/agent-tooling/build.gradle.kts +++ b/agent/agent-tooling/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { implementation(project(":agent:agent-profiler:agent-diagnostics")) implementation(project(":etw:java")) - implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.8.0-beta.1") + implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.7.0") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-bootstrap") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling-java9") diff --git a/agent/agent-tooling/gradle.lockfile b/agent/agent-tooling/gradle.lockfile index 918d65c6707..f1f95ca0735 100644 --- a/agent/agent-tooling/gradle.lockfile +++ b/agent/agent-tooling/gradle.lockfile @@ -10,7 +10,7 @@ com.azure:azure-core-http-netty:1.16.7=runtimeClasspath com.azure:azure-core:1.59.1=runtimeClasspath com.azure:azure-identity:1.18.4=runtimeClasspath com.azure:azure-json:1.5.1=runtimeClasspath -com.azure:azure-monitor-opentelemetry-autoconfigure:1.8.0-beta.1=runtimeClasspath +com.azure:azure-monitor-opentelemetry-autoconfigure:1.7.0=runtimeClasspath com.azure:azure-sdk-bom:1.3.8=runtimeClasspath com.azure:azure-storage-blob:12.35.0=runtimeClasspath com.azure:azure-storage-common:12.34.0=runtimeClasspath diff --git a/licenses/more-licenses.md b/licenses/more-licenses.md index 4c24081412e..f9a59654c9a 100644 --- a/licenses/more-licenses.md +++ b/licenses/more-licenses.md @@ -363,7 +363,7 @@ > - **POM Project URL**: [https://github.com/Azure/azure-sdk-for-java](https://github.com/Azure/azure-sdk-for-java) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**69** **Group:** `com.azure` **Name:** `azure-monitor-opentelemetry-autoconfigure` **Version:** `1.8.0-beta.1` +**69** **Group:** `com.azure` **Name:** `azure-monitor-opentelemetry-autoconfigure` **Version:** `1.7.0` > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) **70** **Group:** `com.azure` **Name:** `azure-storage-blob` **Version:** `12.35.0` diff --git a/smoke-tests/framework/build.gradle.kts b/smoke-tests/framework/build.gradle.kts index 758c7ce6453..8ad3a139a40 100644 --- a/smoke-tests/framework/build.gradle.kts +++ b/smoke-tests/framework/build.gradle.kts @@ -31,5 +31,5 @@ dependencies { implementation("org.assertj:assertj-core") implementation("com.azure:azure-json:1.5.1") - implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.8.0-beta.1") + implementation("com.azure:azure-monitor-opentelemetry-autoconfigure:1.7.0") }