diff --git a/agent/agent-bootstrap/build.gradle.kts b/agent/agent-bootstrap/build.gradle.kts index e149bc1f6d3..6fe23cabb7a 100644 --- a/agent/agent-bootstrap/build.gradle.kts +++ b/agent/agent-bootstrap/build.gradle.kts @@ -8,5 +8,5 @@ dependencies { // TODO (heya) remove this when updating to upstream micrometer instrumentation compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api") compileOnly("io.opentelemetry:opentelemetry-semconv") - compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv") + compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-incubator") } diff --git a/agent/agent-bootstrap/gradle.lockfile b/agent/agent-bootstrap/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-bootstrap/gradle.lockfile +++ b/agent/agent-bootstrap/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-for-testing/gradle.lockfile b/agent/agent-for-testing/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-for-testing/gradle.lockfile +++ b/agent/agent-for-testing/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile b/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile index e10a31f6218..7f3bd019a62 100644 --- a/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile +++ b/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile @@ -6,10 +6,10 @@ com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.errorprone:error_prone_annotations:2.24.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.slf4j:slf4j-api:2.0.12=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath diff --git a/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile b/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile index e10a31f6218..7f3bd019a62 100644 --- a/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile +++ b/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile @@ -6,10 +6,10 @@ com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.errorprone:error_prone_annotations:2.24.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.slf4j:slf4j-api:2.0.12=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath diff --git a/agent/agent-gc-monitor/gc-monitor-tests/gradle.lockfile b/agent/agent-gc-monitor/gc-monitor-tests/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-gc-monitor/gc-monitor-tests/gradle.lockfile +++ b/agent/agent-gc-monitor/gc-monitor-tests/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-profiler/agent-alerting-api/gradle.lockfile b/agent/agent-profiler/agent-alerting-api/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-profiler/agent-alerting-api/gradle.lockfile +++ b/agent/agent-profiler/agent-alerting-api/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-profiler/agent-alerting/gradle.lockfile b/agent/agent-profiler/agent-alerting/gradle.lockfile index 35e11164fd1..188a940ea8e 100644 --- a/agent/agent-profiler/agent-alerting/gradle.lockfile +++ b/agent/agent-profiler/agent-alerting/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.slf4j:slf4j-api:2.0.12=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath diff --git a/agent/agent-profiler/agent-diagnostics-api/gradle.lockfile b/agent/agent-profiler/agent-diagnostics-api/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-profiler/agent-diagnostics-api/gradle.lockfile +++ b/agent/agent-profiler/agent-diagnostics-api/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-profiler/agent-diagnostics-jfr/gradle.lockfile b/agent/agent-profiler/agent-diagnostics-jfr/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-profiler/agent-diagnostics-jfr/gradle.lockfile +++ b/agent/agent-profiler/agent-diagnostics-jfr/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-profiler/agent-diagnostics-serialization/gradle.lockfile b/agent/agent-profiler/agent-diagnostics-serialization/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-profiler/agent-diagnostics-serialization/gradle.lockfile +++ b/agent/agent-profiler/agent-diagnostics-serialization/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-profiler/agent-diagnostics/gradle.lockfile b/agent/agent-profiler/agent-diagnostics/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent-profiler/agent-diagnostics/gradle.lockfile +++ b/agent/agent-profiler/agent-diagnostics/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/agent-tooling/build.gradle.kts b/agent/agent-tooling/build.gradle.kts index c1a2f6e4a75..c2a6861b5db 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-exporter:1.0.0-beta.15") + implementation("com.azure:azure-monitor-opentelemetry-exporter:1.0.0-beta.17") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-bootstrap") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling") compileOnly("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common-bootstrap") @@ -66,7 +66,7 @@ dependencies { compileOnly(project(":agent:agent-bootstrap")) compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api") - compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv") + compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-incubator") compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations-support") compileOnly("com.google.auto.value:auto-value-annotations") @@ -74,7 +74,7 @@ dependencies { testImplementation(project(":agent:agent-bootstrap")) testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api") - testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv") + testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-incubator") testImplementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations-support") testImplementation("org.junit.jupiter:junit-jupiter") diff --git a/agent/agent-tooling/gradle.lockfile b/agent/agent-tooling/gradle.lockfile index f13ae7c1742..1ea37fb1b0a 100644 --- a/agent/agent-tooling/gradle.lockfile +++ b/agent/agent-tooling/gradle.lockfile @@ -9,7 +9,7 @@ com.azure:azure-core-http-netty:1.13.11=runtimeClasspath com.azure:azure-core:1.45.1=runtimeClasspath com.azure:azure-identity:1.11.2=runtimeClasspath com.azure:azure-json:1.1.0=runtimeClasspath -com.azure:azure-monitor-opentelemetry-exporter:1.0.0-beta.15=runtimeClasspath +com.azure:azure-monitor-opentelemetry-exporter:1.0.0-beta.17=runtimeClasspath com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.azure:azure-storage-blob:12.25.1=runtimeClasspath com.azure:azure-storage-common:12.24.1=runtimeClasspath @@ -22,9 +22,7 @@ com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.fasterxml.woodstox:woodstox-core:6.5.1=runtimeClasspath com.github.oshi:oshi-core:6.4.12=runtimeClasspath -com.github.spotbugs:spotbugs-annotations:4.8.3=runtimeClasspath com.github.stephenc.jcip:jcip-annotations:1.0-1=runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=runtimeClasspath com.google.errorprone:error_prone_annotations:2.24.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath com.microsoft.azure:msal4j-persistence-extension:1.2.0=runtimeClasspath @@ -57,21 +55,21 @@ io.netty:netty-transport-native-epoll:4.1.107.Final=runtimeClasspath io.netty:netty-transport-native-kqueue:4.1.107.Final=runtimeClasspath io.netty:netty-transport-native-unix-common:4.1.107.Final=runtimeClasspath io.netty:netty-transport:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-api-events:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-api:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-context:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-sdk-common:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-sdk-logs:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-sdk-metrics:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-sdk-trace:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-sdk:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-api-events:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-api:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-context:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-extension-incubator:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-sdk-common:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-sdk-logs:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-sdk-metrics:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-sdk-trace:1.35.0=runtimeClasspath +io.opentelemetry:opentelemetry-sdk:1.35.0=runtimeClasspath io.projectreactor.netty:reactor-netty-core:1.1.15=runtimeClasspath io.projectreactor.netty:reactor-netty-http:1.1.15=runtimeClasspath io.projectreactor:reactor-core:3.5.14=runtimeClasspath diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/Configuration.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/Configuration.java index 16e978e8fdd..d9fc36e4cdc 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/Configuration.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/Configuration.java @@ -1259,10 +1259,10 @@ public void validate() { } public static class ProcessorAction { - @Nullable public final AttributeKey key; + @Nullable public AttributeKey key; public final ProcessorActionType action; public final String value; - @Nullable public final AttributeKey fromAttribute; + @Nullable public AttributeKey fromAttribute; @Nullable public final ExtractAttribute extractAttribute; @Nullable public final MaskAttribute maskAttribute; diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilder.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilder.java index a9d2487a32a..f8b4d486c12 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilder.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilder.java @@ -3,6 +3,7 @@ package com.microsoft.applicationinsights.agent.internal.configuration; +import com.azure.monitor.opentelemetry.exporter.implementation.SemanticAttributes; import com.azure.monitor.opentelemetry.exporter.implementation.statsbeat.RpAttachType; import com.azure.monitor.opentelemetry.exporter.implementation.utils.HostName; import com.azure.monitor.opentelemetry.exporter.implementation.utils.Strings; @@ -20,12 +21,14 @@ import com.microsoft.applicationinsights.agent.internal.configuration.Configuration.JmxMetric; import com.microsoft.applicationinsights.agent.internal.configuration.Configuration.SamplingOverride; import com.microsoft.applicationinsights.agent.internal.diagnostics.DiagnosticsHelper; +import io.opentelemetry.api.common.AttributeKey; import java.io.IOException; import java.net.URL; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -253,6 +256,7 @@ private static void overlayConfiguration( overlayFromEnv(config, agentJarPath.getParent()); config.sampling.percentage = roundToNearest(config.sampling.percentage, true); for (SamplingOverride override : config.preview.sampling.overrides) { + supportSamplingOverridesOldSemConv(override); override.percentage = roundToNearest(override.percentage, true); } // rp configuration should always be last (so it takes precedence) @@ -270,6 +274,103 @@ private static void overlayConfiguration( String hostname = HostName.get(); config.role.instance = hostname == null ? "unknown" : hostname; } + supportTelemetryProcessorsOldSemConv(config); + } + + private static void supportSamplingOverridesOldSemConv(SamplingOverride override) { + for (Configuration.SamplingOverrideAttribute attribute : override.attributes) { + attribute.key = mapAttributeKey(attribute.key); + } + } + + private static void supportTelemetryProcessorsOldSemConv(Configuration config) { + for (Configuration.ProcessorConfig processor : config.preview.processors) { + if (processor.include != null && processor.type == Configuration.ProcessorType.ATTRIBUTE) { + for (Configuration.ProcessorAttribute attribute : processor.include.attributes) { + attribute.key = mapAttributeKey(attribute.key); + } + } + if (processor.exclude != null && processor.type == Configuration.ProcessorType.ATTRIBUTE) { + for (Configuration.ProcessorAttribute attribute : processor.exclude.attributes) { + attribute.key = mapAttributeKey(attribute.key); + } + } + for (Configuration.ProcessorAction action : processor.actions) { + if (action.key != null && processor.type == Configuration.ProcessorType.ATTRIBUTE) { + action.key = AttributeKey.stringKey(mapAttributeKey(action.key.getKey())); + } + } + if (processor.name != null && processor.name.fromAttributes != null) { + List newFromAttributes = new ArrayList<>(); + for (String oldFromAttribute : processor.name.fromAttributes) { + String newFromAttribute = mapAttributeKey(oldFromAttribute); + newFromAttributes.add(newFromAttribute); + } + processor.name.fromAttributes = newFromAttributes; + } + if (processor.body != null && processor.body.fromAttributes != null) { + List newFromAttributes = new ArrayList<>(); + for (String oldFromAttribute : processor.body.fromAttributes) { + String newFromAttribute = mapAttributeKey(oldFromAttribute); + newFromAttributes.add(newFromAttribute); + } + processor.body.fromAttributes = newFromAttributes; + } + } + } + + private static String mapAttributeKey(String oldAttributeKey) { + String result = null; + // Common attributes across HTTP client and server spans + if (oldAttributeKey.equals(SemanticAttributes.HTTP_METHOD.getKey())) { + result = SemanticAttributes.HTTP_REQUEST_METHOD.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.HTTP_STATUS_CODE.getKey())) { + result = SemanticAttributes.HTTP_RESPONSE_STATUS_CODE.getKey(); + } else if (oldAttributeKey.startsWith("http.request.header.") + || oldAttributeKey.startsWith("http.response.header.")) { + result = oldAttributeKey.replace('_', '-'); + } else if (oldAttributeKey.equals(SemanticAttributes.NET_PROTOCOL_NAME.getKey())) { + result = SemanticAttributes.NETWORK_PROTOCOL_NAME.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.NET_PROTOCOL_VERSION.getKey())) { + result = SemanticAttributes.NETWORK_PROTOCOL_VERSION.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.NET_SOCK_PEER_ADDR.getKey())) { + result = SemanticAttributes.NETWORK_PEER_ADDRESS.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.NET_SOCK_PEER_PORT.getKey())) { + result = SemanticAttributes.NETWORK_PEER_PORT.getKey(); + } + + // HTTP client span attributes + // http.url is handled via LazyHttpUrl + if (oldAttributeKey.equals(SemanticAttributes.HTTP_RESEND_COUNT.getKey())) { + result = "http.request.resend_count"; // TODO (heya) use upstream SemanticAttributes when it + // becomes available. + } else if (oldAttributeKey.equals(SemanticAttributes.NET_PEER_NAME.getKey())) { + result = SemanticAttributes.SERVER_ADDRESS.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.NET_PEER_PORT.getKey())) { + result = SemanticAttributes.SERVER_PORT.getKey(); + } + + // HTTP server span attributes + // http.target is handled via LazyHttpTarget + if (oldAttributeKey.equals(SemanticAttributes.HTTP_SCHEME.getKey())) { + result = SemanticAttributes.URL_SCHEME.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.HTTP_CLIENT_IP.getKey())) { + result = SemanticAttributes.CLIENT_ADDRESS.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.NET_HOST_NAME.getKey())) { + result = SemanticAttributes.SERVER_ADDRESS.getKey(); + } else if (oldAttributeKey.equals(SemanticAttributes.NET_HOST_PORT.getKey())) { + result = SemanticAttributes.SERVER_PORT.getKey(); + } + + if (result == null) { + result = oldAttributeKey; + } else { + configurationLogger.warn( + "\"{}\" has been deprecated and replaced with \"{}\" since 3.5.0 GA.", + oldAttributeKey, + result); + } + return result; } private static void logWarningIfUsingInternalAttributes(Configuration config) { diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java index db2c77d8d7b..c218e7c5fb7 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java @@ -21,6 +21,7 @@ public Map apply(ConfigProperties otelConfig) { Configuration configuration = FirstEntryPoint.getConfiguration(); Map properties = new HashMap<>(); + properties.put( "applicationinsights.internal.micrometer.step.millis", Long.toString(SECONDS.toMillis(configuration.metricIntervalSeconds))); @@ -37,9 +38,9 @@ public Map apply(ConfigProperties otelConfig) { "otel.java.enabled.resource.providers", "io.opentelemetry.sdk.autoconfigure.internal.EnvironmentResourceProvider"); - if (!configuration.preview.captureControllerSpans) { + if (configuration.preview.captureControllerSpans) { properties.put( - "otel.instrumentation.common.experimental.controller-telemetry.enabled", "false"); + "otel.instrumentation.common.experimental.controller-telemetry.enabled", "true"); } properties.put("otel.instrumentation.common.experimental.view-telemetry.enabled", "false"); properties.put( @@ -47,19 +48,19 @@ public Map apply(ConfigProperties otelConfig) { setHttpHeaderConfiguration( properties, - "otel.instrumentation.http.capture-headers.server.request", + "otel.instrumentation.http.server.capture-request-headers", configuration.preview.captureHttpServerHeaders.requestHeaders); setHttpHeaderConfiguration( properties, - "otel.instrumentation.http.capture-headers.server.response", + "otel.instrumentation.http.server.capture-response-headers", configuration.preview.captureHttpServerHeaders.responseHeaders); setHttpHeaderConfiguration( properties, - "otel.instrumentation.http.capture-headers.client.request", + "otel.instrumentation.http.client.capture-request-headers", configuration.preview.captureHttpClientHeaders.requestHeaders); setHttpHeaderConfiguration( properties, - "otel.instrumentation.http.capture-headers.client.response", + "otel.instrumentation.http.client.capture-response-headers", configuration.preview.captureHttpClientHeaders.responseHeaders); // enable capturing all mdc properties diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiContextCustomizer.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiContextCustomizer.java index b1249a426ee..5bf6ba32859 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiContextCustomizer.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiContextCustomizer.java @@ -5,6 +5,7 @@ import com.azure.monitor.opentelemetry.exporter.implementation.AiSemanticAttributes; import com.microsoft.applicationinsights.agent.internal.configuration.Configuration; +import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; @@ -39,9 +40,11 @@ public Context onStart(Context context, R request, Attributes startAttributes) { Context newContext = context; - String target = startAttributes.get(SemanticAttributes.HTTP_TARGET); + String path = + getStableAttribute( + startAttributes, SemanticAttributes.URL_PATH, SemanticAttributes.HTTP_TARGET); - String connectionStringOverride = getConnectionStringOverride(target); + String connectionStringOverride = getConnectionStringOverride(path); if (connectionStringOverride != null) { newContext = newContext.with(AiContextKeys.CONNECTION_STRING, connectionStringOverride); // InheritedConnectionStringSpanProcessor will stamp connection string attribute from the @@ -51,7 +54,7 @@ public Context onStart(Context context, R request, Attributes startAttributes) { span.setAttribute(AiSemanticAttributes.INTERNAL_CONNECTION_STRING, connectionStringOverride); } - String roleNameOverride = getRoleNameOverride(target); + String roleNameOverride = getRoleNameOverride(path); if (roleNameOverride != null) { newContext = newContext.with(AiContextKeys.ROLE_NAME, roleNameOverride); // InheritedRoleNameSpanProcessor will stamp role name attribute from the @@ -89,4 +92,13 @@ private String getRoleNameOverride(String target) { } return null; } + + private static T getStableAttribute( + Attributes attributes, AttributeKey stable, AttributeKey old) { + T value = attributes.get(stable); + if (value != null) { + return value; + } + return attributes.get(old); + } } diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/SecondEntryPoint.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/SecondEntryPoint.java index 7804bc2e169..b06b2d068db 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/SecondEntryPoint.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/SecondEntryPoint.java @@ -43,7 +43,6 @@ import com.microsoft.applicationinsights.agent.internal.processors.ExporterWithLogProcessor; import com.microsoft.applicationinsights.agent.internal.processors.ExporterWithSpanProcessor; import com.microsoft.applicationinsights.agent.internal.processors.LogExporterWithAttributeProcessor; -import com.microsoft.applicationinsights.agent.internal.processors.MySpanData; import com.microsoft.applicationinsights.agent.internal.processors.SpanExporterWithAttributeProcessor; import com.microsoft.applicationinsights.agent.internal.profiler.triggers.AlertTriggerSpanProcessor; import com.microsoft.applicationinsights.agent.internal.sampling.SamplingOverrides; @@ -51,8 +50,6 @@ import com.microsoft.applicationinsights.agent.internal.telemetry.MetricFilter; import com.microsoft.applicationinsights.agent.internal.telemetry.TelemetryClient; import com.microsoft.applicationinsights.agent.internal.telemetry.TelemetryObservers; -import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; @@ -68,12 +65,9 @@ import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.metrics.internal.view.AiViewRegistry; import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder; -import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.sdk.trace.export.SpanExporter; -import io.opentelemetry.semconv.SemanticAttributes; import java.io.File; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -400,6 +394,9 @@ private static Set initStatsbeatFeatureSet(Configuration config) { if (!config.preview.instrumentation.jaxrsAnnotations.enabled) { featureList.add(Feature.JAXRS_ANNOTATIONS_DISABLED); } + if (!config.preview.instrumentation.pekko.enabled) { + featureList.add(Feature.PEKKO_DISABLED); + } if (config.preview.browserSdkLoader.enabled) { featureList.add(Feature.BROWSER_SDK_LOADER); } @@ -594,10 +591,6 @@ private static SpanExporter wrapSpanExporter( "Not an expected ProcessorType: " + processorConfig.type); } } - - // this is temporary until semantic attributes stabilize and we make breaking change - // then can use java.util.functions.Predicate - spanExporter = new BackCompatHttpUrlProcessor(spanExporter); } return spanExporter; @@ -754,47 +747,4 @@ private static CompletableResultCode flushAll( }); return overallResult; } - - private static class BackCompatHttpUrlProcessor implements SpanExporter { - - private final SpanExporter delegate; - - private BackCompatHttpUrlProcessor(SpanExporter delegate) { - this.delegate = delegate; - } - - @Override - public CompletableResultCode export(Collection spans) { - List copy = new ArrayList<>(); - for (SpanData span : spans) { - copy.add(addBackCompatHttpUrl(span)); - } - return delegate.export(copy); - } - - private static SpanData addBackCompatHttpUrl(SpanData span) { - Attributes attributes = span.getAttributes(); - if (attributes.get(SemanticAttributes.HTTP_URL) != null) { - // already has http.url - return span; - } - String httpUrl = SpanDataMapper.getHttpUrlFromServerSpan(attributes); - if (httpUrl == null) { - return span; - } - AttributesBuilder builder = attributes.toBuilder(); - builder.put(SemanticAttributes.HTTP_URL, httpUrl); - return new MySpanData(span, builder.build()); - } - - @Override - public CompletableResultCode flush() { - return delegate.flush(); - } - - @Override - public CompletableResultCode shutdown() { - return delegate.shutdown(); - } - } } diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/StatsbeatSpanExporter.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/StatsbeatSpanExporter.java index ae25ed292d5..35964769733 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/StatsbeatSpanExporter.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/StatsbeatSpanExporter.java @@ -28,7 +28,7 @@ public CompletableResultCode export(Collection spans) { if (instrumentationScopeName.startsWith("azure-")) { instrumentationScopeName = AZURE_OPENTELEMETRY; } - statsbeatModule.getInstrumentationStatsbeat().addInstrumentation(instrumentationScopeName); + statsbeatModule.getInstrumentationStatsbeat().addInstrumentation(span); } return delegate.export(spans); } diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/processors/AttributeProcessor.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/processors/AttributeProcessor.java index d6b202c71f7..42962568233 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/processors/AttributeProcessor.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/processors/AttributeProcessor.java @@ -3,6 +3,7 @@ package com.microsoft.applicationinsights.agent.internal.processors; +import com.azure.monitor.opentelemetry.exporter.implementation.SpanDataMapper; import com.microsoft.applicationinsights.agent.internal.configuration.Configuration.ProcessorAction; import com.microsoft.applicationinsights.agent.internal.configuration.Configuration.ProcessorConfig; import io.opentelemetry.api.common.AttributeKey; @@ -104,6 +105,15 @@ private static Attributes processUpdateAction(Attributes attributes, ProcessorAc // Currently we only support String String existingValue = existingAttributes.get(actionObj.key); + + AttributeKey attributeKey = actionObj.key; + // support backward compatibility for http.url + if (actionObj.key.getKey().equals("http.url")) { + HttpUrlKeyValuePair pair = processHttpUrl(attributes); + attributeKey = AttributeKey.stringKey(pair.key); + existingValue = pair.value; + } + if (existingValue == null) { return existingAttributes; } @@ -112,14 +122,14 @@ private static Attributes processUpdateAction(Attributes attributes, ProcessorAc if (actionObj.value != null) { // update to new value AttributesBuilder builder = existingAttributes.toBuilder(); - builder.put(actionObj.key, actionObj.value); + builder.put(attributeKey, actionObj.value); return builder.build(); } String fromAttributeValue = existingAttributes.get(actionObj.fromAttribute); if (fromAttributeValue != null) { AttributesBuilder builder = existingAttributes.toBuilder(); - builder.put(actionObj.key, fromAttributeValue); + builder.put(attributeKey, fromAttributeValue); return builder.build(); } @@ -131,14 +141,24 @@ private static Attributes processDeleteAction(Attributes attributes, ProcessorAc // Currently we only support String String existingValue = existingAttributes.get(actionObj.key); + + AttributeKey attributeKey = actionObj.key; + // support backward compatibility for http.url + if (actionObj.key.getKey().equals("http.url")) { + HttpUrlKeyValuePair pair = processHttpUrl(attributes); + attributeKey = AttributeKey.stringKey(pair.key); + existingValue = pair.value; + } + if (existingValue == null) { return existingAttributes; } AttributesBuilder builder = Attributes.builder(); + AttributeKey finalAttributeKey = attributeKey; existingAttributes.forEach( (key, value) -> { - if (!key.equals(actionObj.key)) { + if (!key.equals(finalAttributeKey)) { putIntoBuilder(builder, key, value); } }); @@ -150,20 +170,36 @@ private static Attributes processHashAction(Attributes attributes, ProcessorActi // Currently we only support String String existingValue = existingAttributes.get(actionObj.key); + + AttributeKey attributeKey = actionObj.key; + // support backward compatibility for http.url + if (actionObj.key.getKey().equals("http.url")) { + HttpUrlKeyValuePair pair = processHttpUrl(attributes); + attributeKey = AttributeKey.stringKey(pair.key); + existingValue = pair.value; + } + if (existingValue == null) { return existingAttributes; } AttributesBuilder builderCopy = existingAttributes.toBuilder(); - builderCopy.put(actionObj.key, DigestUtils.sha256Hex(existingValue)); + builderCopy.put(attributeKey, DigestUtils.sha256Hex(existingValue)); return builderCopy.build(); } private static Attributes processExtractAction(Attributes attributes, ProcessorAction actionObj) { Attributes existingAttributes = attributes; - // Currently we only support String String existingValue = existingAttributes.get(actionObj.key); + + // support backward compatibility for http.url + if (actionObj.key.getKey().equals("http.url")) { + HttpUrlKeyValuePair pair = processHttpUrl(attributes); + existingValue = pair.value; + } + + // Currently we only support String if (existingValue == null) { return existingAttributes; } @@ -184,6 +220,15 @@ private static Attributes processMaskAction(Attributes attributes, ProcessorActi // Currently we only support String String existingValue = existingAttributes.get(actionObj.key); + + AttributeKey attributeKey = actionObj.key; + // support backward compatibility for http.url + if (actionObj.key.getKey().equals("http.url")) { + HttpUrlKeyValuePair pair = processHttpUrl(attributes); + attributeKey = AttributeKey.stringKey(pair.key); + existingValue = pair.value; + } + if (existingValue == null) { return existingAttributes; } @@ -195,10 +240,29 @@ private static Attributes processMaskAction(Attributes attributes, ProcessorActi } AttributesBuilder builder = existingAttributes.toBuilder(); - builder.put(actionObj.key, newValue); + builder.put(attributeKey, newValue); return builder.build(); } + // support backward compatibility for http.url + private static HttpUrlKeyValuePair processHttpUrl(Attributes attributes) { + String urlFull = attributes.get(AttributeKey.stringKey("url.full")); + if (urlFull != null) { + return new HttpUrlKeyValuePair("url.full", urlFull); + } + return new HttpUrlKeyValuePair("url.path", SpanDataMapper.getHttpUrlFromServerSpan(attributes)); + } + + private static class HttpUrlKeyValuePair { + public final String key; + public final String value; + + public HttpUrlKeyValuePair(String key, String value) { + this.key = key; + this.value = value; + } + } + @SuppressWarnings("unchecked") private static void putIntoBuilder(AttributesBuilder builder, AttributeKey key, Object value) { switch (key.getType()) { diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/sampling/SamplingOverrides.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/sampling/SamplingOverrides.java index 552480aca4b..b075bba5cca 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/sampling/SamplingOverrides.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/sampling/SamplingOverrides.java @@ -34,8 +34,9 @@ public SamplingOverrides(List overrides) { @Nullable public Sampler getOverride(Attributes attributes) { LazyHttpUrl lazyHttpUrl = new LazyHttpUrl(attributes); + LazyHttpTarget lazyHttpTarget = new LazyHttpTarget(attributes); for (MatcherGroup matcherGroups : matcherGroups) { - if (matcherGroups.matches(attributes, lazyHttpUrl)) { + if (matcherGroups.matches(attributes, lazyHttpUrl, lazyHttpTarget)) { return matcherGroups.getSampler(); } } @@ -46,7 +47,7 @@ public Sampler getOverride(Attributes attributes) { @Nullable public Double getOverridePercentage(Attributes attributes) { for (MatcherGroup matcherGroups : matcherGroups) { - if (matcherGroups.matches(attributes, null)) { + if (matcherGroups.matches(attributes, null, null)) { return matcherGroups.getPercentage(); } } @@ -80,9 +81,12 @@ Sampler getSampler() { return samplingPercentage.get(); } - private boolean matches(Attributes attributes, @Nullable LazyHttpUrl lazyHttpUrl) { + private boolean matches( + Attributes attributes, + @Nullable LazyHttpUrl lazyHttpUrl, + @Nullable LazyHttpTarget lazyHttpTarget) { for (TempPredicate predicate : predicates) { - if (!predicate.test(attributes, lazyHttpUrl)) { + if (!predicate.test(attributes, lazyHttpUrl, lazyHttpTarget)) { return false; } } @@ -136,9 +140,13 @@ private StrictMatcher(String key, String value) { } @Override - public boolean test(Attributes attributes, LazyHttpUrl lazyHttpUrl) { + public boolean test( + Attributes attributes, LazyHttpUrl lazyHttpUrl, LazyHttpTarget lazyHttpTarget) { String val = MatcherGroup.getValueIncludingThreadName(attributes, key); - if (val == null && key.getKey().equals(SemanticAttributes.HTTP_URL.getKey())) { + if (key.getKey().equals(SemanticAttributes.HTTP_TARGET.getKey())) { + val = lazyHttpTarget.get(); + } + if (val == null && getHttpUrlKeyOldOrStableSemconv(key)) { val = lazyHttpUrl.get(); } return value.equals(val); @@ -155,7 +163,8 @@ private StrictArrayContainsMatcher(String key, String value) { } @Override - public boolean test(Attributes attributes, LazyHttpUrl lazyHttpUrl) { + public boolean test( + Attributes attributes, LazyHttpUrl lazyHttpUrl, LazyHttpTarget lazyHttpTarget) { List val = attributes.get(key); return val != null && val.contains(value); } @@ -171,13 +180,18 @@ private RegexpMatcher(String key, String value) { } @Override - public boolean test(Attributes attributes, @Nullable LazyHttpUrl lazyHttpUrl) { + public boolean test( + Attributes attributes, + @Nullable LazyHttpUrl lazyHttpUrl, + @Nullable LazyHttpTarget lazyHttpTarget) { String val = MatcherGroup.getValueIncludingThreadName(attributes, key); - if (val == null - && key.getKey().equals(SemanticAttributes.HTTP_URL.getKey()) - && lazyHttpUrl != null) { + if (key.getKey().equals(SemanticAttributes.URL_PATH.getKey())) { + val = lazyHttpTarget.get(); + } + if (val == null && getHttpUrlKeyOldOrStableSemconv(key) && lazyHttpUrl != null) { val = lazyHttpUrl.get(); } + return val != null && value.matcher(val).matches(); } } @@ -192,7 +206,10 @@ private RegexpArrayContainsMatcher(String key, String value) { } @Override - public boolean test(Attributes attributes, @Nullable LazyHttpUrl lazyHttpUrl) { + public boolean test( + Attributes attributes, + @Nullable LazyHttpUrl lazyHttpUrl, + @Nullable LazyHttpTarget lazyHttpTarget) { List val = attributes.get(key); if (val == null) { return false; @@ -214,18 +231,22 @@ private KeyOnlyMatcher(String key) { } @Override - public boolean test(Attributes attributes, @Nullable LazyHttpUrl lazyHttpUrl) { + public boolean test( + Attributes attributes, + @Nullable LazyHttpUrl lazyHttpUrl, + @Nullable LazyHttpTarget lazyHttpTarget) { String val = MatcherGroup.getValueIncludingThreadName(attributes, key); - if (val == null - && key.getKey().equals(SemanticAttributes.HTTP_URL.getKey()) - && lazyHttpUrl != null) { + if (key.getKey().equals(SemanticAttributes.HTTP_TARGET.getKey())) { + val = lazyHttpTarget.get(); + } + if (val == null && getHttpUrlKeyOldOrStableSemconv(key) && lazyHttpUrl != null) { val = lazyHttpUrl.get(); } return val != null; } } - // this is temporary until semantic attributes stabilize and we make breaking change + // this is for backward compatibility with existing sampling override logic private static class LazyHttpUrl { private final Attributes attributes; private boolean initialized; @@ -244,9 +265,39 @@ private String get() { } } + private static boolean getHttpUrlKeyOldOrStableSemconv(AttributeKey key) { + String keyString = key.getKey(); + return keyString.equals(SemanticAttributes.HTTP_URL.getKey()) + || keyString.equals(SemanticAttributes.URL_FULL.getKey()); + } + // this is temporary until semantic attributes stabilize and we make breaking change // then can use java.util.functions.Predicate private interface TempPredicate { - boolean test(Attributes attributes, @Nullable LazyHttpUrl lazyHttpUrl); + boolean test( + Attributes attributes, + @Nullable LazyHttpUrl lazyHttpUrl, + @Nullable LazyHttpTarget lazyHttpTarget); + } + + // this is for backward compatibility with existing sampling override logic + // http.target -> url.path and url.query + private static class LazyHttpTarget { + private final Attributes attributes; + private boolean initialized; + @Nullable private String value; + + private LazyHttpTarget(Attributes attributes) { + this.attributes = attributes; + } + + private String get() { + if (!initialized) { + String urlQuery = attributes.get(SemanticAttributes.URL_QUERY); + value = attributes.get(SemanticAttributes.URL_PATH) + (urlQuery != null ? urlQuery : ""); + initialized = true; + } + return value; + } } } diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/telemetry/TelemetryClient.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/telemetry/TelemetryClient.java index 0a7c19a7f17..1903a59f4a1 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/telemetry/TelemetryClient.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/telemetry/TelemetryClient.java @@ -34,12 +34,10 @@ import com.azure.monitor.opentelemetry.exporter.implementation.utils.TempDirs; import com.microsoft.applicationinsights.agent.internal.configuration.Configuration; import com.microsoft.applicationinsights.agent.internal.httpclient.LazyHttpClient; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.resources.Resource; import java.io.File; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -340,8 +338,7 @@ public void populateDefaults(AbstractTelemetryBuilder telemetryBuilder, Resource for (Map.Entry entry : globalProperties.entrySet()) { telemetryBuilder.addProperty(entry.getKey(), entry.getValue()); } - ResourceParser.updateRoleNameAndInstance( - telemetryBuilder, resource, DefaultConfigProperties.create(Collections.emptyMap())); + new ResourceParser().updateRoleNameAndInstance(telemetryBuilder, resource); } @Nullable diff --git a/agent/agent-tooling/src/main/java/io/opentelemetry/sdk/metrics/internal/view/MetricView.java b/agent/agent-tooling/src/main/java/io/opentelemetry/sdk/metrics/internal/view/MetricView.java index 8deeb2b2e68..0fa353ebd0d 100644 --- a/agent/agent-tooling/src/main/java/io/opentelemetry/sdk/metrics/internal/view/MetricView.java +++ b/agent/agent-tooling/src/main/java/io/opentelemetry/sdk/metrics/internal/view/MetricView.java @@ -9,8 +9,8 @@ import java.util.Set; enum MetricView { - HTTP_CLIENT_VIEW("http.client.duration", httpClientDurationAttributeKeys(), false), - HTTP_SERVER_VIEW("http.server.duration", httpServerDurationAttributeKeys(), true), + HTTP_CLIENT_VIEW("http.client.request.duration", httpClientDurationAttributeKeys(), false), + HTTP_SERVER_VIEW("http.server.request.duration", httpServerDurationAttributeKeys(), true), RPC_CLIENT_VIEW("rpc.client.duration", rpcClientDurationAttributeKeys(), false), RPC_SERVER_VIEW("rpc.server.duration", rpcServerDurationAttributeKeys(), false); @@ -41,23 +41,23 @@ boolean isCaptureSynthetic() { private static Set> httpClientDurationAttributeKeys() { Set> view = new HashSet<>(3); - view.add(SemanticAttributes.HTTP_STATUS_CODE); - view.add(SemanticAttributes.NET_PEER_NAME); - view.add(SemanticAttributes.NET_PEER_PORT); + view.add(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE); + view.add(SemanticAttributes.SERVER_ADDRESS); + view.add(SemanticAttributes.SERVER_PORT); return view; } private static Set> httpServerDurationAttributeKeys() { Set> view = new HashSet<>(1); - view.add(SemanticAttributes.HTTP_STATUS_CODE); + view.add(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE); return view; } private static Set> rpcClientDurationAttributeKeys() { Set> view = new HashSet<>(3); view.add(SemanticAttributes.RPC_SYSTEM); - view.add(SemanticAttributes.NET_PEER_NAME); - view.add(SemanticAttributes.NET_PEER_PORT); + view.add(SemanticAttributes.SERVER_ADDRESS); + view.add(SemanticAttributes.SERVER_PORT); return view; } diff --git a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/PreAggregatedMetricsTest.java b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/PreAggregatedMetricsTest.java index 3b8952f3198..95860ebaa03 100644 --- a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/PreAggregatedMetricsTest.java +++ b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/PreAggregatedMetricsTest.java @@ -30,10 +30,10 @@ import io.opentelemetry.api.trace.TraceFlags; import io.opentelemetry.api.trace.TraceState; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.OperationListener; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; -import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientMetrics; +import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder; import io.opentelemetry.sdk.metrics.data.MetricData; @@ -74,9 +74,8 @@ void generateHttpClientMetrics() { .put("http.host", "host") .put("http.target", "/") .put("http.scheme", "https") - .put("net.peer.name", "localhost") - .put("net.peer.ip", "0.0.0.0") - .put("net.peer.port", 1234) + .put("server.address", "localhost") + .put("server.port", 1234) .put("http.request_content_length", 100) .build(); @@ -84,7 +83,7 @@ void generateHttpClientMetrics() { Attributes.builder() .put("http.flavor", "2.0") .put("http.server_name", "server") - .put("http.status_code", 200) + .put("http.response.status_code", 200) .put("http.response_content_length", 200) .build(); @@ -114,18 +113,19 @@ void generateHttpClientMetrics() { .satisfiesExactly( metric -> assertThat(metric) - .hasName("http.client.duration") - .hasUnit("ms") + .hasName("http.client.request.duration") + .hasUnit("s") .hasHistogramSatisfying( histogram -> histogram.hasPointsSatisfying( point -> point - .hasSum(150 /* millis */) + .hasSum(0.15 /* seconds */) .hasAttributesSatisfying( - equalTo(SemanticAttributes.NET_PEER_NAME, "localhost"), - equalTo(SemanticAttributes.NET_PEER_PORT, 1234), - equalTo(SemanticAttributes.HTTP_STATUS_CODE, 200)) + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, 1234), + equalTo( + SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200)) .hasExemplarsSatisfying( exemplar -> exemplar @@ -158,10 +158,8 @@ void generateRpcClientMetrics() { Attributes responseAttributes1 = Attributes.builder() - .put(SemanticAttributes.NET_PEER_NAME, "example.com") - .put(SemanticAttributes.NET_PEER_IP, "127.0.0.1") - .put(SemanticAttributes.NET_PEER_PORT, 8080) - .put(SemanticAttributes.NET_TRANSPORT, "ip_tcp") + .put(SemanticAttributes.SERVER_ADDRESS, "example.com") + .put(SemanticAttributes.SERVER_PORT, 8080) .build(); Context parent = @@ -202,8 +200,8 @@ void generateRpcClientMetrics() { .hasAttributesSatisfying( equalTo(SemanticAttributes.RPC_SYSTEM, "grpc"), equalTo( - SemanticAttributes.NET_PEER_NAME, "example.com"), - equalTo(SemanticAttributes.NET_PEER_PORT, 8080)) + SemanticAttributes.SERVER_ADDRESS, "example.com"), + equalTo(SemanticAttributes.SERVER_PORT, 8080)) .hasExemplarsSatisfying( exemplar -> exemplar @@ -233,8 +231,8 @@ void generateHttpServerMetrics() { .put("http.host", "host") .put("http.target", "/") .put("http.scheme", "https") - .put("net.host.name", "localhost") - .put("net.host.port", 1234) + .put("server.address", "localhost") + .put("server.port", 1234) .put("http.request_content_length", 100) .build(); @@ -242,7 +240,7 @@ void generateHttpServerMetrics() { Attributes.builder() .put("http.flavor", "2.0") .put("http.server_name", "server") - .put("http.status_code", 200) + .put("http.response.status_code", 200) .put("http.response_content_length", 200) .build(); @@ -259,26 +257,27 @@ void generateHttpServerMetrics() { Collection metricDataCollection = metricReader.collectAllMetrics(); MetricData target = null; for (MetricData metricData : metricDataCollection) { - if ("http.server.duration".equals(metricData.getName())) { + if ("http.server.request.duration".equals(metricData.getName())) { target = metricData; System.out.println("metric: " + metricData); } } assertThat(target) - .satisfies( + .satisfiesAnyOf( metric -> assertThat(metric) - .hasName("http.server.duration") - .hasUnit("ms") + .hasName("http.server.request.duration") + .hasUnit("s") .hasHistogramSatisfying( histogram -> histogram.hasPointsSatisfying( point -> point - .hasSum(150 /* millis */) + .hasSum(0.15 /* seconds */) .hasAttributesSatisfying( - equalTo(SemanticAttributes.HTTP_STATUS_CODE, 200), + equalTo( + SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200), equalTo( AttributeKey.booleanKey( "applicationinsights.internal.is_synthetic"), diff --git a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/processors/TelemetryProcessorMaskingTest.java b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/processors/TelemetryProcessorMaskingTest.java index 79d1fae84e3..ac26c654bd5 100644 --- a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/processors/TelemetryProcessorMaskingTest.java +++ b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/processors/TelemetryProcessorMaskingTest.java @@ -6,7 +6,6 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.assertj.core.api.Assertions.assertThat; -import com.azure.monitor.opentelemetry.exporter.implementation.SemanticAttributes; import com.microsoft.applicationinsights.agent.internal.configuration.Configuration; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.SpanContext; @@ -22,6 +21,7 @@ import io.opentelemetry.sdk.trace.data.LinkData; import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.sdk.trace.data.StatusData; +import io.opentelemetry.semconv.SemanticAttributes; import java.time.Instant; import java.util.ArrayList; import java.util.Collections; @@ -46,7 +46,7 @@ void shouldMaskAttribute() { .processActions(new RequestSpanData(httpUrl)); Attributes newAttributes = newSpanData.getAttributes(); - String newHttpUrlAttributeValue = newAttributes.get(SemanticAttributes.HTTP_URL); + String newHttpUrlAttributeValue = newAttributes.get(SemanticAttributes.URL_FULL); assertThat(newHttpUrlAttributeValue) .isEqualTo("http://localhost:8080/TelemetryProcessors/user/" + mask); } @@ -72,7 +72,7 @@ void shouldMaskAttributeWithGroupName() { .processActions(new RequestSpanData(httpUrl)); Attributes newAttributes = newSpanData.getAttributes(); - String newHttpUrlAttributeValue = newAttributes.get(SemanticAttributes.HTTP_URL); + String newHttpUrlAttributeValue = newAttributes.get(SemanticAttributes.URL_FULL); assertThat(newHttpUrlAttributeValue).isEqualTo("https://user/" + mask); } @@ -166,9 +166,9 @@ public long getStartEpochNanos() { @Override public Attributes getAttributes() { return Attributes.builder() - .put("http.status_code", 200L) - .put("http.url", httpUrl) - .put("http.method", "GET") + .put("http.response.status_code", 200L) + .put("url.full", httpUrl) + .put("http.request.method", "GET") .put("ai.sampling.percentage", 100.0) .build(); } diff --git a/agent/agent/build.gradle.kts b/agent/agent/build.gradle.kts index 29c8629edc1..eed731e6cba 100644 --- a/agent/agent/build.gradle.kts +++ b/agent/agent/build.gradle.kts @@ -84,7 +84,6 @@ tasks { exclude(dependency("io.opentelemetry:opentelemetry-api")) exclude(dependency("io.opentelemetry:opentelemetry-api-metrics")) exclude(dependency("io.opentelemetry:opentelemetry-context")) - exclude(dependency("io.opentelemetry:opentelemetry-semconv")) } } @@ -110,6 +109,8 @@ tasks { // and so we have to hackily re-add it via agent/agent/src/main/resources exclude("inst/META-INF/services/io.opentelemetry.javaagent.slf4j.spi.SLF4JServiceProvider") + exclude("inst/io/prometheus/**") + // this excludes the upstream classes, but not the distro classes since the exclusion step // takes place before the transformation step exclude("io/opentelemetry/javaagent/shaded/instrumentation/api/instrumenter/http/TemporaryMetricsView.class") diff --git a/agent/agent/gradle.lockfile b/agent/agent/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/agent/gradle.lockfile +++ b/agent/agent/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/instrumentation/applicationinsights-web-2.3/gradle.lockfile b/agent/instrumentation/applicationinsights-web-2.3/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/instrumentation/applicationinsights-web-2.3/gradle.lockfile +++ b/agent/instrumentation/applicationinsights-web-2.3/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/instrumentation/azure-functions-worker-stub/gradle.lockfile b/agent/instrumentation/azure-functions-worker-stub/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/instrumentation/azure-functions-worker-stub/gradle.lockfile +++ b/agent/instrumentation/azure-functions-worker-stub/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/instrumentation/azure-functions/gradle.lockfile b/agent/instrumentation/azure-functions/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/instrumentation/azure-functions/gradle.lockfile +++ b/agent/instrumentation/azure-functions/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/instrumentation/methods/build.gradle.kts b/agent/instrumentation/methods/build.gradle.kts index da38277434e..e5551c71182 100644 --- a/agent/instrumentation/methods/build.gradle.kts +++ b/agent/instrumentation/methods/build.gradle.kts @@ -14,6 +14,7 @@ val otelInstrumentationAlphaVersion: String by project dependencies { compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling") compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations-support") + compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-incubator") // TODO remove when start using io.opentelemetry.instrumentation.javaagent-instrumentation plugin add("codegen", "io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:$otelInstrumentationAlphaVersion") diff --git a/agent/instrumentation/methods/gradle.lockfile b/agent/instrumentation/methods/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/instrumentation/methods/gradle.lockfile +++ b/agent/instrumentation/methods/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentation.java b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentation.java index 20b564da07d..5a24e9639bb 100644 --- a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentation.java +++ b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentation.java @@ -18,7 +18,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.annotation.support.async.AsyncOperationEndSupport; -import io.opentelemetry.instrumentation.api.instrumenter.util.ClassAndMethod; +import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import java.lang.reflect.Method; diff --git a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodSingletons.java b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodSingletons.java index 90ce73a874f..ec71710b84d 100644 --- a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodSingletons.java +++ b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodSingletons.java @@ -12,12 +12,12 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesGetter; +import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.code.CodeAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.code.CodeAttributesGetter; -import io.opentelemetry.instrumentation.api.instrumenter.code.CodeSpanNameExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.util.ClassAndMethod; public final class MethodSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.methods"; diff --git a/agent/instrumentation/micrometer-1.0/gradle.lockfile b/agent/instrumentation/micrometer-1.0/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/agent/instrumentation/micrometer-1.0/gradle.lockfile +++ b/agent/instrumentation/micrometer-1.0/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/runtime-attach/gradle.lockfile b/agent/runtime-attach/gradle.lockfile index 87a82782dbe..a40faf8e5ec 100644 --- a/agent/runtime-attach/gradle.lockfile +++ b/agent/runtime-attach/gradle.lockfile @@ -5,12 +5,12 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.contrib:opentelemetry-runtime-attach-core:1.30.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath -net.bytebuddy:byte-buddy-agent:1.14.8=runtimeClasspath +io.opentelemetry.contrib:opentelemetry-runtime-attach-core:1.32.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/agent/runtime-attach/src/main/java/com/microsoft/applicationinsights/attach/ApplicationInsights.java b/agent/runtime-attach/src/main/java/com/microsoft/applicationinsights/attach/ApplicationInsights.java index 5d123dcf116..a1acec8efea 100644 --- a/agent/runtime-attach/src/main/java/com/microsoft/applicationinsights/attach/ApplicationInsights.java +++ b/agent/runtime-attach/src/main/java/com/microsoft/applicationinsights/attach/ApplicationInsights.java @@ -60,7 +60,7 @@ public static void attach() { String appInsightResourceName = findAppInsightResourceName(); CoreRuntimeAttach runtimeAttach = new CoreRuntimeAttach(appInsightResourceName); - runtimeAttach.attachJavaagentToCurrentJVM(); + runtimeAttach.attachJavaagentToCurrentJvm(); } catch (Throwable t) { logger.log(Level.WARNING, "Fail to runtime attach Application Insights", t); } diff --git a/buildSrc/src/main/kotlin/ai.javaagent-instrumentation.gradle.kts b/buildSrc/src/main/kotlin/ai.javaagent-instrumentation.gradle.kts index d575471e043..286d4cf0c9d 100644 --- a/buildSrc/src/main/kotlin/ai.javaagent-instrumentation.gradle.kts +++ b/buildSrc/src/main/kotlin/ai.javaagent-instrumentation.gradle.kts @@ -17,7 +17,7 @@ dependencies { compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api") - compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv") + compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-incubator") compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api:$otelInstrumentationAlphaVersion") annotationProcessor("com.google.auto.service:auto-service") compileOnly("com.google.auto.service:auto-service") diff --git a/classic-sdk/core/gradle.lockfile b/classic-sdk/core/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/classic-sdk/core/gradle.lockfile +++ b/classic-sdk/core/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/classic-sdk/web/gradle.lockfile b/classic-sdk/web/gradle.lockfile index 1206f0b2aed..20c46019120 100644 --- a/classic-sdk/web/gradle.lockfile +++ b/classic-sdk/web/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath empty= diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index d34ab958dd2..0a202b1bb3c 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -11,10 +11,10 @@ data class DependencySet(val group: String, val version: String, val modules: Li val dependencyVersions = hashMapOf() rootProject.extra["versions"] = dependencyVersions -val otelVersion = "1.32.0" -val otelInstrumentationAlphaVersion = "1.32.0-alpha" -val otelInstrumentationVersion = "1.32.0" -val otelContribAlphaVersion = "1.30.0-alpha" +val otelVersion = "1.35.0" +val otelInstrumentationAlphaVersion = "2.1.0-alpha" +val otelInstrumentationVersion = "2.1.0" +val otelContribAlphaVersion = "1.32.0-alpha" rootProject.extra["otelVersion"] = otelVersion rootProject.extra["otelInstrumentationVersion"] = otelInstrumentationVersion @@ -44,6 +44,7 @@ val slf4jVersion = "2.0.12" val CORE_DEPENDENCIES = listOf( "io.opentelemetry:opentelemetry-semconv:1.30.1-alpha", + "io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-incubator:${otelInstrumentationAlphaVersion}", "com.google.auto.service:auto-service:${autoServiceVersion}", "com.google.auto.service:auto-service-annotations:${autoServiceVersion}", "com.google.auto.value:auto-value:${autoValueVersion}", diff --git a/etw/java/gradle.lockfile b/etw/java/gradle.lockfile index 35e11164fd1..188a940ea8e 100644 --- a/etw/java/gradle.lockfile +++ b/etw/java/gradle.lockfile @@ -5,10 +5,10 @@ com.azure:azure-sdk-bom:1.2.20=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.16.1=runtimeClasspath com.google.guava:guava-bom:33.0.0-jre=runtimeClasspath io.netty:netty-bom:4.1.107.Final=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:1.32.0=runtimeClasspath -io.opentelemetry:opentelemetry-bom-alpha:1.32.0-alpha=runtimeClasspath -io.opentelemetry:opentelemetry-bom:1.32.0=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.1.0-alpha=runtimeClasspath +io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.1.0=runtimeClasspath +io.opentelemetry:opentelemetry-bom-alpha:1.35.0-alpha=runtimeClasspath +io.opentelemetry:opentelemetry-bom:1.35.0=runtimeClasspath org.junit:junit-bom:5.10.2=runtimeClasspath org.slf4j:slf4j-api:2.0.12=runtimeClasspath org.testcontainers:testcontainers-bom:1.19.5=runtimeClasspath diff --git a/licenses/more-licenses.md b/licenses/more-licenses.md index bc0ff3ba4e0..1b94f1c8baf 100644 --- a/licenses/more-licenses.md +++ b/licenses/more-licenses.md @@ -1,7 +1,7 @@ # agent ## Dependency License Report -_2024-02-14 03:31:10 UTC_ +_2024-02-16 10:35:58 PST_ ## Apache License, Version 2.0 **1** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.1` @@ -36,245 +36,240 @@ _2024-02-14 03:31:10 UTC_ > - **POM Project URL**: [http://stephenc.github.com/jcip-annotations](http://stephenc.github.com/jcip-annotations) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**6** **Group:** `com.google.code.findbugs` **Name:** `jsr305` **Version:** `3.0.2` -> - **Manifest License**: Apache License, Version 2.0 (Not Packaged) -> - **POM Project URL**: [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) - -**7** **Group:** `com.google.errorprone` **Name:** `error_prone_annotations` **Version:** `2.24.1` +**6** **Group:** `com.google.errorprone` **Name:** `error_prone_annotations` **Version:** `2.24.1` > - **Manifest Project URL**: [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**8** **Group:** `com.nimbusds` **Name:** `content-type` **Version:** `2.2` +**7** **Group:** `com.nimbusds` **Name:** `content-type` **Version:** `2.2` > - **Manifest Project URL**: [https://connect2id.com](https://connect2id.com) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM Project URL**: [https://bitbucket.org/connect2id/nimbus-content-type](https://bitbucket.org/connect2id/nimbus-content-type) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**9** **Group:** `com.nimbusds` **Name:** `lang-tag` **Version:** `1.7` +**8** **Group:** `com.nimbusds` **Name:** `lang-tag` **Version:** `1.7` > - **Manifest Project URL**: [https://connect2id.com/](https://connect2id.com/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM Project URL**: [https://bitbucket.org/connect2id/nimbus-language-tags](https://bitbucket.org/connect2id/nimbus-language-tags) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**10** **Group:** `com.nimbusds` **Name:** `nimbus-jose-jwt` **Version:** `9.30.2` +**9** **Group:** `com.nimbusds` **Name:** `nimbus-jose-jwt` **Version:** `9.30.2` > - **Manifest Project URL**: [https://connect2id.com](https://connect2id.com) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM Project URL**: [https://bitbucket.org/connect2id/nimbus-jose-jwt](https://bitbucket.org/connect2id/nimbus-jose-jwt) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**11** **Group:** `com.nimbusds` **Name:** `oauth2-oidc-sdk` **Version:** `10.7.1` +**10** **Group:** `com.nimbusds` **Name:** `oauth2-oidc-sdk` **Version:** `10.7.1` > - **Project URL**: [https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions](https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**12** **Group:** `commons-codec` **Name:** `commons-codec` **Version:** `1.16.1` +**11** **Group:** `commons-codec` **Name:** `commons-codec` **Version:** `1.16.1` > - **Project URL**: [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [commons-codec-1.16.1.jar/META-INF/LICENSE.txt](commons-codec-1.16.1.jar/META-INF/LICENSE.txt) - [commons-codec-1.16.1.jar/META-INF/NOTICE.txt](commons-codec-1.16.1.jar/META-INF/NOTICE.txt) -**13** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.107.Final` +**12** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**14** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.107.Final` +**13** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-codec-dns` **Version:** `4.1.107.Final` +**14** **Group:** `io.netty` **Name:** `netty-codec-dns` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-codec-http` **Version:** `4.1.107.Final` +**15** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-codec-http2` **Version:** `4.1.107.Final` +**16** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-codec-socks` **Version:** `4.1.107.Final` +**17** **Group:** `io.netty` **Name:** `netty-codec-socks` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-common` **Version:** `4.1.107.Final` +**18** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-handler` **Version:** `4.1.107.Final` +**19** **Group:** `io.netty` **Name:** `netty-handler` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.107.Final` +**20** **Group:** `io.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-resolver` **Version:** `4.1.107.Final` +**21** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-resolver-dns` **Version:** `4.1.107.Final` +**22** **Group:** `io.netty` **Name:** `netty-resolver-dns` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.107.Final` +**23** **Group:** `io.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-resolver-dns-native-macos` **Version:** `4.1.107.Final` +**24** **Group:** `io.netty` **Name:** `netty-resolver-dns-native-macos` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-tcnative-boringssl-static` **Version:** `2.0.61.Final` +**25** **Group:** `io.netty` **Name:** `netty-tcnative-boringssl-static` **Version:** `2.0.61.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM Project URL**: [https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/](https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**27** **Group:** `io.netty` **Name:** `netty-tcnative-classes` **Version:** `2.0.61.Final` +**26** **Group:** `io.netty` **Name:** `netty-tcnative-classes` **Version:** `2.0.61.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**28** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.107.Final` +**27** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-transport-classes-epoll` **Version:** `4.1.107.Final` +**28** **Group:** `io.netty` **Name:** `netty-transport-classes-epoll` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-transport-classes-kqueue` **Version:** `4.1.107.Final` +**29** **Group:** `io.netty` **Name:** `netty-transport-classes-kqueue` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.107.Final` +**30** **Group:** `io.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **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.netty` **Name:** `netty-transport-native-kqueue` **Version:** `4.1.107.Final` +**31** **Group:** `io.netty` **Name:** `netty-transport-native-kqueue` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**33** **Group:** `io.netty` **Name:** `netty-transport-native-unix-common` **Version:** `4.1.107.Final` +**32** **Group:** `io.netty` **Name:** `netty-transport-native-unix-common` **Version:** `4.1.107.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**34** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.32.0` +**33** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.35.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) -**35** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.32.0-alpha` +**34** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.35.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) -**36** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.32.0` +**35** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.35.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) -**37** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.32.0-alpha` +**36** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.35.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) -**38** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.32.0` +**37** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.35.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) -**39** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.32.0` +**38** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.35.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) -**40** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.32.0` +**39** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.35.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) -**41** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.32.0` +**40** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.35.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) -**42** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.32.0` +**41** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.35.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) -**43** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.32.0` +**42** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.35.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) -**44** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.32.0` +**43** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.35.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) -**45** **Group:** `io.projectreactor` **Name:** `reactor-core` **Version:** `3.5.14` +**44** **Group:** `io.projectreactor` **Name:** `reactor-core` **Version:** `3.5.14` > - **POM Project URL**: [https://github.com/reactor/reactor-core](https://github.com/reactor/reactor-core) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**46** **Group:** `io.projectreactor.netty` **Name:** `reactor-netty-core` **Version:** `1.1.15` +**45** **Group:** `io.projectreactor.netty` **Name:** `reactor-netty-core` **Version:** `1.1.15` > - **POM Project URL**: [https://github.com/reactor/reactor-netty](https://github.com/reactor/reactor-netty) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**47** **Group:** `io.projectreactor.netty` **Name:** `reactor-netty-http` **Version:** `1.1.15` +**46** **Group:** `io.projectreactor.netty` **Name:** `reactor-netty-http` **Version:** `1.1.15` > - **POM Project URL**: [https://github.com/reactor/reactor-netty](https://github.com/reactor/reactor-netty) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**48** **Group:** `net.java.dev.jna` **Name:** `jna` **Version:** `5.14.0` +**47** **Group:** `net.java.dev.jna` **Name:** `jna` **Version:** `5.14.0` > - **POM Project URL**: [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) > - **Embedded license files**: [jna-5.14.0.jar/META-INF/LICENSE](jna-5.14.0.jar/META-INF/LICENSE) -**49** **Group:** `net.java.dev.jna` **Name:** `jna-platform` **Version:** `5.14.0` +**48** **Group:** `net.java.dev.jna` **Name:** `jna-platform` **Version:** `5.14.0` > - **POM Project URL**: [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) > - **Embedded license files**: [jna-platform-5.14.0.jar/META-INF/LICENSE](jna-platform-5.14.0.jar/META-INF/LICENSE) -**50** **Group:** `net.minidev` **Name:** `accessors-smart` **Version:** `2.4.9` +**49** **Group:** `net.minidev` **Name:** `accessors-smart` **Version:** `2.4.9` > - **Project URL**: [https://urielch.github.io/](https://urielch.github.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**51** **Group:** `net.minidev` **Name:** `json-smart` **Version:** `2.4.10` +**50** **Group:** `net.minidev` **Name:** `json-smart` **Version:** `2.4.10` > - **Project URL**: [https://urielch.github.io/](https://urielch.github.io/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**52** **Group:** `org.apache.commons` **Name:** `commons-lang3` **Version:** `3.13.0` +**51** **Group:** `org.apache.commons` **Name:** `commons-lang3` **Version:** `3.13.0` > - **Project URL**: [https://commons.apache.org/proper/commons-lang/](https://commons.apache.org/proper/commons-lang/) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [commons-lang3-3.13.0.jar/META-INF/LICENSE.txt](commons-lang3-3.13.0.jar/META-INF/LICENSE.txt) - [commons-lang3-3.13.0.jar/META-INF/NOTICE.txt](commons-lang3-3.13.0.jar/META-INF/NOTICE.txt) -**53** **Group:** `org.apache.commons` **Name:** `commons-text` **Version:** `1.11.0` +**52** **Group:** `org.apache.commons` **Name:** `commons-text` **Version:** `1.11.0` > - **Project URL**: [https://commons.apache.org/proper/commons-text](https://commons.apache.org/proper/commons-text) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [commons-text-1.11.0.jar/META-INF/LICENSE.txt](commons-text-1.11.0.jar/META-INF/LICENSE.txt) - [commons-text-1.11.0.jar/META-INF/NOTICE.txt](commons-text-1.11.0.jar/META-INF/NOTICE.txt) -**54** **Group:** `org.slf4j` **Name:** `jcl-over-slf4j` **Version:** `2.0.12` +**53** **Group:** `org.slf4j` **Name:** `jcl-over-slf4j` **Version:** `2.0.12` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) @@ -283,63 +278,59 @@ _2024-02-14 03:31:10 UTC_ ## Eclipse Public License - v 1.0 -**55** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.3.14` +**54** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.3.14` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) -**56** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.3.14` +**55** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.3.14` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) -**57** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-classic` **Version:** `0.1.5` +**56** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-classic` **Version:** `0.1.5` > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) -**58** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-core` **Version:** `0.1.5` +**57** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-core` **Version:** `0.1.5` > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) ## GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 -**59** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.3.14` +**58** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.3.14` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) -**60** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.3.14` +**59** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.3.14` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) -**61** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-classic` **Version:** `0.1.5` +**60** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-classic` **Version:** `0.1.5` > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) -**62** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-core` **Version:** `0.1.5` +**61** **Group:** `ch.qos.logback.contrib` **Name:** `logback-json-core` **Version:** `0.1.5` > - **Manifest License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Not Packaged) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) -**63** **Group:** `com.github.spotbugs` **Name:** `spotbugs-annotations` **Version:** `4.8.3` -> - **POM Project URL**: [https://spotbugs.github.io/](https://spotbugs.github.io/) -> - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) - -**64** **Group:** `net.java.dev.jna` **Name:** `jna` **Version:** `5.14.0` +**62** **Group:** `net.java.dev.jna` **Name:** `jna` **Version:** `5.14.0` > - **POM Project URL**: [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) > - **Embedded license files**: [jna-5.14.0.jar/META-INF/LICENSE](jna-5.14.0.jar/META-INF/LICENSE) -**65** **Group:** `net.java.dev.jna` **Name:** `jna-platform` **Version:** `5.14.0` +**63** **Group:** `net.java.dev.jna` **Name:** `jna-platform` **Version:** `5.14.0` > - **POM Project URL**: [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - [https://www.gnu.org/licenses/lgpl-2.1](https://www.gnu.org/licenses/lgpl-2.1) @@ -347,70 +338,70 @@ _2024-02-14 03:31:10 UTC_ ## MIT License -**66** **Group:** `com.azure` **Name:** `azure-core` **Version:** `1.45.1` +**64** **Group:** `com.azure` **Name:** `azure-core` **Version:** `1.45.1` > - **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) -**67** **Group:** `com.azure` **Name:** `azure-core-http-netty` **Version:** `1.13.11` +**65** **Group:** `com.azure` **Name:** `azure-core-http-netty` **Version:** `1.13.11` > - **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) -**68** **Group:** `com.azure` **Name:** `azure-identity` **Version:** `1.11.2` +**66** **Group:** `com.azure` **Name:** `azure-identity` **Version:** `1.11.2` > - **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-json` **Version:** `1.1.0` +**67** **Group:** `com.azure` **Name:** `azure-json` **Version:** `1.1.0` > - **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) -**70** **Group:** `com.azure` **Name:** `azure-monitor-opentelemetry-exporter` **Version:** `1.0.0-beta.15` +**68** **Group:** `com.azure` **Name:** `azure-monitor-opentelemetry-exporter` **Version:** `1.0.0-beta.17` > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**71** **Group:** `com.azure` **Name:** `azure-storage-blob` **Version:** `12.25.1` +**69** **Group:** `com.azure` **Name:** `azure-storage-blob` **Version:** `12.25.1` > - **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) -**72** **Group:** `com.azure` **Name:** `azure-storage-common` **Version:** `12.24.1` +**70** **Group:** `com.azure` **Name:** `azure-storage-common` **Version:** `12.24.1` > - **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) -**73** **Group:** `com.azure` **Name:** `azure-storage-internal-avro` **Version:** `12.10.1` +**71** **Group:** `com.azure` **Name:** `azure-storage-internal-avro` **Version:** `12.10.1` > - **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) -**74** **Group:** `com.github.oshi` **Name:** `oshi-core` **Version:** `6.4.12` +**72** **Group:** `com.github.oshi` **Name:** `oshi-core` **Version:** `6.4.12` > - **Manifest Project URL**: [https://github.com/oshi/oshi/oshi-core](https://github.com/oshi/oshi/oshi-core) > - **Manifest License**: "SPDX-License-Identifier: MIT";link="https://opensource.org/licenses/MIT" (Not Packaged) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**75** **Group:** `com.microsoft.azure` **Name:** `msal4j` **Version:** `1.14.0` +**73** **Group:** `com.microsoft.azure` **Name:** `msal4j` **Version:** `1.14.0` > - **Project URL**: [https://github.com/AzureAD/microsoft-authentication-library-for-java](https://github.com/AzureAD/microsoft-authentication-library-for-java) > - **Manifest License**: "MIT License" (Not Packaged) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**76** **Group:** `com.microsoft.azure` **Name:** `msal4j-persistence-extension` **Version:** `1.2.0` +**74** **Group:** `com.microsoft.azure` **Name:** `msal4j-persistence-extension` **Version:** `1.2.0` > - **POM Project URL**: [https://github.com/AzureAD/microsoft-authentication-extensions-for-java](https://github.com/AzureAD/microsoft-authentication-extensions-for-java) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**77** **Group:** `com.microsoft.jfr` **Name:** `jfr-streaming` **Version:** `1.2.0` +**75** **Group:** `com.microsoft.jfr` **Name:** `jfr-streaming` **Version:** `1.2.0` > - **POM Project URL**: [https://github.com/Microsoft/jfr-streaming](https://github.com/Microsoft/jfr-streaming) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**78** **Group:** `org.slf4j` **Name:** `jcl-over-slf4j` **Version:** `2.0.12` +**76** **Group:** `org.slf4j` **Name:** `jcl-over-slf4j` **Version:** `2.0.12` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) > - **Embedded license files**: [jcl-over-slf4j-2.0.12.jar/META-INF/LICENSE.txt](jcl-over-slf4j-2.0.12.jar/META-INF/LICENSE.txt) -**79** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.12` +**77** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.12` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) > - **Embedded license files**: [slf4j-api-2.0.12.jar/META-INF/LICENSE.txt](slf4j-api-2.0.12.jar/META-INF/LICENSE.txt) ## MIT-0 -**80** **Group:** `org.reactivestreams` **Name:** `reactive-streams` **Version:** `1.0.4` +**78** **Group:** `org.reactivestreams` **Name:** `reactive-streams` **Version:** `1.0.4` > - **Manifest Project URL**: [http://reactive-streams.org](http://reactive-streams.org) > - **POM Project URL**: [http://www.reactive-streams.org/](http://www.reactive-streams.org/) > - **POM License**: MIT-0 - [https://spdx.org/licenses/MIT-0.html](https://spdx.org/licenses/MIT-0.html) diff --git a/smoke-tests/apps/ConnectionStringOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/ConnectionStringOverridesTest.java b/smoke-tests/apps/ConnectionStringOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/ConnectionStringOverridesTest.java index 5b673c7a48d..12e9f8c5ca1 100644 --- a/smoke-tests/apps/ConnectionStringOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/ConnectionStringOverridesTest.java +++ b/smoke-tests/apps/ConnectionStringOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/ConnectionStringOverridesTest.java @@ -99,9 +99,9 @@ private static void testApp(String iKey) throws Exception { // and metrics too List clientMetrics = - testing.mockedIngestion.waitForMetricItems("http.client.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.client.request.duration", 1); List serverMetrics = - testing.mockedIngestion.waitForMetricItems("http.server.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.server.request.duration", 1); verifyHttpClientPreAggregatedMetrics(clientMetrics, iKey); verifyHttpServerPreAggregatedMetrics(serverMetrics, iKey); diff --git a/smoke-tests/apps/HttpHeaders/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java b/smoke-tests/apps/HttpHeaders/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java index 3eba1d47338..b3ac4c2a3c2 100644 --- a/smoke-tests/apps/HttpHeaders/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java +++ b/smoke-tests/apps/HttpHeaders/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java @@ -21,7 +21,8 @@ public String root() { @GetMapping("/serverHeaders") public String serverHeaders(HttpServletResponse response) { - response.setHeader("abc", "testing123"); + response.setHeader("abc-def", "testing123"); + return "OK!"; } @@ -36,7 +37,7 @@ private void callMockCodes200(boolean nope) throws IOException { URL obj = new URL("https://mock.codes/200"); HttpURLConnection connection = (HttpURLConnection) obj.openConnection(); - connection.setRequestProperty("abc", nope ? "nope" : "testing123"); + connection.setRequestProperty("abc-def", nope ? "nope" : "testing123"); // calling getContentType() first, since this triggered a bug previously in the instrumentation // previously connection.getContentType(); diff --git a/smoke-tests/apps/HttpHeaders/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpHeadersOldSemconvTest.java b/smoke-tests/apps/HttpHeaders/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpHeadersOldSemconvTest.java new file mode 100644 index 00000000000..0e447e3cd45 --- /dev/null +++ b/smoke-tests/apps/HttpHeaders/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpHeadersOldSemconvTest.java @@ -0,0 +1,84 @@ +// 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_19; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_20; +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 org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +@UseAgent("applicationinsights-old-semconv.json") +abstract class HttpHeadersOldSemconvTest { + + @RegisterExtension static final SmokeTestExtension testing = SmokeTestExtension.create(); + + @Test + @TargetUri("/serverHeaders") + void testServerHeaders() throws Exception { + Telemetry telemetry = testing.getTelemetry(0); + + assertThat(telemetry.rd.getProperties().get("http.response.header.abc-def")) + .isEqualTo("testing123"); + assertThat(telemetry.rd.getProperties()).containsKey("http.request.header.host"); + assertThat(telemetry.rd.getProperties()).hasSize(3); + assertThat(telemetry.rd.getProperties()) + .containsEntry("_MS.ProcessedByMetricExtractors", "True"); + assertThat(telemetry.rd.getSuccess()).isTrue(); + } + + @Test + @TargetUri("/clientHeaders") + void testClientHeaders() throws Exception { + Telemetry telemetry = testing.getTelemetry(1); + + assertThat(telemetry.rd.getProperties()).containsKey("http.request.header.host"); + assertThat(telemetry.rd.getProperties()).hasSize(2); + assertThat(telemetry.rd.getProperties()) + .containsEntry("_MS.ProcessedByMetricExtractors", "True"); + assertThat(telemetry.rd.getSuccess()).isTrue(); + assertThat(telemetry.rdd1.getProperties().get("http.request.header.abc-def")) + .isEqualTo("testing123"); + assertThat(telemetry.rdd1.getProperties()).containsKey("http.response.header.date"); + assertThat(telemetry.rdd1.getProperties()).hasSize(3); + assertThat(telemetry.rdd1.getProperties()) + .containsEntry("_MS.ProcessedByMetricExtractors", "True"); + assertThat(telemetry.rdd1.getSuccess()).isTrue(); + } + + @Environment(TOMCAT_8_JAVA_8) + static class Tomcat8Java8Test extends HttpHeadersOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_8_OPENJ9) + static class Tomcat8Java8OpenJ9Test extends HttpHeadersOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_11) + static class Tomcat8Java11Test extends HttpHeadersOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_11_OPENJ9) + static class Tomcat8Java11OpenJ9Test extends HttpHeadersOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_17) + static class Tomcat8Java17Test extends HttpHeadersOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_19) + static class Tomcat8Java19Test extends HttpHeadersOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_20) + static class Tomcat8Java20Test extends HttpHeadersOldSemconvTest {} + + @Environment(WILDFLY_13_JAVA_8) + static class Wildfly13Java8Test extends HttpHeadersOldSemconvTest {} + + @Environment(WILDFLY_13_JAVA_8_OPENJ9) + static class Wildfly13Java8OpenJ9Test extends HttpHeadersOldSemconvTest {} +} diff --git a/smoke-tests/apps/HttpHeaders/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpHeadersTest.java b/smoke-tests/apps/HttpHeaders/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpHeadersTest.java index 2219ae26343..5c5778d03ca 100644 --- a/smoke-tests/apps/HttpHeaders/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpHeadersTest.java +++ b/smoke-tests/apps/HttpHeaders/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpHeadersTest.java @@ -27,7 +27,7 @@ abstract class HttpHeadersTest { void testServerHeaders() throws Exception { Telemetry telemetry = testing.getTelemetry(0); - assertThat(telemetry.rd.getProperties().get("http.response.header.abc")) + assertThat(telemetry.rd.getProperties().get("http.response.header.abc-def")) .isEqualTo("testing123"); assertThat(telemetry.rd.getProperties()).containsKey("http.request.header.host"); assertThat(telemetry.rd.getProperties()).hasSize(3); @@ -46,7 +46,7 @@ void testClientHeaders() throws Exception { assertThat(telemetry.rd.getProperties()) .containsEntry("_MS.ProcessedByMetricExtractors", "True"); assertThat(telemetry.rd.getSuccess()).isTrue(); - assertThat(telemetry.rdd1.getProperties().get("http.request.header.abc")) + assertThat(telemetry.rdd1.getProperties().get("http.request.header.abc-def")) .isEqualTo("testing123"); assertThat(telemetry.rdd1.getProperties()).containsKey("http.response.header.date"); assertThat(telemetry.rdd1.getProperties()).hasSize(3); diff --git a/smoke-tests/apps/HttpHeaders/src/smokeTest/resources/applicationinsights-old-semconv.json b/smoke-tests/apps/HttpHeaders/src/smokeTest/resources/applicationinsights-old-semconv.json new file mode 100644 index 00000000000..6307c0deba8 --- /dev/null +++ b/smoke-tests/apps/HttpHeaders/src/smokeTest/resources/applicationinsights-old-semconv.json @@ -0,0 +1,41 @@ +{ + "role": { + "name": "testrolename", + "instance": "testroleinstance" + }, + "sampling": { + "percentage": 100 + }, + "preview": { + "captureHttpServerHeaders": { + "requestHeaders": [ + "host" + ], + "responseHeaders": [ + "abc-def" + ] + }, + "captureHttpClientHeaders": { + "requestHeaders": [ + "abc-def" + ], + "responseHeaders": [ + "date" + ] + }, + "sampling": { + "overrides": [ + { + "attributes": [ + { + "key": "http.request.header.abc_def", + "value": "nope", + "matchType": "strict" + } + ], + "percentage": 0 + } + ] + } + } +} diff --git a/smoke-tests/apps/HttpHeaders/src/smokeTest/resources/applicationinsights.json b/smoke-tests/apps/HttpHeaders/src/smokeTest/resources/applicationinsights.json index 060d425c5ff..b682e9f1e9b 100644 --- a/smoke-tests/apps/HttpHeaders/src/smokeTest/resources/applicationinsights.json +++ b/smoke-tests/apps/HttpHeaders/src/smokeTest/resources/applicationinsights.json @@ -12,12 +12,12 @@ "host" ], "responseHeaders": [ - "abc" + "abc-def" ] }, "captureHttpClientHeaders": { "requestHeaders": [ - "abc" + "abc-def" ], "responseHeaders": [ "date" @@ -28,7 +28,7 @@ { "attributes": [ { - "key": "http.request.header.abc", + "key": "http.request.header.abc-def", "value": "nope", "matchType": "strict" } diff --git a/smoke-tests/apps/HttpPreaggregatedMetrics/src/main/java/com/microsoft/applicationinsights/smoketestapp/HttpPreaggregatedMetricsServlet.java b/smoke-tests/apps/HttpPreaggregatedMetrics/src/main/java/com/microsoft/applicationinsights/smoketestapp/HttpPreaggregatedMetricsServlet.java index 113529ecc66..b1330966c28 100644 --- a/smoke-tests/apps/HttpPreaggregatedMetrics/src/main/java/com/microsoft/applicationinsights/smoketestapp/HttpPreaggregatedMetricsServlet.java +++ b/smoke-tests/apps/HttpPreaggregatedMetrics/src/main/java/com/microsoft/applicationinsights/smoketestapp/HttpPreaggregatedMetricsServlet.java @@ -43,6 +43,12 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) private void httpUrlConnection(String url) throws IOException { URL obj = new URL(url); HttpURLConnection connection = (HttpURLConnection) obj.openConnection(); + try { + // sleep is needed so we can verify a minimum bound on the server pre-aggregated metric + Thread.sleep(200); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } InputStream content = connection.getInputStream(); // drain the content byte[] buffer = new byte[1024]; diff --git a/smoke-tests/apps/HttpPreaggregatedMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpPreaggregatedMetricsTest.java b/smoke-tests/apps/HttpPreaggregatedMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpPreaggregatedMetricsTest.java index 0cbf515fe4b..6ab882e1fcc 100644 --- a/smoke-tests/apps/HttpPreaggregatedMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpPreaggregatedMetricsTest.java +++ b/smoke-tests/apps/HttpPreaggregatedMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HttpPreaggregatedMetricsTest.java @@ -46,9 +46,9 @@ private void testHttpUrlConnectionAndSynthetic(boolean synthetic) throws Excepti verifyHttpclientRequestsAndDependencies("https://mock.codes/200?q=spaces%20test"); List clientMetrics = - testing.mockedIngestion.waitForMetricItems("http.client.duration", 3); + testing.mockedIngestion.waitForMetricItems("http.client.request.duration", 3); List serverMetrics = - testing.mockedIngestion.waitForMetricItems("http.server.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.server.request.duration", 1); verifyHttpClientPreAggregatedMetrics(clientMetrics); verifyHttpServerPreAggregatedMetrics(serverMetrics, synthetic); @@ -161,9 +161,10 @@ private static void validateMetricData( assertThat(dataPoints).hasSize(1); DataPoint dataPoint = dataPoints.get(0); assertThat(dataPoint.getCount()).isEqualTo(1); - assertThat(dataPoint.getValue()).isGreaterThan(0d).isLessThan(60 * 1000.0); - assertThat(dataPoint.getMin()).isGreaterThan(0d).isLessThan(60 * 1000.0); - assertThat(dataPoint.getMax()).isGreaterThan(0d).isLessThan(60 * 1000.0); + double greaterThan = type.equals("server") ? 200.0f : 0.0f; + assertThat(dataPoint.getValue()).isGreaterThan(greaterThan).isLessThan(60 * 1000.0); + assertThat(dataPoint.getMin() * 1000).isGreaterThan(greaterThan).isLessThan(60 * 1000.0); + assertThat(dataPoint.getMax() * 1000).isGreaterThan(greaterThan).isLessThan(60 * 1000.0); Map properties = metricData.getProperties(); String expectedSuccess = "200".equals(resultCode) ? "True" : "False"; if ("client".equals(type)) { diff --git a/smoke-tests/apps/InstrumentationKeyOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/InstrumentationKeyOverridesTest.java b/smoke-tests/apps/InstrumentationKeyOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/InstrumentationKeyOverridesTest.java index e66d95b9e6c..3a61ed8a47c 100644 --- a/smoke-tests/apps/InstrumentationKeyOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/InstrumentationKeyOverridesTest.java +++ b/smoke-tests/apps/InstrumentationKeyOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/InstrumentationKeyOverridesTest.java @@ -88,9 +88,9 @@ private static void testApp(String iKey) throws Exception { // and metrics too List clientMetrics = - testing.mockedIngestion.waitForMetricItems("http.client.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.client.request.duration", 1); List serverMetrics = - testing.mockedIngestion.waitForMetricItems("http.server.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.server.request.duration", 1); verifyHttpClientPreAggregatedMetrics(clientMetrics, iKey); verifyHttpServerPreAggregatedMetrics(serverMetrics, iKey); diff --git a/smoke-tests/apps/OpenTelemetryApiLogBridge/build.gradle.kts b/smoke-tests/apps/OpenTelemetryApiLogBridge/build.gradle.kts index 9c33dedf7e4..399eca57bfc 100644 --- a/smoke-tests/apps/OpenTelemetryApiLogBridge/build.gradle.kts +++ b/smoke-tests/apps/OpenTelemetryApiLogBridge/build.gradle.kts @@ -7,5 +7,5 @@ dependencies { exclude("org.springframework.boot", "spring-boot-starter-tomcat") } implementation("io.opentelemetry:opentelemetry-api:1.27.0") - implementation("io.opentelemetry:opentelemetry-semconv:1.27.0-alpha") + implementation("io.opentelemetry.semconv:opentelemetry-semconv:1.22.0-alpha") } diff --git a/smoke-tests/apps/OpenTelemetryApiLogBridge/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java b/smoke-tests/apps/OpenTelemetryApiLogBridge/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java index 47a6817dfe0..a1d6d360a74 100644 --- a/smoke-tests/apps/OpenTelemetryApiLogBridge/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java +++ b/smoke-tests/apps/OpenTelemetryApiLogBridge/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java @@ -5,7 +5,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.logs.Severity; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; +import io.opentelemetry.semconv.SemanticAttributes; import java.io.PrintWriter; import java.io.StringWriter; import org.springframework.web.bind.annotation.GetMapping; diff --git a/smoke-tests/apps/OpenTelemetryMetric/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java b/smoke-tests/apps/OpenTelemetryMetric/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java index f5d6ee3e8a4..fc4de38b1c7 100644 --- a/smoke-tests/apps/OpenTelemetryMetric/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java +++ b/smoke-tests/apps/OpenTelemetryMetric/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestController.java @@ -35,7 +35,6 @@ public class TestController { GlobalOpenTelemetry.get() .getMeter("trackDoubleHistogramMetric") .histogramBuilder("trackDoubleHistogramMetric") - .setDescription("http.client.duration") .setUnit("ms") .build(); @@ -44,7 +43,6 @@ public class TestController { .getMeter("trackLongHistogramMetric") .histogramBuilder("trackLongHistogramMetric") .ofLongs() - .setDescription("http.client.duration") .setUnit("ms") .build(); diff --git a/smoke-tests/apps/OtlpMetrics/build.gradle.kts b/smoke-tests/apps/OtlpMetrics/build.gradle.kts index f3b66182df4..93a84da349a 100644 --- a/smoke-tests/apps/OtlpMetrics/build.gradle.kts +++ b/smoke-tests/apps/OtlpMetrics/build.gradle.kts @@ -7,7 +7,6 @@ dependencies { exclude("spring-boot-starter-tomcat") } implementation("io.opentelemetry:opentelemetry-api:1.30.0") - implementation("io.opentelemetry:opentelemetry-semconv:1.30.0-alpha") implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:1.30.0") implementation("org.springframework.boot:spring-boot-test:2.7.16") implementation("io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.1.3") diff --git a/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java b/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java index 895c7fee183..eb821df87aa 100644 --- a/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java +++ b/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java @@ -52,14 +52,15 @@ public void testOtlpTelemetry() throws Exception { Envelope standardMetricEnvelope = standardMetricsList.get(0); MetricData standardMetricData = (MetricData) ((Data) standardMetricEnvelope.getData()).getBaseData(); - assertThat(standardMetricData.getMetrics().get(0).getName()).isEqualTo("http.server.duration"); + assertThat(standardMetricData.getMetrics().get(0).getName()) + .isEqualTo("http.server.request.duration"); assertThat(standardMetricData.getProperties().get("_MS.IsAutocollected")).isEqualTo("True"); // verify Statsbeat sent to the breeze endpoint verifyStatsbeatSentToBreezeEndpoint(); // verify custom histogram metric 'histogram-test-otlp-exporter' and otel metric - // 'http.server.duration' sent to OTLP endpoint + // 'http.server.request.duration' sent to OTLP endpoint // verify Statsbeat doesn't get sent to OTLP endpoint verifyMetricsSentToOtlpEndpoint(); } @@ -81,7 +82,7 @@ private void verifyMetricsSentToOtlpEndpoint() { testing.mockedOtlpIngestion.extractMetricsFromRequests(requests); assertThat(metrics) .extracting(Metric::getName) - .contains("histogram-test-otlp-exporter", "http.server.duration") + .contains("histogram-test-otlp-exporter", "http.server.request.duration") .doesNotContain("Attach", "Feature"); // statsbeat }); } @@ -97,7 +98,7 @@ private static boolean isHistogramMetric(Envelope envelope) { private static boolean isStandardMetric(Envelope envelope) { if (envelope.getData().getBaseType().equals("MetricData")) { MetricData data = (MetricData) ((Data) envelope.getData()).getBaseData(); - return data.getMetrics().get(0).getName().equals("http.server.duration"); + return data.getMetrics().get(0).getName().equals("http.server.request.duration"); } return false; } diff --git a/smoke-tests/apps/PreAggMetricsWithRoleNameOverridesAndSampling/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/PreAggMetricsWithRoleNameOverridesAndSamplingTest.java b/smoke-tests/apps/PreAggMetricsWithRoleNameOverridesAndSampling/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/PreAggMetricsWithRoleNameOverridesAndSamplingTest.java index d2496b975fe..6615e55bbe9 100644 --- a/smoke-tests/apps/PreAggMetricsWithRoleNameOverridesAndSampling/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/PreAggMetricsWithRoleNameOverridesAndSamplingTest.java +++ b/smoke-tests/apps/PreAggMetricsWithRoleNameOverridesAndSampling/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/PreAggMetricsWithRoleNameOverridesAndSamplingTest.java @@ -67,9 +67,9 @@ private void testApp(String roleName) throws Exception { for (Envelope envelope : metricsEnvelops) { MetricData metricData = (MetricData) ((Data) envelope.getData()).getBaseData(); String name = metricData.getMetrics().get(0).getName(); - if ("http.client.duration".equals(name)) { + if ("http.client.request.duration".equals(name)) { clientMetrics.add(envelope); - } else if ("http.server.duration".equals(name)) { + } else if ("http.server.request.duration".equals(name)) { serverMetrics.add(envelope); } } diff --git a/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/AksRoleNameOverridesTest.java b/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/AksRoleNameOverridesTest.java index f787ce0ac2a..d1bdf154ac1 100644 --- a/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/AksRoleNameOverridesTest.java +++ b/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/AksRoleNameOverridesTest.java @@ -58,13 +58,13 @@ private static void verifyRoleNameAndInstance(String roleName, String roleInstan assertThat(mdList.get(0).getTags()).containsEntry("ai.cloud.roleInstance", roleInstance); List clientMetrics = - testing.mockedIngestion.waitForMetricItems("http.client.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.client.request.duration", 1); Map clientTags = clientMetrics.get(0).getTags(); assertThat(clientTags.get("ai.cloud.role")).isEqualTo(roleName); assertThat(clientTags.get("ai.cloud.roleInstance")).isEqualTo(roleInstance); List serverMetrics = - testing.mockedIngestion.waitForMetricItems("http.server.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.server.request.duration", 1); Map serverTags = serverMetrics.get(0).getTags(); assertThat(serverTags.get("ai.cloud.role")).isEqualTo(roleName); assertThat(serverTags.get("ai.cloud.roleInstance")).isEqualTo(roleInstance); diff --git a/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/RoleNameOverridesTest.java b/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/RoleNameOverridesTest.java index cbd85e8d0ed..c1bc7bb3e10 100644 --- a/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/RoleNameOverridesTest.java +++ b/smoke-tests/apps/RoleNameOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/RoleNameOverridesTest.java @@ -99,9 +99,9 @@ private static void testApp(String roleName) throws Exception { // and metrics too List clientMetrics = - testing.mockedIngestion.waitForMetricItems("http.client.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.client.request.duration", 1); List serverMetrics = - testing.mockedIngestion.waitForMetricItems("http.server.duration", 1); + testing.mockedIngestion.waitForMetricItems("http.server.request.duration", 1); verifyHttpClientPreAggregatedMetrics(clientMetrics, roleName); verifyHttpServerPreAggregatedMetrics(serverMetrics, roleName); diff --git a/smoke-tests/apps/SamplingOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/SamplingOverridesOldSemconvTest.java b/smoke-tests/apps/SamplingOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/SamplingOverridesOldSemconvTest.java new file mode 100644 index 00000000000..1936188ee3f --- /dev/null +++ b/smoke-tests/apps/SamplingOverrides/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/SamplingOverridesOldSemconvTest.java @@ -0,0 +1,127 @@ +// 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_19; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_20; +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 java.util.concurrent.TimeUnit.NANOSECONDS; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.assertj.core.api.Assertions.assertThat; + +import com.microsoft.applicationinsights.smoketest.schemav2.Data; +import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; +import com.microsoft.applicationinsights.smoketest.schemav2.RemoteDependencyData; +import com.microsoft.applicationinsights.smoketest.schemav2.RequestData; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +@UseAgent("applicationinsights-old-semconv.json") +abstract class SamplingOverridesOldSemconvTest { + + @RegisterExtension static final SmokeTestExtension testing = SmokeTestExtension.create(); + + @Test + @TargetUri(value = "/health-check", callCount = 100) + void testSampling() throws Exception { + // super super low chance that number of sampled requests is less than 25 + long start = System.nanoTime(); + while (testing.mockedIngestion.getCountForType("RequestData") < 25 + && NANOSECONDS.toSeconds(System.nanoTime() - start) < 10) {} + // wait ten more seconds to before checking that we didn't receive too many + Thread.sleep(SECONDS.toMillis(10)); + int requestCount = testing.mockedIngestion.getCountForType("RequestData"); + int dependencyCount = testing.mockedIngestion.getCountForType("RemoteDependencyData"); + int logCount = testing.mockedIngestion.getCountForType("MessageData"); + // super super low chance that number of sampled requests/dependencies + // is less than 25 or greater than 75 + assertThat(requestCount).isGreaterThanOrEqualTo(25); + assertThat(dependencyCount).isGreaterThanOrEqualTo(25); + assertThat(requestCount).isLessThanOrEqualTo(75); + assertThat(dependencyCount).isLessThanOrEqualTo(75); + assertThat(logCount).isEqualTo(100); + } + + @Test + @TargetUri("/noisy-jdbc") + void testNoisyJdbc() throws Exception { + List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); + Thread.sleep(10000); + assertThat(testing.mockedIngestion.getCountForType("RemoteDependencyData")).isZero(); + + Envelope rdEnvelope = rdList.get(0); + + assertThat(rdEnvelope.getSampleRate()).isNull(); + + RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); + + assertThat(rd.getSuccess()).isTrue(); + } + + @Test + @TargetUri("/regular-jdbc") + void testRegularJdbc() throws Exception { + List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); + + Envelope rdEnvelope = rdList.get(0); + String operationId = rdEnvelope.getTags().get("ai.operation.id"); + + List rddList = + testing.mockedIngestion.waitForItemsInOperation("RemoteDependencyData", 1, operationId); + assertThat(testing.mockedIngestion.getCountForType("EventData")).isZero(); + + Envelope rddEnvelope = rddList.get(0); + + assertThat(rdEnvelope.getSampleRate()).isNull(); + assertThat(rddEnvelope.getSampleRate()).isNull(); + + RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); + RemoteDependencyData rdd = + (RemoteDependencyData) ((Data) rddEnvelope.getData()).getBaseData(); + + assertThat(rd.getSuccess()).isTrue(); + + assertThat(rdd.getType()).isEqualTo("SQL"); + assertThat(rdd.getTarget()).isEqualTo("hsqldb | testdb"); + assertThat(rdd.getName()).isEqualTo("SELECT testdb.abc"); + assertThat(rdd.getData()).isEqualTo("select * from abc"); + assertThat(rdd.getSuccess()).isTrue(); + + SmokeTestExtension.assertParentChild(rd, rdEnvelope, rddEnvelope, "GET /SamplingOverrides/*"); + } + + @Environment(TOMCAT_8_JAVA_8) + static class Tomcat8Java8Test extends SamplingOverridesOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_8_OPENJ9) + static class Tomcat8Java8OpenJ9Test extends SamplingOverridesOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_11) + static class Tomcat8Java11Test extends SamplingOverridesOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_11_OPENJ9) + static class Tomcat8Java11OpenJ9Test extends SamplingOverridesOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_17) + static class Tomcat8Java17Test extends SamplingOverridesOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_19) + static class Tomcat8Java19Test extends SamplingOverridesOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_20) + static class Tomcat8Java20Test extends SamplingOverridesOldSemconvTest {} + + @Environment(WILDFLY_13_JAVA_8) + static class Wildfly13Java8Test extends SamplingOverridesOldSemconvTest {} + + @Environment(WILDFLY_13_JAVA_8_OPENJ9) + static class Wildfly13Java8OpenJ9Test extends SamplingOverridesOldSemconvTest {} +} diff --git a/smoke-tests/apps/SamplingOverrides/src/smokeTest/resources/applicationinsights-old-semconv.json b/smoke-tests/apps/SamplingOverrides/src/smokeTest/resources/applicationinsights-old-semconv.json new file mode 100644 index 00000000000..94cb559dad9 --- /dev/null +++ b/smoke-tests/apps/SamplingOverrides/src/smokeTest/resources/applicationinsights-old-semconv.json @@ -0,0 +1,43 @@ +{ + "role": { + "name": "testrolename", + "instance": "testroleinstance" + }, + "sampling": { + "percentage": 100 + }, + "preview": { + "sampling": { + "overrides": [ + { + "telemetryType": "request", + "attributes": [ + { + "key": "http.url", + "value": ".*/health-check", + "matchType": "regexp" + } + ], + "percentage": 50, + "id": "filter out health check" + }, + { + "telemetryType": "dependency", + "attributes": [ + { + "key": "db.statement", + "value": "select count(*) from abc", + "matchType": "strict" + } + ], + "percentage": 0, + "id": "filter out noisy jdbc" + }, + { + "telemetryType": "trace", + "percentage": 100 + } + ] + } + } +} diff --git a/smoke-tests/apps/SamplingOverrides/src/smokeTest/resources/applicationinsights.json b/smoke-tests/apps/SamplingOverrides/src/smokeTest/resources/applicationinsights.json index 94cb559dad9..e2812ea0d66 100644 --- a/smoke-tests/apps/SamplingOverrides/src/smokeTest/resources/applicationinsights.json +++ b/smoke-tests/apps/SamplingOverrides/src/smokeTest/resources/applicationinsights.json @@ -13,7 +13,7 @@ "telemetryType": "request", "attributes": [ { - "key": "http.url", + "key": "url.path", "value": ".*/health-check", "matchType": "regexp" } diff --git a/smoke-tests/apps/SpringBootAuto/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/SpringBootAutoTest.java b/smoke-tests/apps/SpringBootAuto/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/SpringBootAutoTest.java index 25ad3479a77..1b216922f8e 100644 --- a/smoke-tests/apps/SpringBootAuto/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/SpringBootAutoTest.java +++ b/smoke-tests/apps/SpringBootAuto/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/SpringBootAutoTest.java @@ -33,7 +33,6 @@ void doMostBasicTest() throws Exception { .hasEntrySatisfying( "ai.user.userAgent", v -> assertThat(v).startsWith("Apache-HttpClient/")); assertThat(telemetry.rdEnvelope.getTags()).containsKey("ai.location.ip"); - assertThat(telemetry.rd.getName()).isEqualTo("GET /SpringBootAuto/test"); assertThat(telemetry.rd.getUrl()).matches("http://localhost:[0-9]+/SpringBootAuto/test"); assertThat(telemetry.rd.getResponseCode()).isEqualTo("200"); 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 0c98624a885..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 @@ -9,6 +9,7 @@ import java.util.Arrays; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.slf4j.MDC; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -37,6 +38,14 @@ public String sensitiveDataInUrl() { return "Test sensitive data in URL"; } + @GetMapping("/delete-existing-log-attribute") + public String deleteExistingLogAttribute() { + MDC.put("toBeDeletedAttributeKey", "toBeDeletedAttributeValue"); + logger.info("custom property from MDC"); + + return "delete existing log attribute"; + } + @GetMapping("/test-non-string-strict-span-attributes") public String testNonStringStrictSpanAttributes() { Span.current() diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorDeleteLogAttribute.java b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorDeleteLogAttribute.java new file mode 100644 index 00000000000..134831f12f3 --- /dev/null +++ b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorDeleteLogAttribute.java @@ -0,0 +1,72 @@ +// 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_19; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_20; +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 java.util.Map; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +@UseAgent("applicationinsights-delete-existing-attribute.json") +abstract class TelemetryProcessorDeleteLogAttribute { + + @RegisterExtension static final SmokeTestExtension testing = SmokeTestExtension.create(); + + @Test + @TargetUri("/delete-existing-log-attribute") + void deleteExistingLogAttribute() throws Exception { + Telemetry telemetry = testing.getTelemetry(0); + assertThat(telemetry.rd.getName()) + .isEqualTo("GET /TelemetryProcessors/delete-existing-log-attribute"); + assertThat(telemetry.rd.getProperties().get("toBeDeletedAttributeKey")).isNull(); + + List logs = testing.mockedIngestion.getMessageDataInRequest(1); + MessageData log = logs.get(0); + assertThat(log.getMessage()).isEqualTo("custom property from MDC"); + Map properties = log.getProperties(); + assertThat(properties.get("toBeDeletedAttributeKey")).isNull(); + assertThat(properties.get("LoggerName")).isEqualTo("smoketestappcontroller"); + assertThat(properties.get("SourceType")).isEqualTo("Logger"); + assertThat(properties.get("ThreadName")).isNotNull(); + } + + @Environment(TOMCAT_8_JAVA_8) + static class Tomcat8Java8Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(TOMCAT_8_JAVA_8_OPENJ9) + static class Tomcat8Java8OpenJ9Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(TOMCAT_8_JAVA_11) + static class Tomcat8Java11Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(TOMCAT_8_JAVA_11_OPENJ9) + static class Tomcat8Java11OpenJ9Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(TOMCAT_8_JAVA_17) + static class Tomcat8Java17Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(TOMCAT_8_JAVA_19) + static class Tomcat8Java19Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(TOMCAT_8_JAVA_20) + static class Tomcat8Java20Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(WILDFLY_13_JAVA_8) + static class Wildfly13Java8Test extends TelemetryProcessorDeleteLogAttribute {} + + @Environment(WILDFLY_13_JAVA_8_OPENJ9) + static class Wildfly13Java8OpenJ9Test extends TelemetryProcessorDeleteLogAttribute {} +} diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorsOldSemconvTest.java b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorsOldSemconvTest.java new file mode 100644 index 00000000000..b65f4e74af6 --- /dev/null +++ b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorsOldSemconvTest.java @@ -0,0 +1,102 @@ +// 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_19; +import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_20; +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("applicationinsights-old-semconv.json") +abstract class TelemetryProcessorsOldSemconvTest { + + @RegisterExtension static final SmokeTestExtension testing = SmokeTestExtension.create(); + + @Test + @TargetUri("/test") + void doMostBasicTest() throws Exception { + Telemetry telemetry = testing.getTelemetry(0); + + assertThat(telemetry.rd.getProperties()).containsEntry("attribute1", "testValue1"); + assertThat(telemetry.rd.getProperties()).containsEntry("attribute2", "testValue2"); + assertThat(telemetry.rd.getProperties()).containsEntry("sensitiveAttribute1", "sensitiveData1"); + assertThat(telemetry.rd.getProperties()).containsEntry("httpPath", "/TelemetryProcessors/test"); + assertThat(telemetry.rd.getProperties()).hasSize(5); + assertThat(telemetry.rd.getProperties()) + .containsEntry("_MS.ProcessedByMetricExtractors", "True"); + assertThat(telemetry.rd.getSuccess()).isTrue(); + // Log processor test + List logs = testing.mockedIngestion.getMessageDataInRequest(1); + MessageData md1 = logs.get(0); + assertThat(md1.getMessage()).isEqualTo("testValue1::testValue2"); + } + + @Test + @TargetUri("/sensitivedata") + void doSimpleTestPiiData() throws Exception { + Telemetry telemetry = testing.getTelemetry(0); + + assertThat(telemetry.rd.getName()).isEqualTo("testValue1::testValue2"); + assertThat(telemetry.rd.getProperties()).containsEntry("attribute1", "testValue1"); + assertThat(telemetry.rd.getProperties()).containsEntry("attribute2", "testValue2"); + assertThat(telemetry.rd.getProperties()).containsEntry("sensitiveAttribute1", "redacted"); + assertThat(telemetry.rd.getProperties()) + .containsEntry("httpPath", "/TelemetryProcessors/sensitivedata"); + assertThat(telemetry.rd.getProperties()).hasSize(5); + assertThat(telemetry.rd.getProperties()) + .containsEntry("_MS.ProcessedByMetricExtractors", "True"); + assertThat(telemetry.rd.getSuccess()).isTrue(); + } + + @Test + @TargetUri("/user/123") + void shouldMask() throws Exception { + + Telemetry telemetry = testing.getTelemetry(0); + + String url = telemetry.rd.getUrl(); + + assertThat(url).startsWith("http://localhost:").endsWith("/TelemetryProcessors/user/***"); + // We don't test the port that is different for each test execution + + } + + @Environment(TOMCAT_8_JAVA_8) + static class Tomcat8Java8Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_8_OPENJ9) + static class Tomcat8Java8OpenJ9Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_11) + static class Tomcat8Java11Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_11_OPENJ9) + static class Tomcat8Java11OpenJ9Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_17) + static class Tomcat8Java17Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_19) + static class Tomcat8Java19Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(TOMCAT_8_JAVA_20) + static class Tomcat8Java20Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(WILDFLY_13_JAVA_8) + static class Wildfly13Java8Test extends TelemetryProcessorsOldSemconvTest {} + + @Environment(WILDFLY_13_JAVA_8_OPENJ9) + static class Wildfly13Java8OpenJ9Test extends TelemetryProcessorsOldSemconvTest {} +} diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorsTest.java b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorsTest.java index a91d47b9150..846b31e6e14 100644 --- a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorsTest.java +++ b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/TelemetryProcessorsTest.java @@ -32,7 +32,7 @@ void doMostBasicTest() throws Exception { assertThat(telemetry.rd.getProperties()).containsEntry("attribute1", "testValue1"); assertThat(telemetry.rd.getProperties()).containsEntry("attribute2", "testValue2"); assertThat(telemetry.rd.getProperties()).containsEntry("sensitiveAttribute1", "sensitiveData1"); - assertThat(telemetry.rd.getProperties().get("httpPath")).isEqualTo("/TelemetryProcessors/test"); + assertThat(telemetry.rd.getProperties()).containsEntry("httpPath", "/TelemetryProcessors/test"); assertThat(telemetry.rd.getProperties()).hasSize(5); assertThat(telemetry.rd.getProperties()) .containsEntry("_MS.ProcessedByMetricExtractors", "True"); @@ -52,8 +52,8 @@ void doSimpleTestPiiData() throws Exception { assertThat(telemetry.rd.getProperties()).containsEntry("attribute1", "testValue1"); assertThat(telemetry.rd.getProperties()).containsEntry("attribute2", "testValue2"); assertThat(telemetry.rd.getProperties()).containsEntry("sensitiveAttribute1", "redacted"); - assertThat(telemetry.rd.getProperties().get("httpPath")) - .isEqualTo("/TelemetryProcessors/sensitivedata"); + assertThat(telemetry.rd.getProperties()) + .containsEntry("httpPath", "/TelemetryProcessors/sensitivedata"); assertThat(telemetry.rd.getProperties()).hasSize(5); assertThat(telemetry.rd.getProperties()) .containsEntry("_MS.ProcessedByMetricExtractors", "True"); diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights-delete-existing-attribute.json b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights-delete-existing-attribute.json new file mode 100644 index 00000000000..97af4d335a3 --- /dev/null +++ b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights-delete-existing-attribute.json @@ -0,0 +1,24 @@ +{ + "role": { + "name": "testrolename", + "instance": "testroleinstance" + }, + "sampling": { + "percentage": 100 + }, + "preview": { + "processors": [ + { + "type": "attribute", + "actions": [ + { + "key": "toBeDeletedAttributeKey", + "action": "delete" + } + ], + "id": "attributes/delete" + } + ] + } +} + diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights-old-semconv.json b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights-old-semconv.json new file mode 100644 index 00000000000..98769f3ce89 --- /dev/null +++ b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights-old-semconv.json @@ -0,0 +1,114 @@ +{ + "role": { + "name": "testrolename", + "instance": "testroleinstance" + }, + "sampling": { + "percentage": 100 + }, + "preview": { + "processors": [ + { + "type": "attribute", + "actions": [ + { + "key": "attribute1", + "value": "testValue", + "action": "insert" + }, + { + "key": "attribute2", + "value": "testValue2", + "action": "insert" + }, + { + "key": "sensitiveAttribute1", + "value": "sensitiveData1", + "action": "insert" + } + ], + "id": "attributes/insert" + }, + { + "type": "attribute", + "actions": [ + { + "key": "attribute1", + "value": "testValue1", + "action": "update" + } + ], + "id": "attributes/extractHttpMethod" + }, + { + "type": "attribute", + "include": { + "matchType": "regexp", + "spanNames": [ + "/sensitivedata" + ] + }, + "actions": [ + { + "key": "sensitiveAttribute1", + "value": "redacted", + "action": "update" + } + ], + "id": "attributes/maskSensitiveData" + }, + { + "type": "span", + "include": { + "matchType": "regexp", + "spanNames": [ + "/sensitivedata" + ] + }, + "name": { + "fromAttributes": [ + "attribute1", + "attribute2" + ], + "separator": "::" + }, + "id": "attributes/fromAttributeTest" + }, + { + "type": "attribute", + "actions": [ + { + "key": "http.url", + "pattern": "https?://[^/]+(?/[^?]*)", + "action": "extract" + } + ], + "id": "attributes/extract" + }, + { + "type": "attribute", + "actions": [ + { + "key": "http.url", + "pattern": "user\\/\\d+", + "replace": "user\\/***", + "action": "mask" + } + ], + "id": "attributes/mask" + }, + { + "type": "log", + "body": { + "fromAttributes": [ + "attribute1", + "attribute2" + ], + "separator": "::" + }, + "id": "log/fromAttribute" + } + ] + } +} + diff --git a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights.json b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights.json index ea9be45a64e..9ca6d9a2a4f 100644 --- a/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights.json +++ b/smoke-tests/apps/TelemetryProcessors/src/smokeTest/resources/applicationinsights.json @@ -78,8 +78,8 @@ "type": "attribute", "actions": [ { - "key": "http.url", - "pattern": "https?://[^/]+(?/[^?]*)", + "key": "url.path", + "pattern": "(?/[^?]*)", "action": "extract" } ], @@ -89,7 +89,7 @@ "type": "attribute", "actions": [ { - "key": "http.url", + "key": "url.path", "pattern": "user\\/\\d+", "replace": "user\\/***", "action": "mask"