From 77fab92acf5a1291015f4bf5f790277394f4218a Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Fri, 19 Dec 2025 13:59:27 +0100 Subject: [PATCH] Metrics external options --- sentry/api/sentry.api | 2 ++ .../main/java/io/sentry/ExternalOptions.java | 11 +++++++++++ .../main/java/io/sentry/SentryOptions.java | 4 ++++ .../java/io/sentry/ExternalOptionsTest.kt | 19 +++++++++++++++++++ .../test/java/io/sentry/SentryOptionsTest.kt | 15 +++++++++++++++ 5 files changed, 51 insertions(+) diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 8895e4db9b3..6dc6ec6d559 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -513,6 +513,7 @@ public final class io/sentry/ExternalOptions { public fun isCaptureOpenTelemetryEvents ()Ljava/lang/Boolean; public fun isEnableBackpressureHandling ()Ljava/lang/Boolean; public fun isEnableLogs ()Ljava/lang/Boolean; + public fun isEnableMetrics ()Ljava/lang/Boolean; public fun isEnablePrettySerializationOutput ()Ljava/lang/Boolean; public fun isEnableSpotlight ()Ljava/lang/Boolean; public fun isEnabled ()Ljava/lang/Boolean; @@ -528,6 +529,7 @@ public final class io/sentry/ExternalOptions { public fun setEnableBackpressureHandling (Ljava/lang/Boolean;)V public fun setEnableDeduplication (Ljava/lang/Boolean;)V public fun setEnableLogs (Ljava/lang/Boolean;)V + public fun setEnableMetrics (Ljava/lang/Boolean;)V public fun setEnablePrettySerializationOutput (Ljava/lang/Boolean;)V public fun setEnableSpotlight (Ljava/lang/Boolean;)V public fun setEnableUncaughtExceptionHandler (Ljava/lang/Boolean;)V diff --git a/sentry/src/main/java/io/sentry/ExternalOptions.java b/sentry/src/main/java/io/sentry/ExternalOptions.java index f35e01af797..269e3729dbe 100644 --- a/sentry/src/main/java/io/sentry/ExternalOptions.java +++ b/sentry/src/main/java/io/sentry/ExternalOptions.java @@ -44,6 +44,7 @@ public final class ExternalOptions { private @Nullable Boolean enablePrettySerializationOutput; private @Nullable Boolean enableSpotlight; private @Nullable Boolean enableLogs; + private @Nullable Boolean enableMetrics; private @Nullable String spotlightConnectionUrl; private @Nullable List ignoredCheckIns; @@ -157,6 +158,8 @@ public final class ExternalOptions { options.setEnableLogs(propertiesProvider.getBooleanProperty("logs.enabled")); + options.setEnableMetrics(propertiesProvider.getBooleanProperty("metrics.enabled")); + for (final String ignoredExceptionType : propertiesProvider.getList("ignored-exceptions-for-type")) { try { @@ -539,6 +542,14 @@ public void setEnableLogs(final @Nullable Boolean enableLogs) { return enableLogs; } + public void setEnableMetrics(final @Nullable Boolean enableMetrics) { + this.enableMetrics = enableMetrics; + } + + public @Nullable Boolean isEnableMetrics() { + return enableMetrics; + } + public @Nullable Double getProfileSessionSampleRate() { return profileSessionSampleRate; } diff --git a/sentry/src/main/java/io/sentry/SentryOptions.java b/sentry/src/main/java/io/sentry/SentryOptions.java index 724ee727efd..7f13163ce09 100644 --- a/sentry/src/main/java/io/sentry/SentryOptions.java +++ b/sentry/src/main/java/io/sentry/SentryOptions.java @@ -3480,6 +3480,10 @@ public void merge(final @NotNull ExternalOptions options) { getLogs().setEnabled(options.isEnableLogs()); } + if (options.isEnableMetrics() != null) { + getMetrics().setEnabled(options.isEnableMetrics()); + } + if (options.getProfileSessionSampleRate() != null) { setProfileSessionSampleRate(options.getProfileSessionSampleRate()); } diff --git a/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt b/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt index 9ed3913f715..78eef96dfce 100644 --- a/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt @@ -376,6 +376,25 @@ class ExternalOptionsTest { withPropertiesFile("logs.enabled=true") { options -> assertTrue(options.isEnableLogs == true) } } + @Test + fun `creates options with enableMetrics set to true`() { + withPropertiesFile("metrics.enabled=true") { options -> + assertTrue(options.isEnableMetrics == true) + } + } + + @Test + fun `creates options with enableMetrics set to false`() { + withPropertiesFile("metrics.enabled=false") { options -> + assertTrue(options.isEnableMetrics == false) + } + } + + @Test + fun `creates options with enableMetrics set to null when not set`() { + withPropertiesFile { assertNull(it.isEnableMetrics) } + } + @Test fun `creates options with profileSessionSampleRate set to 0_8`() { withPropertiesFile("profile-session-sample-rate=0.8") { options -> diff --git a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt index e882f6fdc6f..b2f7491b029 100644 --- a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt @@ -411,6 +411,7 @@ class SentryOptionsTest { externalOptions.spotlightConnectionUrl = "http://local.sentry.io:1234" externalOptions.isGlobalHubMode = true externalOptions.isEnableLogs = true + externalOptions.isEnableMetrics = false externalOptions.profileSessionSampleRate = 0.8 externalOptions.profilingTracesDirPath = "/profiling-traces" externalOptions.profileLifecycle = ProfileLifecycle.TRACE @@ -469,6 +470,7 @@ class SentryOptionsTest { assertEquals("http://local.sentry.io:1234", options.spotlightConnectionUrl) assertTrue(options.isGlobalHubMode!!) assertTrue(options.logs.isEnabled!!) + assertFalse(options.metrics.isEnabled) assertEquals(0.8, options.profileSessionSampleRate) assertEquals("/profiling-traces${File.separator}${hash}", options.profilingTracesDirPath) assertEquals(ProfileLifecycle.TRACE, options.profileLifecycle) @@ -482,6 +484,14 @@ class SentryOptionsTest { assertTrue(options.isEnableUncaughtExceptionHandler) } + @Test + fun `merging options when enableMetrics is not set preserves the default value`() { + val externalOptions = ExternalOptions() + val options = SentryOptions() + options.merge(externalOptions) + assertTrue(options.metrics.isEnabled) + } + @Test fun `merging options merges and overwrites existing tag values`() { val externalOptions = ExternalOptions() @@ -660,6 +670,11 @@ class SentryOptionsTest { assertTrue(SentryOptions().isEnableBackpressureHandling) } + @Test + fun `when options are initialized, metrics is enabled by default`() { + assertTrue(SentryOptions().metrics.isEnabled) + } + @Test fun `when options are initialized, enableSpotlight is set to false by default`() { assertFalse(SentryOptions().isEnableSpotlight)