diff --git a/CHANGELOG.md b/CHANGELOG.md index bb82d1bfdba..686f2d778bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Breaking Changes +- `SentryOptions.getIgnoredErrors()`, `getIgnoredTransactions()`, `getIgnoredCheckIns()` and `getIgnoredSpanOrigins()` now return `List` instead of `List`, matching their setters ([#6489](https://github.com/getsentry/sentry-java/pull/6489)) - The SDK is now compiled for Java 11 instead of Java 8. JVM applications need Java 11 or newer ([#6459](https://github.com/getsentry/sentry-java/pull/6459)) - Default trace context status to `ok` when an active span has no explicit status ([#6418](https://github.com/getsentry/sentry-java/pull/6418)) - Remove the deprecated user feedback APIs ([#6337](https://github.com/getsentry/sentry-java/pull/6337)) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/ManifestMetadataReaderTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/ManifestMetadataReaderTest.kt index a32abe4befd..d7481c22b25 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/ManifestMetadataReaderTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/ManifestMetadataReaderTest.kt @@ -5,7 +5,6 @@ import android.os.Bundle import androidx.core.os.bundleOf import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat -import io.sentry.FilterString import io.sentry.HttpBodyType import io.sentry.ILogger import io.sentry.KeyValueCollectionBehavior @@ -2083,7 +2082,7 @@ class ManifestMetadataReaderTest { // Assert assertEquals( - listOf(FilterString("Some error"), FilterString("Another .*")), + listOf("Some error", "Another .*"), fixture.options.ignoredErrors, ) } diff --git a/sentry-apollo-3/src/main/java/io/sentry/apollo3/SentryApollo3HttpInterceptor.kt b/sentry-apollo-3/src/main/java/io/sentry/apollo3/SentryApollo3HttpInterceptor.kt index 53e48657393..b9fdd060c3e 100644 --- a/sentry-apollo-3/src/main/java/io/sentry/apollo3/SentryApollo3HttpInterceptor.kt +++ b/sentry-apollo-3/src/main/java/io/sentry/apollo3/SentryApollo3HttpInterceptor.kt @@ -148,7 +148,7 @@ constructor( } private fun isIgnored(): Boolean = - SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN) + SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN) private fun removeSentryInternalHeaders(headers: List): List = headers.filterNot { diff --git a/sentry-apollo-4/src/main/java/io/sentry/apollo4/SentryApollo4HttpInterceptor.kt b/sentry-apollo-4/src/main/java/io/sentry/apollo4/SentryApollo4HttpInterceptor.kt index aea5d6691c4..c39638bac58 100644 --- a/sentry-apollo-4/src/main/java/io/sentry/apollo4/SentryApollo4HttpInterceptor.kt +++ b/sentry-apollo-4/src/main/java/io/sentry/apollo4/SentryApollo4HttpInterceptor.kt @@ -148,7 +148,7 @@ constructor( } private fun isIgnored(): Boolean = - SpanUtils.isIgnored(scopes.getOptions().ignoredSpanOrigins, TRACE_ORIGIN) + SpanUtils.isIgnored(scopes.getOptions().ignoredSpanOriginFilters, TRACE_ORIGIN) private fun removeSentryInternalHeaders(headers: List): List = headers.filterNot { header -> diff --git a/sentry-apollo-5/src/main/java/io/sentry/apollo5/SentryApollo5HttpInterceptor.kt b/sentry-apollo-5/src/main/java/io/sentry/apollo5/SentryApollo5HttpInterceptor.kt index f74d0fec111..b0c4aadae1d 100644 --- a/sentry-apollo-5/src/main/java/io/sentry/apollo5/SentryApollo5HttpInterceptor.kt +++ b/sentry-apollo-5/src/main/java/io/sentry/apollo5/SentryApollo5HttpInterceptor.kt @@ -152,7 +152,7 @@ constructor( } private fun isIgnored(): Boolean = - SpanUtils.isIgnored(scopes.getOptions().ignoredSpanOrigins, TRACE_ORIGIN) + SpanUtils.isIgnored(scopes.getOptions().ignoredSpanOriginFilters, TRACE_ORIGIN) private fun startChild( request: HttpRequest, diff --git a/sentry-apollo/src/main/java/io/sentry/apollo/SentryApolloInterceptor.kt b/sentry-apollo/src/main/java/io/sentry/apollo/SentryApolloInterceptor.kt index 907217bea7f..c50d85a05eb 100644 --- a/sentry-apollo/src/main/java/io/sentry/apollo/SentryApolloInterceptor.kt +++ b/sentry-apollo/src/main/java/io/sentry/apollo/SentryApolloInterceptor.kt @@ -164,7 +164,7 @@ class SentryApolloInterceptor( } private fun isIgnored(): Boolean = - SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN) + SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN) private fun startChild(request: InterceptorRequest, activeSpan: ISpan): ISpan { val operation = request.operation.name().name() diff --git a/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaConsumerTracing.java b/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaConsumerTracing.java index a45505f1019..15e97b3663d 100644 --- a/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaConsumerTracing.java +++ b/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaConsumerTracing.java @@ -131,7 +131,7 @@ private static void throwUnchecked(final @NotNull Throwabl } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private @Nullable ITransaction startTransaction( diff --git a/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaProducer.java b/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaProducer.java index 312faabbb42..4ea3853977e 100644 --- a/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaProducer.java +++ b/sentry-kafka/src/main/java/io/sentry/kafka/SentryKafkaProducer.java @@ -209,7 +209,7 @@ private void finishWithError(final @NotNull ISpan span, final @NotNull Throwable } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), traceOrigin); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), traceOrigin); } private void maybeInjectHeaders(final @NotNull Headers headers, final @Nullable ISpan span) { diff --git a/sentry-ktor-client/src/main/java/io/sentry/ktorClient/SentryKtorClientPlugin.kt b/sentry-ktor-client/src/main/java/io/sentry/ktorClient/SentryKtorClientPlugin.kt index 0e4538fb418..a400a64762a 100644 --- a/sentry-ktor-client/src/main/java/io/sentry/ktorClient/SentryKtorClientPlugin.kt +++ b/sentry-ktor-client/src/main/java/io/sentry/ktorClient/SentryKtorClientPlugin.kt @@ -125,7 +125,7 @@ public val SentryKtorClientPlugin: ClientPlugin = if ( !SpanUtils.isIgnored( - effectiveScopes.options.getIgnoredSpanOrigins(), + effectiveScopes.options.getIgnoredSpanOriginFilters(), TRACE_ORIGIN, ) ) { diff --git a/sentry-okhttp/src/main/java/io/sentry/okhttp/SentryOkHttpInterceptor.kt b/sentry-okhttp/src/main/java/io/sentry/okhttp/SentryOkHttpInterceptor.kt index f29396d1068..1cfe0ae1da7 100644 --- a/sentry-okhttp/src/main/java/io/sentry/okhttp/SentryOkHttpInterceptor.kt +++ b/sentry-okhttp/src/main/java/io/sentry/okhttp/SentryOkHttpInterceptor.kt @@ -234,7 +234,7 @@ public open class SentryOkHttpInterceptor( } private fun isIgnored(): Boolean = - SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN) + SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN) private fun sendBreadcrumb( request: Request, diff --git a/sentry-openfeign/src/main/java/io/sentry/openfeign/SentryFeignClient.java b/sentry-openfeign/src/main/java/io/sentry/openfeign/SentryFeignClient.java index 25c93a15640..96f40814587 100644 --- a/sentry-openfeign/src/main/java/io/sentry/openfeign/SentryFeignClient.java +++ b/sentry-openfeign/src/main/java/io/sentry/openfeign/SentryFeignClient.java @@ -175,7 +175,7 @@ public Response execute(final @NotNull Request request, final @NotNull Request.O } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void addBreadcrumb(final @NotNull Request request, final @Nullable Response response) { diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java index f64d07e8c3c..0e28cedf177 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelSpanFactory.java @@ -67,7 +67,8 @@ public OtelSpanFactory() { final @NotNull SpanOptions spanOptions, final @NotNull SpanContext spanContext, final @Nullable ISpan parentSpan) { - if (SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), spanOptions.getOrigin())) { + if (SpanUtils.isIgnored( + scopes.getOptions().getIgnoredSpanOriginFilters(), spanOptions.getOrigin())) { return NoOpSpan.getInstance(); } diff --git a/sentry-spring-7/src/main/java/io/sentry/spring7/kafka/SentryKafkaRecordInterceptor.java b/sentry-spring-7/src/main/java/io/sentry/spring7/kafka/SentryKafkaRecordInterceptor.java index dca7c7d61dd..abae5b44cb6 100644 --- a/sentry-spring-7/src/main/java/io/sentry/spring7/kafka/SentryKafkaRecordInterceptor.java +++ b/sentry-spring-7/src/main/java/io/sentry/spring7/kafka/SentryKafkaRecordInterceptor.java @@ -129,7 +129,7 @@ public void clearThreadState(final @NotNull Consumer consumer) { } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private @Nullable ConsumerRecord delegateIntercept( diff --git a/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientHttpRequestInterceptor.java b/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientHttpRequestInterceptor.java index d0d0923a42b..d468d43ccec 100644 --- a/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientHttpRequestInterceptor.java +++ b/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientHttpRequestInterceptor.java @@ -126,7 +126,7 @@ private void maybeAddTracingHeaders( } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), traceOrigin); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), traceOrigin); } private void addBreadcrumb( diff --git a/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientWebRequestFilter.java b/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientWebRequestFilter.java index df3cd548218..9ab8520484d 100644 --- a/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientWebRequestFilter.java +++ b/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientWebRequestFilter.java @@ -110,7 +110,7 @@ public SentrySpanClientWebRequestFilter(final @NotNull IScopes scopes) { } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void addBreadcrumb( diff --git a/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentryTracingFilter.java b/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentryTracingFilter.java index 048d1b584c1..a978c57d9c3 100644 --- a/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentryTracingFilter.java +++ b/sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentryTracingFilter.java @@ -127,7 +127,7 @@ protected void doFilterInternal( } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void doFilterWithTransaction( diff --git a/sentry-spring-7/src/main/java/io/sentry/spring7/webflux/AbstractSentryWebFilter.java b/sentry-spring-7/src/main/java/io/sentry/spring7/webflux/AbstractSentryWebFilter.java index 488d0ab4816..898c9fd5937 100644 --- a/sentry-spring-7/src/main/java/io/sentry/spring7/webflux/AbstractSentryWebFilter.java +++ b/sentry-spring-7/src/main/java/io/sentry/spring7/webflux/AbstractSentryWebFilter.java @@ -66,7 +66,7 @@ && shouldTraceRequest(requestScopes, request)) { } private boolean isIgnored(final @NotNull IScopes scopes, final @NotNull String origin) { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), origin); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), origin); } protected void doFinally( diff --git a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot4/SentryAutoConfigurationTest.kt b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot4/SentryAutoConfigurationTest.kt index 9aa8cb006d1..7f15669b104 100644 --- a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot4/SentryAutoConfigurationTest.kt +++ b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot4/SentryAutoConfigurationTest.kt @@ -4,7 +4,6 @@ import com.acme.MainBootClass import io.opentelemetry.api.OpenTelemetry import io.sentry.Breadcrumb import io.sentry.EventProcessor -import io.sentry.FilterString import io.sentry.Hint import io.sentry.IContinuousProfiler import io.sentry.IProfileConverter @@ -279,12 +278,9 @@ class SentryAutoConfigurationTest { .containsOnly("localhost", "^(http|https)://api\\..*\$") assertThat(options.isEnabled).isEqualTo(false) assertThat(options.isSendModules).isEqualTo(false) - assertThat(options.ignoredCheckIns) - .containsOnly(FilterString("slug1"), FilterString("slugB")) - assertThat(options.ignoredErrors) - .containsOnly(FilterString("Some error"), FilterString("Another .*")) - assertThat(options.ignoredTransactions) - .containsOnly(FilterString("transactionName1"), FilterString("transactionNameB")) + assertThat(options.ignoredCheckIns).containsOnly("slug1", "slugB") + assertThat(options.ignoredErrors).containsOnly("Some error", "Another .*") + assertThat(options.ignoredTransactions).containsOnly("transactionName1", "transactionNameB") assertThat(options.isEnableBackpressureHandling).isEqualTo(false) assertThat(options.isEnableDatabaseTransactionTracing).isEqualTo(true) assertThat(options.isEnableCacheTracing).isEqualTo(true) diff --git a/sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt b/sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt index c3a8fd2506b..1b46809b3f3 100644 --- a/sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt +++ b/sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt @@ -5,7 +5,6 @@ import io.opentelemetry.api.OpenTelemetry import io.sentry.Breadcrumb import io.sentry.DataCategory import io.sentry.EventProcessor -import io.sentry.FilterString import io.sentry.Hint import io.sentry.IContinuousProfiler import io.sentry.IProfileConverter @@ -284,12 +283,9 @@ class SentryAutoConfigurationTest { .containsOnly("localhost", "^(http|https)://api\\..*\$") assertThat(options.isEnabled).isEqualTo(false) assertThat(options.isSendModules).isEqualTo(false) - assertThat(options.ignoredCheckIns) - .containsOnly(FilterString("slug1"), FilterString("slugB")) - assertThat(options.ignoredErrors) - .containsOnly(FilterString("Some error"), FilterString("Another .*")) - assertThat(options.ignoredTransactions) - .containsOnly(FilterString("transactionName1"), FilterString("transactionNameB")) + assertThat(options.ignoredCheckIns).containsOnly("slug1", "slugB") + assertThat(options.ignoredErrors).containsOnly("Some error", "Another .*") + assertThat(options.ignoredTransactions).containsOnly("transactionName1", "transactionNameB") assertThat(options.isEnableBackpressureHandling).isEqualTo(false) assertThat(options.isEnableDatabaseTransactionTracing).isEqualTo(true) assertThat(options.isForceInit).isEqualTo(true) diff --git a/sentry-spring-boot/src/test/kotlin/io/sentry/spring/boot/SentryAutoConfigurationTest.kt b/sentry-spring-boot/src/test/kotlin/io/sentry/spring/boot/SentryAutoConfigurationTest.kt index 315a3c1449b..9b9501246e5 100644 --- a/sentry-spring-boot/src/test/kotlin/io/sentry/spring/boot/SentryAutoConfigurationTest.kt +++ b/sentry-spring-boot/src/test/kotlin/io/sentry/spring/boot/SentryAutoConfigurationTest.kt @@ -5,7 +5,6 @@ import io.opentelemetry.api.OpenTelemetry import io.sentry.Breadcrumb import io.sentry.DataCategory import io.sentry.EventProcessor -import io.sentry.FilterString import io.sentry.Hint import io.sentry.IContinuousProfiler import io.sentry.IProfileConverter @@ -282,12 +281,9 @@ class SentryAutoConfigurationTest { .containsOnly("localhost", "^(http|https)://api\\..*\$") assertThat(options.isEnabled).isEqualTo(false) assertThat(options.isSendModules).isEqualTo(false) - assertThat(options.ignoredCheckIns) - .containsOnly(FilterString("slug1"), FilterString("slugB")) - assertThat(options.ignoredErrors) - .containsOnly(FilterString("Some error"), FilterString("Another .*")) - assertThat(options.ignoredTransactions) - .containsOnly(FilterString("transactionName1"), FilterString("transactionNameB")) + assertThat(options.ignoredCheckIns).containsOnly("slug1", "slugB") + assertThat(options.ignoredErrors).containsOnly("Some error", "Another .*") + assertThat(options.ignoredTransactions).containsOnly("transactionName1", "transactionNameB") assertThat(options.isEnableBackpressureHandling).isEqualTo(false) assertThat(options.isEnableDatabaseTransactionTracing).isEqualTo(true) assertThat(options.isForceInit).isEqualTo(true) diff --git a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/kafka/SentryKafkaRecordInterceptor.java b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/kafka/SentryKafkaRecordInterceptor.java index 4d5abda711f..32db2eea846 100644 --- a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/kafka/SentryKafkaRecordInterceptor.java +++ b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/kafka/SentryKafkaRecordInterceptor.java @@ -129,7 +129,7 @@ public void clearThreadState(final @NotNull Consumer consumer) { } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private @Nullable ConsumerRecord delegateIntercept( diff --git a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientHttpRequestInterceptor.java b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientHttpRequestInterceptor.java index 8a5d1db3e05..7f0c23f714f 100644 --- a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientHttpRequestInterceptor.java +++ b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientHttpRequestInterceptor.java @@ -126,7 +126,7 @@ private void maybeAddTracingHeaders( } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), traceOrigin); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), traceOrigin); } private void addBreadcrumb( diff --git a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientWebRequestFilter.java b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientWebRequestFilter.java index 1920a8f6ea2..1a0238e5be0 100644 --- a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientWebRequestFilter.java +++ b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientWebRequestFilter.java @@ -110,7 +110,7 @@ public SentrySpanClientWebRequestFilter(final @NotNull IScopes scopes) { } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void addBreadcrumb( diff --git a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentryTracingFilter.java b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentryTracingFilter.java index f32dcb3b873..4832e1c21ff 100644 --- a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentryTracingFilter.java +++ b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentryTracingFilter.java @@ -127,7 +127,7 @@ protected void doFilterInternal( } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void doFilterWithTransaction( diff --git a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/webflux/AbstractSentryWebFilter.java b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/webflux/AbstractSentryWebFilter.java index da7be16d9af..a3edfd54c83 100644 --- a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/webflux/AbstractSentryWebFilter.java +++ b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/webflux/AbstractSentryWebFilter.java @@ -66,7 +66,7 @@ && shouldTraceRequest(requestScopes, request)) { } private boolean isIgnored(final @NotNull IScopes scopes, final @NotNull String origin) { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), origin); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), origin); } protected void doFinally( diff --git a/sentry-spring/src/main/java/io/sentry/spring/kafka/SentryKafkaRecordInterceptor.java b/sentry-spring/src/main/java/io/sentry/spring/kafka/SentryKafkaRecordInterceptor.java index ed26e2ee795..bf65b64f950 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/kafka/SentryKafkaRecordInterceptor.java +++ b/sentry-spring/src/main/java/io/sentry/spring/kafka/SentryKafkaRecordInterceptor.java @@ -135,7 +135,7 @@ public void clearThreadState(final @NotNull Consumer consumer) { } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private @Nullable ConsumerRecord delegateIntercept( diff --git a/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientHttpRequestInterceptor.java b/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientHttpRequestInterceptor.java index 3a0bd6fc8cb..bdf2613540c 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientHttpRequestInterceptor.java +++ b/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientHttpRequestInterceptor.java @@ -118,7 +118,7 @@ private void maybeAddTracingHeaders( } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void addBreadcrumb( diff --git a/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientWebRequestFilter.java b/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientWebRequestFilter.java index eda50c41af2..5eeb0604463 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientWebRequestFilter.java +++ b/sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientWebRequestFilter.java @@ -107,7 +107,7 @@ private ClientRequest maybeAddHeaders( } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void addBreadcrumb( diff --git a/sentry-spring/src/main/java/io/sentry/spring/tracing/SentryTracingFilter.java b/sentry-spring/src/main/java/io/sentry/spring/tracing/SentryTracingFilter.java index 941e160153e..02da16feaca 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/tracing/SentryTracingFilter.java +++ b/sentry-spring/src/main/java/io/sentry/spring/tracing/SentryTracingFilter.java @@ -126,7 +126,7 @@ protected void doFilterInternal( } private boolean isIgnored() { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private void doFilterWithTransaction( diff --git a/sentry-spring/src/main/java/io/sentry/spring/webflux/SentryWebFilter.java b/sentry-spring/src/main/java/io/sentry/spring/webflux/SentryWebFilter.java index 36e431dc124..031f579d4e4 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/webflux/SentryWebFilter.java +++ b/sentry-spring/src/main/java/io/sentry/spring/webflux/SentryWebFilter.java @@ -110,7 +110,7 @@ isTracingEnabled && shouldTraceRequest(requestScopes, request) } private boolean isIgnored(final @NotNull IScopes scopes) { - return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), TRACE_ORIGIN); + return SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOriginFilters(), TRACE_ORIGIN); } private boolean shouldTraceRequest( diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 8a08b2133be..f5dba14a31a 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -3551,10 +3551,14 @@ public class io/sentry/SentryOptions : io/sentry/transport/RateLimiterConfig { public fun getGestureTargetLocators ()Ljava/util/List; public fun getHostnameCache ()Lio/sentry/HostnameCache; public fun getIdleTimeout ()Ljava/lang/Long; + public fun getIgnoredCheckInFilters ()Ljava/util/List; public fun getIgnoredCheckIns ()Ljava/util/List; + public fun getIgnoredErrorFilters ()Ljava/util/List; public fun getIgnoredErrors ()Ljava/util/List; public fun getIgnoredExceptionsForType ()Ljava/util/Set; + public fun getIgnoredSpanOriginFilters ()Ljava/util/List; public fun getIgnoredSpanOrigins ()Ljava/util/List; + public fun getIgnoredTransactionFilters ()Ljava/util/List; public fun getIgnoredTransactions ()Ljava/util/List; public fun getInAppExcludes ()Ljava/util/List; public fun getInAppIncludes ()Ljava/util/List; diff --git a/sentry/src/main/java/io/sentry/Scopes.java b/sentry/src/main/java/io/sentry/Scopes.java index 1f3581d2af0..618c9c212a8 100644 --- a/sentry/src/main/java/io/sentry/Scopes.java +++ b/sentry/src/main/java/io/sentry/Scopes.java @@ -885,7 +885,7 @@ public void flush(long timeoutMillis) { "Instance is disabled and this 'startTransaction' returns a no-op."); transaction = NoOpTransaction.getInstance(); } else if (SpanUtils.isIgnored( - getOptions().getIgnoredSpanOrigins(), transactionContext.getOrigin())) { + getOptions().getIgnoredSpanOriginFilters(), transactionContext.getOrigin())) { getOptions() .getLogger() .log( diff --git a/sentry/src/main/java/io/sentry/SentryClient.java b/sentry/src/main/java/io/sentry/SentryClient.java index 22d330587c9..e0b1901f9b8 100644 --- a/sentry/src/main/java/io/sentry/SentryClient.java +++ b/sentry/src/main/java/io/sentry/SentryClient.java @@ -128,7 +128,7 @@ private boolean shouldApplyScopeData(final @NotNull CheckIn event, final @NotNul return SentryId.EMPTY_ID; } - if (ErrorUtils.isIgnored(options.getIgnoredErrors(), event)) { + if (ErrorUtils.isIgnored(options.getIgnoredErrorFilters(), event)) { options .getLogger() .log( @@ -1006,7 +1006,8 @@ public void captureSession(final @NotNull Session session, final @Nullable Hint .getLogger() .log(SentryLevel.DEBUG, "Capturing transaction: %s", transaction.getEventId()); - if (TracingUtils.isIgnored(options.getIgnoredTransactions(), transaction.getTransaction())) { + if (TracingUtils.isIgnored( + options.getIgnoredTransactionFilters(), transaction.getTransaction())) { options .getLogger() .log( @@ -1165,7 +1166,7 @@ public void captureSession(final @NotNull Session session, final @Nullable Hint checkIn.setRelease(options.getRelease()); } - if (CheckInUtils.isIgnored(options.getIgnoredCheckIns(), checkIn.getMonitorSlug())) { + if (CheckInUtils.isIgnored(options.getIgnoredCheckInFilters(), checkIn.getMonitorSlug())) { options .getLogger() .log( diff --git a/sentry/src/main/java/io/sentry/SentryOptions.java b/sentry/src/main/java/io/sentry/SentryOptions.java index 7c0da8f89c5..71dd4588e33 100644 --- a/sentry/src/main/java/io/sentry/SentryOptions.java +++ b/sentry/src/main/java/io/sentry/SentryOptions.java @@ -2032,11 +2032,23 @@ boolean containsIgnoredExceptionForType(final @NotNull Throwable throwable) { * `{event.throwable.class.name}: {event.throwable.message}` are checked against to determine if * an event shall be sent to Sentry or ignored. * + *

The returned list is a copy. Use the setter or adder to change the configured values. + * * @return the list of strings/regex patterns that `event.message`, `event.formatted`, and * `{event.throwable.class.name}: {event.throwable.message}` are checked against to determine * if an event shall be sent to Sentry or ignored */ - public @Nullable List getIgnoredErrors() { + public @Nullable List getIgnoredErrors() { + return toFilterStrings(ignoredErrors); + } + + /** + * Returns the compiled filters for {@link #getIgnoredErrors()}. + * + * @return the compiled filters + */ + @ApiStatus.Internal + public @Nullable List getIgnoredErrorFilters() { return ignoredErrors; } @@ -2959,9 +2971,21 @@ public void setSendModules(boolean sendModules) { * Returns the list of strings/regex patterns the origin of a new span/transaction will be tested * against to determine whether the span/transaction shall be created. * + *

The returned list is a copy. Use the setter or adder to change the configured values. + * * @return the list of strings or regex patterns */ - public @Nullable List getIgnoredSpanOrigins() { + public @Nullable List getIgnoredSpanOrigins() { + return toFilterStrings(ignoredSpanOrigins); + } + + /** + * Returns the compiled filters for {@link #getIgnoredSpanOrigins()}. + * + * @return the compiled filters + */ + @ApiStatus.Internal + public @Nullable List getIgnoredSpanOriginFilters() { return ignoredSpanOrigins; } @@ -3002,9 +3026,21 @@ public void setIgnoredSpanOrigins(final @Nullable List ignoredSpanOrigin /** * Returns the list of monitor slugs for which captured check-ins should not be sent to Sentry. * + *

The returned list is a copy. Use the setter or adder to change the configured values. + * * @return the list of monitor slugs */ - public @Nullable List getIgnoredCheckIns() { + public @Nullable List getIgnoredCheckIns() { + return toFilterStrings(ignoredCheckIns); + } + + /** + * Returns the compiled filters for {@link #getIgnoredCheckIns()}. + * + * @return the compiled filters + */ + @ApiStatus.Internal + public @Nullable List getIgnoredCheckInFilters() { return ignoredCheckIns; } @@ -3045,12 +3081,36 @@ public void setIgnoredCheckIns(final @Nullable List ignoredCheckIns) { * Returns the list of strings/regex patterns that captured transaction names are checked against * to determine if a transaction shall be sent to Sentry or ignored. * + *

The returned list is a copy. Use the setter or adder to change the configured values. + * * @return the list of strings/regex patterns */ - public @Nullable List getIgnoredTransactions() { + public @Nullable List getIgnoredTransactions() { + return toFilterStrings(ignoredTransactions); + } + + /** + * Returns the compiled filters for {@link #getIgnoredTransactions()}. + * + * @return the compiled filters + */ + @ApiStatus.Internal + public @Nullable List getIgnoredTransactionFilters() { return ignoredTransactions; } + private static @Nullable List toFilterStrings( + final @Nullable List filters) { + if (filters == null) { + return null; + } + final @NotNull List strings = new ArrayList<>(filters.size()); + for (final @NotNull FilterString filter : filters) { + strings.add(filter.getFilterString()); + } + return strings; + } + /** * Adds an element the list of strings/regex patterns that captured transaction names are checked * against to determine if a transaction shall be sent to Sentry or ignored. diff --git a/sentry/src/main/java/io/sentry/SentryTracer.java b/sentry/src/main/java/io/sentry/SentryTracer.java index 0c6c1106041..ad130ac55a9 100644 --- a/sentry/src/main/java/io/sentry/SentryTracer.java +++ b/sentry/src/main/java/io/sentry/SentryTracer.java @@ -426,7 +426,8 @@ private ISpan createChild( return NoOpSpan.getInstance(); } - if (SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), spanOptions.getOrigin())) { + if (SpanUtils.isIgnored( + scopes.getOptions().getIgnoredSpanOriginFilters(), spanOptions.getOrigin())) { return NoOpSpan.getInstance(); } diff --git a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt index e8e9046cfe1..2a33e9b53f1 100644 --- a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt @@ -626,13 +626,13 @@ class SentryOptionsTest { assertFalse(options.isEnabled) assertFalse(options.isEnablePrettySerializationOutput) assertFalse(options.isSendModules) - assertEquals(listOf(FilterString("slug1"), FilterString("slug-B")), options.ignoredCheckIns) + assertEquals(listOf("slug1", "slug-B"), options.ignoredCheckIns) assertEquals( - listOf(FilterString("transactionName1"), FilterString("transaction-name-B")), + listOf("transactionName1", "transaction-name-B"), options.ignoredTransactions, ) assertEquals( - listOf(FilterString("Some error"), FilterString("Another .*")), + listOf("Some error", "Another .*"), options.ignoredErrors, ) assertFalse(options.isEnableBackpressureHandling) @@ -1049,13 +1049,45 @@ class SentryOptionsTest { assertEquals(SentryOptions().initPriority, InitPriority.MEDIUM) } + @Test + fun `ignored filter getters return the strings that were set`() { + val options = SentryOptions() + options.ignoredErrors = listOf("error", "") + options.ignoredTransactions = listOf("transaction.*") + options.ignoredCheckIns = listOf("slug") + options.ignoredSpanOrigins = listOf("auto.http.*") + options.addIgnoredSpanOrigin("manual") + + assertEquals(listOf("error"), options.ignoredErrors) + assertEquals(listOf("transaction.*"), options.ignoredTransactions) + assertEquals(listOf("slug"), options.ignoredCheckIns) + assertEquals(listOf("auto.http.*", "manual"), options.ignoredSpanOrigins) + + assertEquals(listOf(FilterString("error")), options.ignoredErrorFilters) + assertEquals(listOf(FilterString("transaction.*")), options.ignoredTransactionFilters) + assertEquals(listOf(FilterString("slug")), options.ignoredCheckInFilters) + assertEquals( + listOf(FilterString("auto.http.*"), FilterString("manual")), + options.ignoredSpanOriginFilters, + ) + } + + @Test + fun `ignored filter getters return null when unset`() { + val options = SentryOptions() + assertNull(options.ignoredErrors) + assertNull(options.ignoredTransactions) + assertNull(options.ignoredCheckIns) + assertNull(options.ignoredSpanOrigins) + } + @Test fun `merging options when ignoredErrors is not set preserves the previous value`() { val externalOptions = ExternalOptions() val options = SentryOptions() options.setIgnoredErrors(listOf("error1", "error2")) options.merge(externalOptions) - assertEquals(listOf(FilterString("error1"), FilterString("error2")), options.ignoredErrors) + assertEquals(listOf("error1", "error2"), options.ignoredErrors) } @Test @@ -1065,7 +1097,7 @@ class SentryOptionsTest { options.setIgnoredTransactions(listOf("transaction1", "transaction2")) options.merge(externalOptions) assertEquals( - listOf(FilterString("transaction1"), FilterString("transaction2")), + listOf("transaction1", "transaction2"), options.ignoredTransactions, ) } @@ -1077,7 +1109,7 @@ class SentryOptionsTest { options.setIgnoredCheckIns(listOf("checkin1", "checkin2")) options.merge(externalOptions) assertEquals( - listOf(FilterString("checkin1"), FilterString("checkin2")), + listOf("checkin1", "checkin2"), options.ignoredCheckIns, ) }