diff --git a/CHANGELOG.md b/CHANGELOG.md index b74bc0886e..faf409b7c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Features + +- Add support for `SENTRY_SAMPLE_RATE` environment variable / `sample-rate` property ([#5112](https://github.com/getsentry/sentry-java/pull/5112)) + ## 8.33.0 ### Features diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index a043f8fe85..04d809ffb9 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -504,6 +504,7 @@ public final class io/sentry/ExternalOptions { public fun getProguardUuid ()Ljava/lang/String; public fun getProxy ()Lio/sentry/SentryOptions$Proxy; public fun getRelease ()Ljava/lang/String; + public fun getSampleRate ()Ljava/lang/Double; public fun getSendClientReports ()Ljava/lang/Boolean; public fun getServerName ()Ljava/lang/String; public fun getSpotlightConnectionUrl ()Ljava/lang/String; @@ -552,6 +553,7 @@ public final class io/sentry/ExternalOptions { public fun setProguardUuid (Ljava/lang/String;)V public fun setProxy (Lio/sentry/SentryOptions$Proxy;)V public fun setRelease (Ljava/lang/String;)V + public fun setSampleRate (Ljava/lang/Double;)V public fun setSendClientReports (Ljava/lang/Boolean;)V public fun setSendDefaultPii (Ljava/lang/Boolean;)V public fun setSendModules (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 b5604e2b49..9eaf26b202 100644 --- a/sentry/src/main/java/io/sentry/ExternalOptions.java +++ b/sentry/src/main/java/io/sentry/ExternalOptions.java @@ -23,6 +23,7 @@ public final class ExternalOptions { private @Nullable Boolean enableUncaughtExceptionHandler; private @Nullable Boolean debug; private @Nullable Boolean enableDeduplication; + private @Nullable Double sampleRate; private @Nullable Double tracesSampleRate; private @Nullable Double profilesSampleRate; private @Nullable SentryOptions.RequestSize maxRequestBodySize; @@ -77,6 +78,7 @@ public final class ExternalOptions { propertiesProvider.getBooleanProperty("uncaught.handler.enabled")); options.setPrintUncaughtStackTrace( propertiesProvider.getBooleanProperty("uncaught.handler.print-stacktrace")); + options.setSampleRate(propertiesProvider.getDoubleProperty("sample-rate")); options.setTracesSampleRate(propertiesProvider.getDoubleProperty("traces-sample-rate")); options.setProfilesSampleRate(propertiesProvider.getDoubleProperty("profiles-sample-rate")); options.setDebug(propertiesProvider.getBooleanProperty("debug")); @@ -295,6 +297,14 @@ public void setEnableDeduplication(final @Nullable Boolean enableDeduplication) this.enableDeduplication = enableDeduplication; } + public @Nullable Double getSampleRate() { + return sampleRate; + } + + public void setSampleRate(final @Nullable Double sampleRate) { + this.sampleRate = sampleRate; + } + public @Nullable Double getTracesSampleRate() { return tracesSampleRate; } diff --git a/sentry/src/main/java/io/sentry/SentryOptions.java b/sentry/src/main/java/io/sentry/SentryOptions.java index 14f4acf51f..4f75b9c78b 100644 --- a/sentry/src/main/java/io/sentry/SentryOptions.java +++ b/sentry/src/main/java/io/sentry/SentryOptions.java @@ -3394,6 +3394,9 @@ public void merge(final @NotNull ExternalOptions options) { if (options.getPrintUncaughtStackTrace() != null) { setPrintUncaughtStackTrace(options.getPrintUncaughtStackTrace()); } + if (options.getSampleRate() != null) { + setSampleRate(options.getSampleRate()); + } if (options.getTracesSampleRate() != null) { setTracesSampleRate(options.getTracesSampleRate()); } diff --git a/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt b/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt index 1276d58fdb..5a8bb1c787 100644 --- a/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/ExternalOptionsTest.kt @@ -101,6 +101,11 @@ class ExternalOptionsTest { } } + @Test + fun `creates options with sampleRate using external properties`() { + withPropertiesFile("sample-rate=0.2") { assertEquals(0.2, it.sampleRate) } + } + @Test fun `creates options with tracesSampleRate using external properties`() { withPropertiesFile("traces-sample-rate=0.2") { assertEquals(0.2, it.tracesSampleRate) } diff --git a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt index 6868b55c2b..182766dde1 100644 --- a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt @@ -376,6 +376,7 @@ class SentryOptionsTest { externalOptions.setTag("tag1", "value1") externalOptions.setTag("tag2", "value2") externalOptions.enableUncaughtExceptionHandler = false + externalOptions.sampleRate = 0.3 externalOptions.tracesSampleRate = 0.5 externalOptions.profilesSampleRate = 0.5 externalOptions.addInAppInclude("com.app") @@ -433,6 +434,7 @@ class SentryOptionsTest { assertEquals(java.net.Proxy.Type.SOCKS, options.proxy!!.type) assertEquals(mapOf("tag1" to "value1", "tag2" to "value2"), options.tags) assertFalse(options.isEnableUncaughtExceptionHandler) + assertEquals(0.3, options.sampleRate) assertEquals(0.5, options.tracesSampleRate) assertEquals(0.5, options.profilesSampleRate) assertEquals(listOf("com.app"), options.inAppIncludes)