Skip to content

Commit c608602

Browse files
[Logs 2] Rate limit for log items (#4373)
* Add Log feature to Java SDK * Rate limit for log items * Format code --------- Co-authored-by: Sentry Github Bot <bot+github-bot@sentry.io>
1 parent b01f8f5 commit c608602

File tree

5 files changed

+35
-0
lines changed

5 files changed

+35
-0
lines changed

sentry/api/sentry.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ public final class io/sentry/DataCategory : java/lang/Enum {
353353
public static final field Default Lio/sentry/DataCategory;
354354
public static final field Error Lio/sentry/DataCategory;
355355
public static final field Feedback Lio/sentry/DataCategory;
356+
public static final field LogItem Lio/sentry/DataCategory;
356357
public static final field Monitor Lio/sentry/DataCategory;
357358
public static final field Profile Lio/sentry/DataCategory;
358359
public static final field ProfileChunkUi Lio/sentry/DataCategory;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public enum DataCategory {
1111
Feedback("feedback"),
1212
Session("session"),
1313
Attachment("attachment"),
14+
LogItem("log_item"),
1415
Monitor("monitor"),
1516
Profile("profile"),
1617
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
@@ -180,6 +180,9 @@ private DataCategory categoryFromItemType(SentryItemType itemType) {
180180
if (SentryItemType.ReplayVideo.equals(itemType)) {
181181
return DataCategory.Replay;
182182
}
183+
if (SentryItemType.Log.equals(itemType)) {
184+
return DataCategory.LogItem;
185+
}
183186

184187
return DataCategory.Default;
185188
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ private boolean isRetryAfter(final @NotNull String itemType) {
204204
return DataCategory.Replay;
205205
case "feedback":
206206
return DataCategory.Feedback;
207+
case "log":
208+
return DataCategory.LogItem;
207209
default:
208210
return DataCategory.Unknown;
209211
}

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

Lines changed: 28 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
@@ -340,6 +343,31 @@ class RateLimiterTest {
340343
verifyNoMoreInteractions(fixture.clientReportRecorder)
341344
}
342345

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

0 commit comments

Comments
 (0)