Skip to content

Commit 27a24ec

Browse files
committed
Rate limit for log items
1 parent 0627186 commit 27a24ec

4 files changed

Lines changed: 29 additions & 0 deletions

File tree

sentry/src/main/java/io/sentry/DataCategory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public enum DataCategory {
1010
Error("error"),
1111
Session("session"),
1212
Attachment("attachment"),
13+
LogItem("log_item"),
1314
Monitor("monitor"),
1415
Profile("profile"),
1516
ProfileChunkUi("profile_chunk_ui"),

sentry/src/main/java/io/sentry/clientreport/ClientReportRecorder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ private DataCategory categoryFromItemType(SentryItemType itemType) {
177177
if (SentryItemType.ReplayVideo.equals(itemType)) {
178178
return DataCategory.Replay;
179179
}
180+
if (SentryItemType.Log.equals(itemType)) {
181+
return DataCategory.LogItem;
182+
}
180183

181184
return DataCategory.Default;
182185
}

sentry/src/main/java/io/sentry/transport/RateLimiter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ private boolean isRetryAfter(final @NotNull String itemType) {
202202
return DataCategory.Monitor;
203203
case "replay_video":
204204
return DataCategory.Replay;
205+
case "log":
206+
return DataCategory.LogItem;
205207
default:
206208
return DataCategory.Unknown;
207209
}

sentry/src/test/java/io/sentry/transport/RateLimiterTest.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import io.sentry.SentryEnvelope
1616
import io.sentry.SentryEnvelopeHeader
1717
import io.sentry.SentryEnvelopeItem
1818
import io.sentry.SentryEvent
19+
import io.sentry.SentryLogEvent
20+
import io.sentry.SentryLogEvents
21+
import io.sentry.SentryLongDate
1922
import io.sentry.SentryOptions
2023
import io.sentry.SentryOptionsManipulator
2124
import io.sentry.SentryReplayEvent
@@ -336,6 +339,26 @@ class RateLimiterTest {
336339
verifyNoMoreInteractions(fixture.clientReportRecorder)
337340
}
338341

342+
@Test
343+
fun `drop log items as lost`() {
344+
val rateLimiter = fixture.getSUT()
345+
val scopes = mock<IScopes>()
346+
whenever(scopes.options).thenReturn(SentryOptions())
347+
348+
val logEventItem = SentryEnvelopeItem.fromLogs(fixture.serializer, SentryLogEvents(listOf(
349+
SentryLogEvent(SentryId(), SentryLongDate(0), "hello")
350+
)))
351+
val envelope = SentryEnvelope(SentryEnvelopeHeader(null), arrayListOf(logEventItem))
352+
353+
rateLimiter.updateRetryAfterLimits("60:log_item:key", null, 1)
354+
val result = rateLimiter.filter(envelope, Hint())
355+
356+
assertNull(result)
357+
358+
verify(fixture.clientReportRecorder, times(1)).recordLostEnvelopeItem(eq(DiscardReason.RATELIMIT_BACKOFF), same(logEventItem))
359+
verifyNoMoreInteractions(fixture.clientReportRecorder)
360+
}
361+
339362
@Test
340363
fun `drop profileChunk items as lost`() {
341364
val rateLimiter = fixture.getSUT()

0 commit comments

Comments
 (0)