Skip to content

Commit 35af39a

Browse files
lblodergetsentry-botadinauer
authored
Improve ignored check performance (#3992)
* add FilterString, use FilterString when adding ignoredSpanOrigins * add test, setIgnoredSpanOrigins as List of String * add cache map for SpanUtils, use precompiled pattern and equals first approach for CheckInUtils and TracingUtils * adapt tests to use the new setIgnored* methods * add changelog * Format code * Update sentry/src/main/java/io/sentry/FilterString.java Co-authored-by: Alexander Dinauer <[email protected]> * add tests for multiple invocations * Format code --------- Co-authored-by: Sentry Github Bot <[email protected]> Co-authored-by: Alexander Dinauer <[email protected]>
1 parent e02c690 commit 35af39a

File tree

28 files changed

+242
-72
lines changed

28 files changed

+242
-72
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
- This keeps it from being garbage collected too early
3535
- Close backpressure monitor on SDK shutdown ([#3998](https://github.com/getsentry/sentry-java/pull/3998))
3636
- Due to the backpressure monitor rescheduling a task to run every 10s, it very likely caused shutdown to wait the full `shutdownTimeoutMillis` (defaulting to 2s) instead of being able to terminate immediately
37+
- Improve ignored check performance ([#3992](https://github.com/getsentry/sentry-java/pull/3992))
38+
- Checking if a span origin, a transaction or a checkIn should be ignored is now faster
3739

3840
## 8.0.0-rc.2
3941

sentry-apollo-3/src/test/java/io/sentry/apollo3/SentryApollo3InterceptorTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ class SentryApollo3InterceptorTest {
210210

211211
@Test
212212
fun `does not add sentry-trace header when span origin is ignored`() {
213-
fixture.options.ignoredSpanOrigins = listOf("auto.graphql.apollo3")
213+
fixture.options.setIgnoredSpanOrigins(listOf("auto.graphql.apollo3"))
214214
executeQuery(isSpanActive = false)
215215

216216
val recorderRequest = fixture.server.takeRequest(mockServerRequestTimeoutMillis, TimeUnit.MILLISECONDS)!!

sentry-apollo/src/test/java/io/sentry/apollo/SentryApolloInterceptorTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ class SentryApolloInterceptorTest {
163163

164164
@Test
165165
fun `does not add sentry-trace header when span origin is ignored`() {
166-
fixture.options.ignoredSpanOrigins = listOf("auto.graphql.apollo")
166+
fixture.options.setIgnoredSpanOrigins(listOf("auto.graphql.apollo"))
167167
executeQuery(isSpanActive = false)
168168

169169
val recorderRequest = fixture.server.takeRequest(mockServerRequestTimeoutMillis, TimeUnit.MILLISECONDS)!!

sentry-okhttp/src/test/java/io/sentry/okhttp/SentryOkHttpInterceptorTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class SentryOkHttpInterceptorTest {
213213
@Test
214214
fun `does not add sentry-trace header when span origin is ignored`() {
215215
val sut = fixture.getSut(isSpanActive = false) { options ->
216-
options.ignoredSpanOrigins = listOf("auto.http.okhttp")
216+
options.setIgnoredSpanOrigins(listOf("auto.http.okhttp"))
217217
}
218218
sut.newCall(getRequest()).execute()
219219
val recorderRequest = fixture.server.takeRequest(mockServerRequestTimeoutMillis, TimeUnit.MILLISECONDS)!!

sentry-openfeign/src/test/kotlin/io/sentry/openfeign/SentryFeignClientTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class SentryFeignClientTest {
133133
@Test
134134
fun `does not add sentry trace header when span origin is ignored`() {
135135
fixture.sentryOptions.dsn = "https://[email protected]/proj"
136-
fixture.sentryOptions.ignoredSpanOrigins = listOf("auto.http.openfeign")
136+
fixture.sentryOptions.setIgnoredSpanOrigins(listOf("auto.http.openfeign"))
137137
val sut = fixture.getSut(isSpanActive = false)
138138
sut.getOk()
139139
val recorderRequest = fixture.server.takeRequest(mockServerRequestTimeoutMillis, TimeUnit.MILLISECONDS)!!

sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.opentelemetry.api.OpenTelemetry
55
import io.sentry.AsyncHttpTransportFactory
66
import io.sentry.Breadcrumb
77
import io.sentry.EventProcessor
8+
import io.sentry.FilterString
89
import io.sentry.Hint
910
import io.sentry.IScopes
1011
import io.sentry.ITransportFactory
@@ -213,8 +214,8 @@ class SentryAutoConfigurationTest {
213214
assertThat(options.tracePropagationTargets).containsOnly("localhost", "^(http|https)://api\\..*\$")
214215
assertThat(options.isEnabled).isEqualTo(false)
215216
assertThat(options.isSendModules).isEqualTo(false)
216-
assertThat(options.ignoredCheckIns).containsOnly("slug1", "slugB")
217-
assertThat(options.ignoredTransactions).containsOnly("transactionName1", "transactionNameB")
217+
assertThat(options.ignoredCheckIns).containsOnly(FilterString("slug1"), FilterString("slugB"))
218+
assertThat(options.ignoredTransactions).containsOnly(FilterString("transactionName1"), FilterString("transactionNameB"))
218219
assertThat(options.isEnableBackpressureHandling).isEqualTo(false)
219220
assertThat(options.isForceInit).isEqualTo(true)
220221
assertThat(options.isGlobalHubMode).isEqualTo(true)

sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentrySpanRestClientCustomizerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ class SentrySpanRestClientCustomizerTest {
251251

252252
@Test
253253
fun `does not add sentry-trace header if span origin is ignored`() {
254-
fixture.sentryOptions.ignoredSpanOrigins = listOf("auto.http.spring_jakarta.restclient")
254+
fixture.sentryOptions.setIgnoredSpanOrigins(listOf("auto.http.spring_jakarta.restclient"))
255255
val sut = fixture.getSut(isTransactionActive = false)
256256
val headers = HttpHeaders()
257257

sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentrySpanRestTemplateCustomizerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class SentrySpanRestTemplateCustomizerTest {
201201

202202
@Test
203203
fun `does not add sentry-trace header when span origin is ignored`() {
204-
fixture.sentryOptions.ignoredSpanOrigins = listOf("auto.http.spring_jakarta.resttemplate")
204+
fixture.sentryOptions.setIgnoredSpanOrigins(listOf("auto.http.spring_jakarta.resttemplate"))
205205
val sut = fixture.getSut(isTransactionActive = false)
206206
val headers = HttpHeaders()
207207
val requestEntity = HttpEntity<Unit>(headers)

sentry-spring-boot-jakarta/src/test/kotlin/io/sentry/spring/boot/jakarta/SentrySpanWebClientCustomizerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ class SentrySpanWebClientCustomizerTest {
168168
@Test
169169
fun `does not add sentry-trace header when span origin is ignored`() {
170170
val sut = fixture.getSut(isTransactionActive = false, includeMockServerInTracingOrigins = true) { options ->
171-
options.ignoredSpanOrigins = listOf("auto.http.spring_jakarta.webclient")
171+
options.setIgnoredSpanOrigins(listOf("auto.http.spring_jakarta.webclient"))
172172
}
173173
sut
174174
.get()

sentry-spring-boot/src/test/kotlin/io/sentry/spring/boot/SentryAutoConfigurationTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.opentelemetry.api.OpenTelemetry
55
import io.sentry.AsyncHttpTransportFactory
66
import io.sentry.Breadcrumb
77
import io.sentry.EventProcessor
8+
import io.sentry.FilterString
89
import io.sentry.Hint
910
import io.sentry.IScopes
1011
import io.sentry.ITransportFactory
@@ -212,8 +213,8 @@ class SentryAutoConfigurationTest {
212213
assertThat(options.tracePropagationTargets).containsOnly("localhost", "^(http|https)://api\\..*\$")
213214
assertThat(options.isEnabled).isEqualTo(false)
214215
assertThat(options.isSendModules).isEqualTo(false)
215-
assertThat(options.ignoredCheckIns).containsOnly("slug1", "slugB")
216-
assertThat(options.ignoredTransactions).containsOnly("transactionName1", "transactionNameB")
216+
assertThat(options.ignoredCheckIns).containsOnly(FilterString("slug1"), FilterString("slugB"))
217+
assertThat(options.ignoredTransactions).containsOnly(FilterString("transactionName1"), FilterString("transactionNameB"))
217218
assertThat(options.isEnableBackpressureHandling).isEqualTo(false)
218219
assertThat(options.isForceInit).isEqualTo(true)
219220
assertThat(options.isGlobalHubMode).isEqualTo(true)

sentry-spring-boot/src/test/kotlin/io/sentry/spring/boot/SentrySpanRestTemplateCustomizerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ class SentrySpanRestTemplateCustomizerTest {
203203

204204
@Test
205205
fun `does not add sentry-trace header when span origin is ignored`() {
206-
fixture.sentryOptions.ignoredSpanOrigins = listOf("auto.http.spring.resttemplate")
206+
fixture.sentryOptions.setIgnoredSpanOrigins(listOf("auto.http.spring.resttemplate"))
207207
val sut = fixture.getSut(isTransactionActive = false)
208208
val headers = HttpHeaders()
209209
val requestEntity = HttpEntity<Unit>(headers)

sentry-spring-boot/src/test/kotlin/io/sentry/spring/boot/SentrySpanWebClientCustomizerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ class SentrySpanWebClientCustomizerTest {
170170
@Test
171171
fun `does not add sentry-trace header when span origin is ignored`() {
172172
val sut = fixture.getSut(isTransactionActive = false, includeMockServerInTracingOrigins = true) { options ->
173-
options.ignoredSpanOrigins = listOf("auto.http.spring.webclient")
173+
options.setIgnoredSpanOrigins(listOf("auto.http.spring.webclient"))
174174
}
175175
sut
176176
.get()

sentry-spring-jakarta/src/test/kotlin/io/sentry/spring/jakarta/tracing/SentryTracingFilterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ class SentryTracingFilterTest {
291291
val sentryTraceHeaderString = "2722d9f6ec019ade60c776169d9a8904-$parentSpanId-1"
292292
val baggageHeaderStrings = listOf("sentry-public_key=502f25099c204a2fbf4cb16edc5975d1,sentry-sample_rate=1,sentry-trace_id=2722d9f6ec019ade60c776169d9a8904,sentry-transaction=HTTP%20GET")
293293
fixture.options.tracesSampleRate = null
294-
fixture.options.ignoredSpanOrigins = listOf("auto.http.spring_jakarta.webmvc")
294+
fixture.options.setIgnoredSpanOrigins(listOf("auto.http.spring_jakarta.webmvc"))
295295
val filter = fixture.getSut(sentryTraceHeader = sentryTraceHeaderString, baggageHeaders = baggageHeaderStrings)
296296

297297
filter.doFilter(fixture.request, fixture.response, fixture.chain)

sentry-spring-jakarta/src/test/kotlin/io/sentry/spring/jakarta/webflux/SentryWebFluxTracingFilterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ class SentryWebFluxTracingFilterTest {
330330
val sentryTraceHeaderString = "2722d9f6ec019ade60c776169d9a8904-$parentSpanId-1"
331331
val baggageHeaderStrings = listOf("sentry-public_key=502f25099c204a2fbf4cb16edc5975d1,sentry-sample_rate=1,sentry-trace_id=2722d9f6ec019ade60c776169d9a8904,sentry-transaction=HTTP%20GET")
332332
fixture.options.tracesSampleRate = null
333-
fixture.options.ignoredSpanOrigins = listOf("auto.spring_jakarta.webflux")
333+
fixture.options.setIgnoredSpanOrigins(listOf("auto.spring_jakarta.webflux"))
334334
val filter = fixture.getSut(sentryTraceHeader = sentryTraceHeaderString, baggageHeaders = baggageHeaderStrings)
335335

336336
withMockScopes {

sentry-spring/src/test/kotlin/io/sentry/spring/tracing/SentryTracingFilterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ class SentryTracingFilterTest {
291291
val sentryTraceHeaderString = "2722d9f6ec019ade60c776169d9a8904-$parentSpanId-1"
292292
val baggageHeaderStrings = listOf("sentry-public_key=502f25099c204a2fbf4cb16edc5975d1,sentry-sample_rate=1,sentry-trace_id=2722d9f6ec019ade60c776169d9a8904,sentry-transaction=HTTP%20GET")
293293
fixture.options.tracesSampleRate = null
294-
fixture.options.ignoredSpanOrigins = listOf("auto.http.spring.webmvc")
294+
fixture.options.setIgnoredSpanOrigins(listOf("auto.http.spring.webmvc"))
295295
val filter = fixture.getSut(sentryTraceHeader = sentryTraceHeaderString, baggageHeaders = baggageHeaderStrings)
296296

297297
filter.doFilter(fixture.request, fixture.response, fixture.chain)

sentry-spring/src/test/kotlin/io/sentry/spring/webflux/SentryWebFluxTracingFilterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ class SentryWebFluxTracingFilterTest {
331331
val sentryTraceHeaderString = "2722d9f6ec019ade60c776169d9a8904-$parentSpanId-1"
332332
val baggageHeaderStrings = listOf("sentry-public_key=502f25099c204a2fbf4cb16edc5975d1,sentry-sample_rate=1,sentry-trace_id=2722d9f6ec019ade60c776169d9a8904,sentry-transaction=HTTP%20GET")
333333
fixture.options.tracesSampleRate = null
334-
fixture.options.ignoredSpanOrigins = listOf("auto.spring.webflux")
334+
fixture.options.setIgnoredSpanOrigins(listOf("auto.spring.webflux"))
335335
val filter = fixture.getSut(sentryTraceHeader = sentryTraceHeaderString, baggageHeaders = baggageHeaderStrings)
336336

337337
withMockScopes {

sentry/api/sentry.api

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,14 @@ public final class io/sentry/ExternalOptions {
509509
public fun setTracesSampleRate (Ljava/lang/Double;)V
510510
}
511511

512+
public final class io/sentry/FilterString {
513+
public fun <init> (Ljava/lang/String;)V
514+
public fun equals (Ljava/lang/Object;)Z
515+
public fun getFilterString ()Ljava/lang/String;
516+
public fun hashCode ()I
517+
public fun matches (Ljava/lang/String;)Z
518+
}
519+
512520
public final class io/sentry/FullyDisplayedReporter {
513521
public static fun getInstance ()Lio/sentry/FullyDisplayedReporter;
514522
public fun registerFullyDrawnListener (Lio/sentry/FullyDisplayedReporter$FullyDisplayedReporterListener;)V
@@ -2806,8 +2814,10 @@ public class io/sentry/SentryOptions {
28062814
public fun addBundleId (Ljava/lang/String;)V
28072815
public fun addContextTag (Ljava/lang/String;)V
28082816
public fun addEventProcessor (Lio/sentry/EventProcessor;)V
2817+
public fun addIgnoredCheckIn (Ljava/lang/String;)V
28092818
public fun addIgnoredExceptionForType (Ljava/lang/Class;)V
28102819
public fun addIgnoredSpanOrigin (Ljava/lang/String;)V
2820+
public fun addIgnoredTransaction (Ljava/lang/String;)V
28112821
public fun addInAppExclude (Ljava/lang/String;)V
28122822
public fun addInAppInclude (Ljava/lang/String;)V
28132823
public fun addIntegration (Lio/sentry/Integration;)V
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.sentry;
2+
3+
import java.util.Objects;
4+
import java.util.regex.Pattern;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
public final class FilterString {
8+
private final @NotNull String filterString;
9+
private final @NotNull Pattern pattern;
10+
11+
public FilterString(@NotNull String filterString) {
12+
this.filterString = filterString;
13+
this.pattern = Pattern.compile(filterString);
14+
}
15+
16+
public @NotNull String getFilterString() {
17+
return filterString;
18+
}
19+
20+
public boolean matches(String input) {
21+
return pattern.matcher(input).matches();
22+
}
23+
24+
@Override
25+
public boolean equals(Object o) {
26+
if (o == null || getClass() != o.getClass()) return false;
27+
FilterString that = (FilterString) o;
28+
return Objects.equals(filterString, that.filterString);
29+
}
30+
31+
@Override
32+
public int hashCode() {
33+
return Objects.hash(filterString);
34+
}
35+
}

sentry/src/main/java/io/sentry/SentryOptions.java

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -466,12 +466,12 @@ public class SentryOptions {
466466
private boolean enableScopePersistence = true;
467467

468468
/** Contains a list of monitor slugs for which check-ins should not be sent. */
469-
@ApiStatus.Experimental private @Nullable List<String> ignoredCheckIns = null;
469+
@ApiStatus.Experimental private @Nullable List<FilterString> ignoredCheckIns = null;
470470

471471
/** Contains a list of span origins for which spans / transactions should not be created. */
472-
@ApiStatus.Experimental private @Nullable List<String> ignoredSpanOrigins = null;
472+
@ApiStatus.Experimental private @Nullable List<FilterString> ignoredSpanOrigins = null;
473473

474-
private @Nullable List<String> ignoredTransactions = null;
474+
private @Nullable List<FilterString> ignoredTransactions = null;
475475

476476
@ApiStatus.Experimental
477477
private @NotNull IBackpressureMonitor backpressureMonitor = NoOpBackpressureMonitor.getInstance();
@@ -2175,42 +2175,27 @@ public void setSendModules(boolean sendModules) {
21752175
}
21762176

21772177
@ApiStatus.Experimental
2178-
public void setIgnoredCheckIns(final @Nullable List<String> ignoredCheckIns) {
2179-
if (ignoredCheckIns == null) {
2180-
this.ignoredCheckIns = null;
2181-
} else {
2182-
@NotNull final List<String> filteredIgnoredCheckIns = new ArrayList<>();
2183-
for (String slug : ignoredCheckIns) {
2184-
if (!slug.isEmpty()) {
2185-
filteredIgnoredCheckIns.add(slug);
2186-
}
2187-
}
2188-
2189-
this.ignoredCheckIns = filteredIgnoredCheckIns;
2190-
}
2191-
}
2192-
2193-
@ApiStatus.Experimental
2194-
public @Nullable List<String> getIgnoredSpanOrigins() {
2178+
public @Nullable List<FilterString> getIgnoredSpanOrigins() {
21952179
return ignoredSpanOrigins;
21962180
}
21972181

2198-
public void addIgnoredSpanOrigin(final @NotNull String origin) {
2199-
if (this.ignoredSpanOrigins == null) {
2200-
this.ignoredSpanOrigins = new ArrayList<>();
2182+
@ApiStatus.Experimental
2183+
public void addIgnoredSpanOrigin(String ignoredSpanOrigin) {
2184+
if (ignoredSpanOrigins == null) {
2185+
ignoredSpanOrigins = new ArrayList<>();
22012186
}
2202-
this.ignoredSpanOrigins.add(origin);
2187+
ignoredSpanOrigins.add(new FilterString(ignoredSpanOrigin));
22032188
}
22042189

22052190
@ApiStatus.Experimental
22062191
public void setIgnoredSpanOrigins(final @Nullable List<String> ignoredSpanOrigins) {
22072192
if (ignoredSpanOrigins == null) {
22082193
this.ignoredSpanOrigins = null;
22092194
} else {
2210-
@NotNull final List<String> filtered = new ArrayList<>();
2195+
@NotNull final List<FilterString> filtered = new ArrayList<>();
22112196
for (String origin : ignoredSpanOrigins) {
22122197
if (origin != null && !origin.isEmpty()) {
2213-
filtered.add(origin);
2198+
filtered.add(new FilterString(origin));
22142199
}
22152200
}
22162201

@@ -2219,23 +2204,55 @@ public void setIgnoredSpanOrigins(final @Nullable List<String> ignoredSpanOrigin
22192204
}
22202205

22212206
@ApiStatus.Experimental
2222-
public @Nullable List<String> getIgnoredCheckIns() {
2207+
public @Nullable List<FilterString> getIgnoredCheckIns() {
22232208
return ignoredCheckIns;
22242209
}
22252210

2226-
public @Nullable List<String> getIgnoredTransactions() {
2211+
@ApiStatus.Experimental
2212+
public void addIgnoredCheckIn(String ignoredCheckIn) {
2213+
if (ignoredCheckIns == null) {
2214+
ignoredCheckIns = new ArrayList<>();
2215+
}
2216+
ignoredCheckIns.add(new FilterString(ignoredCheckIn));
2217+
}
2218+
2219+
@ApiStatus.Experimental
2220+
public void setIgnoredCheckIns(final @Nullable List<String> ignoredCheckIns) {
2221+
if (ignoredCheckIns == null) {
2222+
this.ignoredCheckIns = null;
2223+
} else {
2224+
@NotNull final List<FilterString> filteredIgnoredCheckIns = new ArrayList<>();
2225+
for (String slug : ignoredCheckIns) {
2226+
if (!slug.isEmpty()) {
2227+
filteredIgnoredCheckIns.add(new FilterString(slug));
2228+
}
2229+
}
2230+
2231+
this.ignoredCheckIns = filteredIgnoredCheckIns;
2232+
}
2233+
}
2234+
2235+
public @Nullable List<FilterString> getIgnoredTransactions() {
22272236
return ignoredTransactions;
22282237
}
22292238

2239+
@ApiStatus.Experimental
2240+
public void addIgnoredTransaction(String ignoredTransaction) {
2241+
if (ignoredTransactions == null) {
2242+
ignoredTransactions = new ArrayList<>();
2243+
}
2244+
ignoredTransactions.add(new FilterString(ignoredTransaction));
2245+
}
2246+
22302247
@ApiStatus.Experimental
22312248
public void setIgnoredTransactions(final @Nullable List<String> ignoredTransactions) {
22322249
if (ignoredTransactions == null) {
22332250
this.ignoredTransactions = null;
22342251
} else {
2235-
@NotNull final List<String> filtered = new ArrayList<>();
2252+
@NotNull final List<FilterString> filtered = new ArrayList<>();
22362253
for (String transactionName : ignoredTransactions) {
22372254
if (transactionName != null && !transactionName.isEmpty()) {
2238-
filtered.add(transactionName);
2255+
filtered.add(new FilterString(transactionName));
22392256
}
22402257
}
22412258

sentry/src/main/java/io/sentry/util/CheckInUtils.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.sentry.CheckIn;
44
import io.sentry.CheckInStatus;
55
import io.sentry.DateUtils;
6+
import io.sentry.FilterString;
67
import io.sentry.IScopes;
78
import io.sentry.ISentryLifecycleToken;
89
import io.sentry.MonitorConfig;
@@ -116,18 +117,20 @@ public static <U> U withCheckIn(
116117
/** Checks if a check-in for a monitor (CRON) has been ignored. */
117118
@ApiStatus.Internal
118119
public static boolean isIgnored(
119-
final @Nullable List<String> ignoredSlugs, final @NotNull String slug) {
120+
final @Nullable List<FilterString> ignoredSlugs, final @NotNull String slug) {
120121
if (ignoredSlugs == null || ignoredSlugs.isEmpty()) {
121122
return false;
122123
}
123124

124-
for (final String ignoredSlug : ignoredSlugs) {
125-
if (ignoredSlug.equalsIgnoreCase(slug)) {
125+
for (final FilterString ignoredSlug : ignoredSlugs) {
126+
if (ignoredSlug.getFilterString().equalsIgnoreCase(slug)) {
126127
return true;
127128
}
129+
}
128130

131+
for (final FilterString ignoredSlug : ignoredSlugs) {
129132
try {
130-
if (slug.matches(ignoredSlug)) {
133+
if (ignoredSlug.matches(slug)) {
131134
return true;
132135
}
133136
} catch (Throwable t) {

0 commit comments

Comments
 (0)