From 71d589456fd3713a13ffa8c7382b3989d788df1e Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 12 Jan 2026 16:12:38 +0100 Subject: [PATCH] Use MeasurementUnit for Metrics --- .../samples/spring7/web/MetricController.java | 9 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 2 +- .../spring/boot4/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/boot4/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/boot4/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/boot4/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/boot/jakarta/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/boot/jakarta/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/boot/jakarta/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../samples/spring/boot/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../samples/spring/boot/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/boot/jakarta/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../samples/spring/boot/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../samples/spring/boot/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../spring/jakarta/web/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../samples/spring/web/MetricController.java | 7 ++- .../io/sentry/systemtest/MetricsSystemTest.kt | 4 +- .../api/sentry-system-test-support.api | 3 +- .../io/sentry/systemtest/util/TestHelper.kt | 10 +++- sentry/api/sentry.api | 42 +++++++------- .../java/io/sentry/metrics/IMetricsApi.java | 23 +++++--- .../java/io/sentry/metrics/MetricsApi.java | 27 ++++++--- .../io/sentry/metrics/NoOpMetricsApi.java | 21 ++++--- sentry/src/test/java/io/sentry/ScopesTest.kt | 55 ++++++++++--------- 37 files changed, 214 insertions(+), 132 deletions(-) diff --git a/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring7/web/MetricController.java b/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring7/web/MetricController.java index d29fc1a89a..5f4eda9083 100644 --- a/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring7/web/MetricController.java +++ b/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring7/web/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring7.web; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable("count") Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") - String distribution(@PathVariable("count") Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + String distribution(@PathVariable Long count) { + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-7/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-7/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index 9c9bb8baa8..e86e1a9e05 100644 --- a/sentry-samples/sentry-samples-spring-7/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-7/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot4/MetricController.java b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot4/MetricController.java index f9163349a9..420568c8f5 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot4/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot4/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot4; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot4/MetricController.java b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot4/MetricController.java index f9163349a9..420568c8f5 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot4/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot4/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot4; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-4-webflux/src/main/java/io/sentry/samples/spring/boot4/MetricController.java b/sentry-samples/sentry-samples-spring-boot-4-webflux/src/main/java/io/sentry/samples/spring/boot4/MetricController.java index f9163349a9..420568c8f5 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-webflux/src/main/java/io/sentry/samples/spring/boot4/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-4-webflux/src/main/java/io/sentry/samples/spring/boot4/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot4; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-4-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-4-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-4-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot4/MetricController.java b/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot4/MetricController.java index f9163349a9..420568c8f5 100644 --- a/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot4/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot4/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot4; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-4/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-4/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-4/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-4/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java index 8c6203c09e..e9f6f4d4b0 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot.jakarta; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java index 8c6203c09e..e9f6f4d4b0 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot.jakarta; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java b/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java index 8c6203c09e..e9f6f4d4b0 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot.jakarta; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/MetricController.java b/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/MetricController.java index 2f1dabf784..21d9a87d66 100644 --- a/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/main/java/io/sentry/samples/spring/boot/MetricController.java b/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/main/java/io/sentry/samples/spring/boot/MetricController.java index 2f1dabf784..21d9a87d66 100644 --- a/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/main/java/io/sentry/samples/spring/boot/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/main/java/io/sentry/samples/spring/boot/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-opentelemetry/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java b/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java index 8c6203c09e..e9f6f4d4b0 100644 --- a/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/main/java/io/sentry/samples/spring/boot/jakarta/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot.jakarta; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-webflux-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot-webflux/src/main/java/io/sentry/samples/spring/boot/MetricController.java b/sentry-samples/sentry-samples-spring-boot-webflux/src/main/java/io/sentry/samples/spring/boot/MetricController.java index 2f1dabf784..21d9a87d66 100644 --- a/sentry-samples/sentry-samples-spring-boot-webflux/src/main/java/io/sentry/samples/spring/boot/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot-webflux/src/main/java/io/sentry/samples/spring/boot/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot-webflux/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-boot/src/main/java/io/sentry/samples/spring/boot/MetricController.java b/sentry-samples/sentry-samples-spring-boot/src/main/java/io/sentry/samples/spring/boot/MetricController.java index 2f1dabf784..21d9a87d66 100644 --- a/sentry-samples/sentry-samples-spring-boot/src/main/java/io/sentry/samples/spring/boot/MetricController.java +++ b/sentry-samples/sentry-samples-spring-boot/src/main/java/io/sentry/samples/spring/boot/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.boot; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-boot/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-boot/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index a379681adb..c5007479f8 100644 --- a/sentry-samples/sentry-samples-spring-boot/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-boot/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring-jakarta/src/main/java/io/sentry/samples/spring/jakarta/web/MetricController.java b/sentry-samples/sentry-samples-spring-jakarta/src/main/java/io/sentry/samples/spring/jakarta/web/MetricController.java index fb1526fb8a..4f7b90e265 100644 --- a/sentry-samples/sentry-samples-spring-jakarta/src/main/java/io/sentry/samples/spring/jakarta/web/MetricController.java +++ b/sentry-samples/sentry-samples-spring-jakarta/src/main/java/io/sentry/samples/spring/jakarta/web/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.jakarta.web; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable("count") Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable("count") Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index 6450307e22..9c9b479fe8 100644 --- a/sentry-samples/sentry-samples-spring-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring-jakarta/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-samples/sentry-samples-spring/src/main/java/io/sentry/samples/spring/web/MetricController.java b/sentry-samples/sentry-samples-spring/src/main/java/io/sentry/samples/spring/web/MetricController.java index 82ca41b73c..0221982084 100644 --- a/sentry-samples/sentry-samples-spring/src/main/java/io/sentry/samples/spring/web/MetricController.java +++ b/sentry-samples/sentry-samples-spring/src/main/java/io/sentry/samples/spring/web/MetricController.java @@ -1,5 +1,6 @@ package io.sentry.samples.spring.web; +import io.sentry.MeasurementUnit; import io.sentry.Sentry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,13 +22,15 @@ String count() { @GetMapping("gauge/{count}") String gauge(@PathVariable("count") Long count) { - Sentry.metrics().gauge("memory.free", count.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", count.doubleValue(), MeasurementUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{count}") String distribution(@PathVariable("count") Long count) { - Sentry.metrics().distribution("distributionMetric", count.doubleValue(), "child"); + Sentry.metrics() + .distribution( + "distributionMetric", count.doubleValue(), MeasurementUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } diff --git a/sentry-samples/sentry-samples-spring/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt b/sentry-samples/sentry-samples-spring/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt index 3a4b586b4f..f5206d6ccb 100644 --- a/sentry-samples/sentry-samples-spring/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt +++ b/sentry-samples/sentry-samples-spring/src/test/kotlin/io/sentry/systemtest/MetricsSystemTest.kt @@ -36,7 +36,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0) + testHelper.doesContainMetric(event, "memory.free", "gauge", 14.0, "byte") } } @@ -49,7 +49,7 @@ class MetricsSystemTest { Thread.sleep(10000) testHelper.ensureMetricsReceived { event, header -> - testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0) + testHelper.doesContainMetric(event, "distributionMetric", "distribution", 23.0, "millisecond") } } } diff --git a/sentry-system-test-support/api/sentry-system-test-support.api b/sentry-system-test-support/api/sentry-system-test-support.api index 406b246a82..dfc92d6e92 100644 --- a/sentry-system-test-support/api/sentry-system-test-support.api +++ b/sentry-system-test-support/api/sentry-system-test-support.api @@ -570,7 +570,8 @@ public final class io/sentry/systemtest/util/SentryMockServerClient : io/sentry/ public final class io/sentry/systemtest/util/TestHelper { public fun (Ljava/lang/String;)V public final fun doesContainLogWithBody (Lio/sentry/SentryLogEvents;Ljava/lang/String;)Z - public final fun doesContainMetric (Lio/sentry/SentryMetricsEvents;Ljava/lang/String;Ljava/lang/String;D)Z + public final fun doesContainMetric (Lio/sentry/SentryMetricsEvents;Ljava/lang/String;Ljava/lang/String;DLjava/lang/String;)Z + public static synthetic fun doesContainMetric$default (Lio/sentry/systemtest/util/TestHelper;Lio/sentry/SentryMetricsEvents;Ljava/lang/String;Ljava/lang/String;DLjava/lang/String;ILjava/lang/Object;)Z public final fun doesEventHaveExceptionMessage (Lio/sentry/SentryEvent;Ljava/lang/String;)Z public final fun doesEventHaveFlag (Lio/sentry/SentryEvent;Ljava/lang/String;Z)Z public final fun doesTransactionContainSpanWithDescription (Lio/sentry/protocol/SentryTransaction;Ljava/lang/String;)Z diff --git a/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt b/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt index d6a2c3470d..5056c832c5 100644 --- a/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt +++ b/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt @@ -124,13 +124,19 @@ class TestHelper(backendUrl: String) { name: String, type: String, value: Double, + unit: String? = null, ): Boolean { val metricItem = metrics.items.firstOrNull { metricItem -> - metricItem.name == name && metricItem.type == type && metricItem.value == value + metricItem.name == name && + metricItem.type == type && + metricItem.value == value && + (unit == null || metricItem.unit == unit) } if (metricItem == null) { - println("Unable to find metric item with name $name, type $type and value $value in metrics:") + println( + "Unable to find metric item with name $name, type $type, value $value${if (unit != null) " and unit $unit" else ""} in metrics:" + ) logObject(metrics) return false } diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 1970c3fefb..bccc2cc2d5 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -5209,16 +5209,16 @@ public final class io/sentry/metrics/DefaultMetricsBatchProcessorFactory : io/se public abstract interface class io/sentry/metrics/IMetricsApi { public abstract fun count (Ljava/lang/String;)V + public abstract fun count (Ljava/lang/String;Lio/sentry/MeasurementUnit;)V public abstract fun count (Ljava/lang/String;Ljava/lang/Double;)V - public abstract fun count (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public abstract fun count (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V - public abstract fun count (Ljava/lang/String;Ljava/lang/String;)V + public abstract fun count (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public abstract fun count (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V public abstract fun distribution (Ljava/lang/String;Ljava/lang/Double;)V - public abstract fun distribution (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public abstract fun distribution (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V + public abstract fun distribution (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public abstract fun distribution (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V public abstract fun gauge (Ljava/lang/String;Ljava/lang/Double;)V - public abstract fun gauge (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public abstract fun gauge (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V + public abstract fun gauge (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public abstract fun gauge (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V } public abstract interface class io/sentry/metrics/IMetricsBatchProcessor { @@ -5234,16 +5234,16 @@ public abstract interface class io/sentry/metrics/IMetricsBatchProcessorFactory public final class io/sentry/metrics/MetricsApi : io/sentry/metrics/IMetricsApi { public fun (Lio/sentry/Scopes;)V public fun count (Ljava/lang/String;)V + public fun count (Ljava/lang/String;Lio/sentry/MeasurementUnit;)V public fun count (Ljava/lang/String;Ljava/lang/Double;)V - public fun count (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public fun count (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V - public fun count (Ljava/lang/String;Ljava/lang/String;)V + public fun count (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public fun count (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V public fun distribution (Ljava/lang/String;Ljava/lang/Double;)V - public fun distribution (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public fun distribution (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V + public fun distribution (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public fun distribution (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V public fun gauge (Ljava/lang/String;Ljava/lang/Double;)V - public fun gauge (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public fun gauge (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V + public fun gauge (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public fun gauge (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V } public class io/sentry/metrics/MetricsBatchProcessor : io/sentry/metrics/IMetricsBatchProcessor { @@ -5259,16 +5259,16 @@ public class io/sentry/metrics/MetricsBatchProcessor : io/sentry/metrics/IMetric public final class io/sentry/metrics/NoOpMetricsApi : io/sentry/metrics/IMetricsApi { public fun count (Ljava/lang/String;)V + public fun count (Ljava/lang/String;Lio/sentry/MeasurementUnit;)V public fun count (Ljava/lang/String;Ljava/lang/Double;)V - public fun count (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public fun count (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V - public fun count (Ljava/lang/String;Ljava/lang/String;)V + public fun count (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public fun count (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V public fun distribution (Ljava/lang/String;Ljava/lang/Double;)V - public fun distribution (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public fun distribution (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V + public fun distribution (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public fun distribution (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V public fun gauge (Ljava/lang/String;Ljava/lang/Double;)V - public fun gauge (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;)V - public fun gauge (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/metrics/SentryMetricsParameters;)V + public fun gauge (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;)V + public fun gauge (Ljava/lang/String;Ljava/lang/Double;Lio/sentry/MeasurementUnit;Lio/sentry/metrics/SentryMetricsParameters;)V public static fun getInstance ()Lio/sentry/metrics/NoOpMetricsApi; } diff --git a/sentry/src/main/java/io/sentry/metrics/IMetricsApi.java b/sentry/src/main/java/io/sentry/metrics/IMetricsApi.java index e03b41e173..9630c00d34 100644 --- a/sentry/src/main/java/io/sentry/metrics/IMetricsApi.java +++ b/sentry/src/main/java/io/sentry/metrics/IMetricsApi.java @@ -1,5 +1,6 @@ package io.sentry.metrics; +import io.sentry.MeasurementUnit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -9,34 +10,42 @@ public interface IMetricsApi { void count(final @NotNull String name, final @Nullable Double value); - void count(final @NotNull String name, final @Nullable String unit); + void count(final @NotNull String name, final @Nullable MeasurementUnit unit); - void count(final @NotNull String name, final @Nullable Double value, final @Nullable String unit); + void count( + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit); void count( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params); void distribution(final @NotNull String name, final @Nullable Double value); void distribution( - final @NotNull String name, final @Nullable Double value, final @Nullable String unit); + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit); void distribution( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params); void gauge(final @NotNull String name, final @Nullable Double value); - void gauge(final @NotNull String name, final @Nullable Double value, final @Nullable String unit); + void gauge( + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit); void gauge( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params); } diff --git a/sentry/src/main/java/io/sentry/metrics/MetricsApi.java b/sentry/src/main/java/io/sentry/metrics/MetricsApi.java index 9dc28dd5b1..d6ffc5a607 100644 --- a/sentry/src/main/java/io/sentry/metrics/MetricsApi.java +++ b/sentry/src/main/java/io/sentry/metrics/MetricsApi.java @@ -3,6 +3,7 @@ import io.sentry.HostnameCache; import io.sentry.IScope; import io.sentry.ISpan; +import io.sentry.MeasurementUnit; import io.sentry.PropagationContext; import io.sentry.Scopes; import io.sentry.SentryAttribute; @@ -42,13 +43,15 @@ public void count(final @NotNull String name, final @Nullable Double value) { } @Override - public void count(final @NotNull String name, final @Nullable String unit) { + public void count(final @NotNull String name, final @Nullable MeasurementUnit unit) { captureMetrics(SentryMetricsParameters.create(null, null), name, "counter", 1.0, unit); } @Override public void count( - final @NotNull String name, final @Nullable Double value, final @Nullable String unit) { + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit) { captureMetrics(SentryMetricsParameters.create(null, null), name, "counter", value, unit); } @@ -56,7 +59,7 @@ public void count( public void count( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params) { captureMetrics(params, name, "counter", value, unit); } @@ -68,7 +71,9 @@ public void distribution(final @NotNull String name, final @Nullable Double valu @Override public void distribution( - final @NotNull String name, final @Nullable Double value, final @Nullable String unit) { + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit) { captureMetrics(SentryMetricsParameters.create(null, null), name, "distribution", value, unit); } @@ -76,7 +81,7 @@ public void distribution( public void distribution( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params) { captureMetrics(params, name, "distribution", value, unit); } @@ -88,7 +93,9 @@ public void gauge(final @NotNull String name, final @Nullable Double value) { @Override public void gauge( - final @NotNull String name, final @Nullable Double value, final @Nullable String unit) { + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit) { captureMetrics(SentryMetricsParameters.create(null, null), name, "gauge", value, unit); } @@ -96,7 +103,7 @@ public void gauge( public void gauge( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params) { captureMetrics(params, name, "gauge", value, unit); } @@ -107,7 +114,7 @@ private void captureMetrics( final @Nullable String name, final @Nullable String type, final @Nullable Double value, - final @Nullable String unit) { + final @Nullable MeasurementUnit unit) { final @NotNull SentryOptions options = scopes.getOptions(); try { if (!scopes.isEnabled()) { @@ -155,7 +162,9 @@ private void captureMetrics( final SentryMetricsEvent metricsEvent = new SentryMetricsEvent(traceId, timestampToUse, name, type, value); metricsEvent.setSpanId(spanId); - metricsEvent.setUnit(unit); + if (unit != null) { + metricsEvent.setUnit(unit.apiName()); + } metricsEvent.setAttributes(createAttributes(params)); scopes.getClient().captureMetric(metricsEvent, combinedScope, params.getHint()); diff --git a/sentry/src/main/java/io/sentry/metrics/NoOpMetricsApi.java b/sentry/src/main/java/io/sentry/metrics/NoOpMetricsApi.java index 7fe85145d4..d407230934 100644 --- a/sentry/src/main/java/io/sentry/metrics/NoOpMetricsApi.java +++ b/sentry/src/main/java/io/sentry/metrics/NoOpMetricsApi.java @@ -1,5 +1,6 @@ package io.sentry.metrics; +import io.sentry.MeasurementUnit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,17 +20,19 @@ public void count(final @NotNull String name) {} public void count(final @NotNull String name, final @Nullable Double value) {} @Override - public void count(final @NotNull String name, final @Nullable String unit) {} + public void count(final @NotNull String name, final @Nullable MeasurementUnit unit) {} @Override public void count( - final @NotNull String name, final @Nullable Double value, final @Nullable String unit) {} + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit) {} @Override public void count( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params) {} @Override @@ -37,13 +40,15 @@ public void distribution(final @NotNull String name, final @Nullable Double valu @Override public void distribution( - final @NotNull String name, final @Nullable Double value, final @Nullable String unit) {} + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit) {} @Override public void distribution( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params) {} @Override @@ -51,12 +56,14 @@ public void gauge(final @NotNull String name, final @Nullable Double value) {} @Override public void gauge( - final @NotNull String name, final @Nullable Double value, final @Nullable String unit) {} + final @NotNull String name, + final @Nullable Double value, + final @Nullable MeasurementUnit unit) {} @Override public void gauge( final @NotNull String name, final @Nullable Double value, - final @Nullable String unit, + final @Nullable MeasurementUnit unit, final @NotNull SentryMetricsParameters params) {} } diff --git a/sentry/src/test/java/io/sentry/ScopesTest.kt b/sentry/src/test/java/io/sentry/ScopesTest.kt index 1e22be9877..bf428f78a4 100644 --- a/sentry/src/test/java/io/sentry/ScopesTest.kt +++ b/sentry/src/test/java/io/sentry/ScopesTest.kt @@ -3222,7 +3222,12 @@ class ScopesTest { sut .metrics() - .count("metric name", 1.0, "visit", SentryMetricsParameters().also { it.origin = "other" }) + .count( + "metric name", + 1.0, + MeasurementUnit.Information.BYTE, + SentryMetricsParameters().also { it.origin = "other" }, + ) verify(mockClient) .captureMetric( @@ -3242,14 +3247,14 @@ class ScopesTest { fun `creating count metric with value and unit works`() { val (sut, mockClient) = getEnabledScopes() - sut.metrics().count("metric name", 1.0, "visit") + sut.metrics().count("metric name", 1.0, MeasurementUnit.Information.BYTE) verify(mockClient) .captureMetric( check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals("byte", it.unit) assertEquals("counter", it.type) }, anyOrNull(), @@ -3279,14 +3284,14 @@ class ScopesTest { fun `creating count metric with unit works`() { val (sut, mockClient) = getEnabledScopes() - sut.metrics().count("metric name", "visit") + sut.metrics().count("metric name", MeasurementUnit.Information.BYTE) verify(mockClient) .captureMetric( check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals("byte", it.unit) assertEquals("counter", it.type) }, anyOrNull(), @@ -3303,7 +3308,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MeasurementUnit.Information.BYTE, SentryMetricsParameters.create(SentryAttributes.fromMap(mapOf("attrname1" to "attrval1"))), ) @@ -3312,7 +3317,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals("byte", it.unit) assertEquals("counter", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3333,7 +3338,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MeasurementUnit.Information.BYTE, SentryMetricsParameters.create(mapOf("attrname1" to "attrval1")), ) @@ -3342,7 +3347,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals("byte", it.unit) assertEquals("counter", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3363,7 +3368,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MeasurementUnit.Information.BYTE, SentryMetricsParameters.create( SentryAttributes.of( SentryAttribute.stringAttribute("strattr", "strval"), @@ -3383,7 +3388,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals("byte", it.unit) assertEquals("counter", it.type) val strattr = it.attributes?.get("strattr")!! @@ -3432,7 +3437,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MeasurementUnit.Information.BYTE, SentryMetricsParameters.create( SentryLongDate(123), SentryAttributes.of(SentryAttribute.named("attrname1", "attrval1")), @@ -3444,7 +3449,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals("byte", it.unit) assertEquals("counter", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3460,14 +3465,14 @@ class ScopesTest { fun `creating distribution metric with value and unit works`() { val (sut, mockClient) = getEnabledScopes() - sut.metrics().distribution("metric name", 1.0, "ms") + sut.metrics().distribution("metric name", 1.0, MeasurementUnit.Duration.MILLISECOND) verify(mockClient) .captureMetric( check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("ms", it.unit) + assertEquals("millisecond", it.unit) assertEquals("distribution", it.type) }, anyOrNull(), @@ -3502,7 +3507,7 @@ class ScopesTest { .distribution( "metric name", 3.7, - "ms", + MeasurementUnit.Duration.MILLISECOND, SentryMetricsParameters.create(SentryAttributes.fromMap(mapOf("attrname1" to "attrval1"))), ) @@ -3511,7 +3516,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(3.7, it.value) - assertEquals("ms", it.unit) + assertEquals("millisecond", it.unit) assertEquals("distribution", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3532,7 +3537,7 @@ class ScopesTest { .distribution( "metric name", 3.7, - "ms", + MeasurementUnit.Duration.MILLISECOND, SentryMetricsParameters.create( SentryAttributes.of( SentryAttribute.stringAttribute("strattr", "strval"), @@ -3552,7 +3557,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(3.7, it.value) - assertEquals("ms", it.unit) + assertEquals("millisecond", it.unit) assertEquals("distribution", it.type) val strattr = it.attributes?.get("strattr")!! @@ -3601,7 +3606,7 @@ class ScopesTest { .distribution( "metric name", 3.7, - "ms", + MeasurementUnit.Duration.MILLISECOND, SentryMetricsParameters.create( SentryLongDate(123), SentryAttributes.of(SentryAttribute.named("attrname1", "attrval1")), @@ -3613,7 +3618,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(3.7, it.value) - assertEquals("ms", it.unit) + assertEquals("millisecond", it.unit) assertEquals("distribution", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3629,7 +3634,7 @@ class ScopesTest { fun `creating gauge metric with value and unit works`() { val (sut, mockClient) = getEnabledScopes() - sut.metrics().gauge("metric name", 128.0, "byte") + sut.metrics().gauge("metric name", 128.0, MeasurementUnit.Information.BYTE) verify(mockClient) .captureMetric( @@ -3671,7 +3676,7 @@ class ScopesTest { .gauge( "metric name", 256.0, - "byte", + MeasurementUnit.Information.BYTE, SentryMetricsParameters.create(SentryAttributes.fromMap(mapOf("attrname1" to "attrval1"))), ) @@ -3701,7 +3706,7 @@ class ScopesTest { .gauge( "metric name", 256.0, - "byte", + MeasurementUnit.Information.BYTE, SentryMetricsParameters.create( SentryAttributes.of( SentryAttribute.stringAttribute("strattr", "strval"), @@ -3770,7 +3775,7 @@ class ScopesTest { .gauge( "metric name", 256.0, - "byte", + MeasurementUnit.Information.BYTE, SentryMetricsParameters.create( SentryLongDate(123), SentryAttributes.of(SentryAttribute.named("attrname1", "attrval1")),