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 7ea4d6d03b..b7f7d566b9 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,6 +1,7 @@ package io.sentry.samples.spring7.web; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -21,13 +22,14 @@ String count() { @GetMapping("gauge/{value}") String gauge(@PathVariable("value") Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") String distribution(@PathVariable("value") Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 e6d014f983..2a969ec884 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,6 +1,7 @@ package io.sentry.samples.spring.boot4; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 e6d014f983..2a969ec884 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,6 +1,7 @@ package io.sentry.samples.spring.boot4; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 e6d014f983..2a969ec884 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,6 +1,7 @@ package io.sentry.samples.spring.boot4; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 e6d014f983..2a969ec884 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,6 +1,7 @@ package io.sentry.samples.spring.boot4; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5d8a0bf88d..f7c7529525 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,6 +1,7 @@ package io.sentry.samples.spring.boot.jakarta; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5d8a0bf88d..f7c7529525 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,6 +1,7 @@ package io.sentry.samples.spring.boot.jakarta; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5d8a0bf88d..f7c7529525 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,6 +1,7 @@ package io.sentry.samples.spring.boot.jakarta; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5caafc0b26..da5b1d655d 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,6 +1,7 @@ package io.sentry.samples.spring.boot; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5caafc0b26..da5b1d655d 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,6 +1,7 @@ package io.sentry.samples.spring.boot; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5d8a0bf88d..f7c7529525 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,6 +1,7 @@ package io.sentry.samples.spring.boot.jakarta; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5caafc0b26..da5b1d655d 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,6 +1,7 @@ package io.sentry.samples.spring.boot; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 5caafc0b26..da5b1d655d 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,6 +1,7 @@ package io.sentry.samples.spring.boot; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -20,14 +21,15 @@ String count() { } @GetMapping("gauge/{value}") - String gauge(@PathVariable Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + String gauge(@PathVariable("value") Long value) { + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") - String distribution(@PathVariable Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + String distribution(@PathVariable("value") Long value) { + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 cca33e1ede..6c236a76a9 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,6 +1,7 @@ package io.sentry.samples.spring.jakarta.web; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -21,13 +22,14 @@ String count() { @GetMapping("gauge/{value}") String gauge(@PathVariable("value") Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") String distribution(@PathVariable("value") Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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 a4359d5305..c0629ec137 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,6 +1,7 @@ package io.sentry.samples.spring.web; import io.sentry.Sentry; +import io.sentry.metrics.MetricsUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -21,13 +22,14 @@ String count() { @GetMapping("gauge/{value}") String gauge(@PathVariable("value") Long value) { - Sentry.metrics().gauge("memory.free", value.doubleValue(), "byte"); + Sentry.metrics().gauge("memory.free", value.doubleValue(), MetricsUnit.Information.BYTE); return "gauge metric tracked"; } @GetMapping("distribution/{value}") String distribution(@PathVariable("value") Long value) { - Sentry.metrics().distribution("distributionMetric", value.doubleValue(), "child"); + Sentry.metrics() + .distribution("distributionMetric", value.doubleValue(), MetricsUnit.Duration.MILLISECOND); return "distribution metric tracked"; } } 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..13d8098d5d 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,10 +124,14 @@ 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:") diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 1970c3fefb..a84a6cf454 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -5257,6 +5257,42 @@ public class io/sentry/metrics/MetricsBatchProcessor : io/sentry/metrics/IMetric public fun flush (J)V } +public final class io/sentry/metrics/MetricsUnit { +} + +public final class io/sentry/metrics/MetricsUnit$Duration { + public static final field DAY Ljava/lang/String; + public static final field HOUR Ljava/lang/String; + public static final field MICROSECOND Ljava/lang/String; + public static final field MILLISECOND Ljava/lang/String; + public static final field MINUTE Ljava/lang/String; + public static final field NANOSECOND Ljava/lang/String; + public static final field SECOND Ljava/lang/String; + public static final field WEEK Ljava/lang/String; +} + +public final class io/sentry/metrics/MetricsUnit$Fraction { + public static final field PERCENT Ljava/lang/String; + public static final field RATIO Ljava/lang/String; +} + +public final class io/sentry/metrics/MetricsUnit$Information { + public static final field BIT Ljava/lang/String; + public static final field BYTE Ljava/lang/String; + public static final field EXABYTE Ljava/lang/String; + public static final field EXBIBYTE Ljava/lang/String; + public static final field GIBIBYTE Ljava/lang/String; + public static final field GIGABYTE Ljava/lang/String; + public static final field KIBIBYTE Ljava/lang/String; + public static final field KILOBYTE Ljava/lang/String; + public static final field MEBIBYTE Ljava/lang/String; + public static final field MEGABYTE Ljava/lang/String; + public static final field PEBIBYTE Ljava/lang/String; + public static final field PETABYTE Ljava/lang/String; + public static final field TEBIBYTE Ljava/lang/String; + public static final field TERABYTE Ljava/lang/String; +} + public final class io/sentry/metrics/NoOpMetricsApi : io/sentry/metrics/IMetricsApi { public fun count (Ljava/lang/String;)V public fun count (Ljava/lang/String;Ljava/lang/Double;)V diff --git a/sentry/src/main/java/io/sentry/metrics/MetricsUnit.java b/sentry/src/main/java/io/sentry/metrics/MetricsUnit.java new file mode 100644 index 0000000000..4665cdf33a --- /dev/null +++ b/sentry/src/main/java/io/sentry/metrics/MetricsUnit.java @@ -0,0 +1,98 @@ +package io.sentry.metrics; + +/** + * String constants for metric units. + * + *

These constants represent the API names of measurement units that can be used with metrics. + */ +public final class MetricsUnit { + + /** Time duration units. */ + public static final class Duration { + /** Nanosecond, 10^-9 seconds. */ + public static final String NANOSECOND = "nanosecond"; + + /** Microsecond, 10^-6 seconds. */ + public static final String MICROSECOND = "microsecond"; + + /** Millisecond, 10^-3 seconds. */ + public static final String MILLISECOND = "millisecond"; + + /** Full second. */ + public static final String SECOND = "second"; + + /** Minute, 60 seconds. */ + public static final String MINUTE = "minute"; + + /** Hour, 3600 seconds. */ + public static final String HOUR = "hour"; + + /** Day, 86,400 seconds. */ + public static final String DAY = "day"; + + /** Week, 604,800 seconds. */ + public static final String WEEK = "week"; + + private Duration() {} + } + + /** Size of information derived from bytes. */ + public static final class Information { + /** Bit, corresponding to 1/8 of a byte. */ + public static final String BIT = "bit"; + + /** Byte. */ + public static final String BYTE = "byte"; + + /** Kilobyte, 10^3 bytes. */ + public static final String KILOBYTE = "kilobyte"; + + /** Kibibyte, 2^10 bytes. */ + public static final String KIBIBYTE = "kibibyte"; + + /** Megabyte, 10^6 bytes. */ + public static final String MEGABYTE = "megabyte"; + + /** Mebibyte, 2^20 bytes. */ + public static final String MEBIBYTE = "mebibyte"; + + /** Gigabyte, 10^9 bytes. */ + public static final String GIGABYTE = "gigabyte"; + + /** Gibibyte, 2^30 bytes. */ + public static final String GIBIBYTE = "gibibyte"; + + /** Terabyte, 10^12 bytes. */ + public static final String TERABYTE = "terabyte"; + + /** Tebibyte, 2^40 bytes. */ + public static final String TEBIBYTE = "tebibyte"; + + /** Petabyte, 10^15 bytes. */ + public static final String PETABYTE = "petabyte"; + + /** Pebibyte, 2^50 bytes. */ + public static final String PEBIBYTE = "pebibyte"; + + /** Exabyte, 10^18 bytes. */ + public static final String EXABYTE = "exabyte"; + + /** Exbibyte, 2^60 bytes. */ + public static final String EXBIBYTE = "exbibyte"; + + private Information() {} + } + + /** Fractions such as percentages. */ + public static final class Fraction { + /** Floating point fraction of `1`. */ + public static final String RATIO = "ratio"; + + /** Ratio expressed as a fraction of `100`. `100%` equals a ratio of `1.0`. */ + public static final String PERCENT = "percent"; + + private Fraction() {} + } + + private MetricsUnit() {} +} diff --git a/sentry/src/test/java/io/sentry/ScopesTest.kt b/sentry/src/test/java/io/sentry/ScopesTest.kt index 1e22be9877..81f639e8a1 100644 --- a/sentry/src/test/java/io/sentry/ScopesTest.kt +++ b/sentry/src/test/java/io/sentry/ScopesTest.kt @@ -8,6 +8,7 @@ import io.sentry.clientreport.DiscardedEvent import io.sentry.hints.SessionEndHint import io.sentry.hints.SessionStartHint import io.sentry.logger.SentryLogParameters +import io.sentry.metrics.MetricsUnit import io.sentry.metrics.SentryMetricsParameters import io.sentry.protocol.Feedback import io.sentry.protocol.SentryId @@ -3222,7 +3223,12 @@ class ScopesTest { sut .metrics() - .count("metric name", 1.0, "visit", SentryMetricsParameters().also { it.origin = "other" }) + .count( + "metric name", + 1.0, + MetricsUnit.Information.BYTE, + SentryMetricsParameters().also { it.origin = "other" }, + ) verify(mockClient) .captureMetric( @@ -3242,14 +3248,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, MetricsUnit.Information.BYTE) verify(mockClient) .captureMetric( check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("counter", it.type) }, anyOrNull(), @@ -3279,14 +3285,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", MetricsUnit.Information.BYTE) verify(mockClient) .captureMetric( check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("counter", it.type) }, anyOrNull(), @@ -3303,7 +3309,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MetricsUnit.Information.BYTE, SentryMetricsParameters.create(SentryAttributes.fromMap(mapOf("attrname1" to "attrval1"))), ) @@ -3312,7 +3318,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("counter", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3333,7 +3339,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MetricsUnit.Information.BYTE, SentryMetricsParameters.create(mapOf("attrname1" to "attrval1")), ) @@ -3342,7 +3348,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("counter", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3363,7 +3369,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MetricsUnit.Information.BYTE, SentryMetricsParameters.create( SentryAttributes.of( SentryAttribute.stringAttribute("strattr", "strval"), @@ -3383,7 +3389,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("counter", it.type) val strattr = it.attributes?.get("strattr")!! @@ -3432,7 +3438,7 @@ class ScopesTest { .count( "metric name", 1.0, - "visit", + MetricsUnit.Information.BYTE, SentryMetricsParameters.create( SentryLongDate(123), SentryAttributes.of(SentryAttribute.named("attrname1", "attrval1")), @@ -3444,7 +3450,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("visit", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("counter", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3460,14 +3466,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, MetricsUnit.Duration.MILLISECOND) verify(mockClient) .captureMetric( check { assertEquals("metric name", it.name) assertEquals(1.0, it.value) - assertEquals("ms", it.unit) + assertEquals(MetricsUnit.Duration.MILLISECOND, it.unit) assertEquals("distribution", it.type) }, anyOrNull(), @@ -3502,7 +3508,7 @@ class ScopesTest { .distribution( "metric name", 3.7, - "ms", + MetricsUnit.Duration.MILLISECOND, SentryMetricsParameters.create(SentryAttributes.fromMap(mapOf("attrname1" to "attrval1"))), ) @@ -3511,7 +3517,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(3.7, it.value) - assertEquals("ms", it.unit) + assertEquals(MetricsUnit.Duration.MILLISECOND, it.unit) assertEquals("distribution", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3532,7 +3538,7 @@ class ScopesTest { .distribution( "metric name", 3.7, - "ms", + MetricsUnit.Duration.MILLISECOND, SentryMetricsParameters.create( SentryAttributes.of( SentryAttribute.stringAttribute("strattr", "strval"), @@ -3552,7 +3558,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(3.7, it.value) - assertEquals("ms", it.unit) + assertEquals(MetricsUnit.Duration.MILLISECOND, it.unit) assertEquals("distribution", it.type) val strattr = it.attributes?.get("strattr")!! @@ -3601,7 +3607,7 @@ class ScopesTest { .distribution( "metric name", 3.7, - "ms", + MetricsUnit.Duration.MILLISECOND, SentryMetricsParameters.create( SentryLongDate(123), SentryAttributes.of(SentryAttribute.named("attrname1", "attrval1")), @@ -3613,7 +3619,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(3.7, it.value) - assertEquals("ms", it.unit) + assertEquals(MetricsUnit.Duration.MILLISECOND, it.unit) assertEquals("distribution", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3629,14 +3635,14 @@ 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, MetricsUnit.Information.BYTE) verify(mockClient) .captureMetric( check { assertEquals("metric name", it.name) assertEquals(128.0, it.value) - assertEquals("byte", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("gauge", it.type) }, anyOrNull(), @@ -3671,7 +3677,7 @@ class ScopesTest { .gauge( "metric name", 256.0, - "byte", + MetricsUnit.Information.BYTE, SentryMetricsParameters.create(SentryAttributes.fromMap(mapOf("attrname1" to "attrval1"))), ) @@ -3680,7 +3686,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(256.0, it.value) - assertEquals("byte", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("gauge", it.type) val attr1 = it.attributes?.get("attrname1")!! @@ -3701,7 +3707,7 @@ class ScopesTest { .gauge( "metric name", 256.0, - "byte", + MetricsUnit.Information.BYTE, SentryMetricsParameters.create( SentryAttributes.of( SentryAttribute.stringAttribute("strattr", "strval"), @@ -3721,7 +3727,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(256.0, it.value) - assertEquals("byte", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("gauge", it.type) val strattr = it.attributes?.get("strattr")!! @@ -3770,7 +3776,7 @@ class ScopesTest { .gauge( "metric name", 256.0, - "byte", + MetricsUnit.Information.BYTE, SentryMetricsParameters.create( SentryLongDate(123), SentryAttributes.of(SentryAttribute.named("attrname1", "attrval1")), @@ -3782,7 +3788,7 @@ class ScopesTest { check { assertEquals("metric name", it.name) assertEquals(256.0, it.value) - assertEquals("byte", it.unit) + assertEquals(MetricsUnit.Information.BYTE, it.unit) assertEquals("gauge", it.type) val attr1 = it.attributes?.get("attrname1")!!