Skip to content

Commit

Permalink
Print a warning if the rate limit was reached (#2595)
Browse files Browse the repository at this point in the history
  • Loading branch information
denrase authored Jan 21, 2025
1 parent 1c926c2 commit 8bac8ba
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
- Add SentryReplayQuality setting (`options.experimental.replay.quality`) ([#2582](https://github.com/getsentry/sentry-dart/pull/2582))
- SPM Support ([#2280](https://github.com/getsentry/sentry-dart/pull/2280))

### Enhancements

- Print a warning if the rate limit was reached ([#2595](https://github.com/getsentry/sentry-dart/pull/2595))

### Fixes

- WASM compat for Drift ([#2580](https://github.com/getsentry/sentry-dart/pull/2580))
Expand Down
4 changes: 4 additions & 0 deletions dart/lib/src/transport/http_transport.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ class HttpTransport implements Transport {
if (response.statusCode == 200) {
return _parseEventId(response);
}
if (response.statusCode == 429) {
_options.logger(
SentryLevel.warning, 'Rate limit reached, failed to send envelope');
}
return SentryId.empty();
}

Expand Down
24 changes: 24 additions & 0 deletions dart/test/transport/http_transport_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ void main() {
expect(mockRateLimiter.errorCode, 429);
expect(mockRateLimiter.retryAfterHeader, '1');
expect(mockRateLimiter.sentryRateLimitHeader, isNull);

expect(fixture.loggedLevel, SentryLevel.warning);
expect(
fixture.loggedMessage, 'Rate limit reached, failed to send envelope');
});

test('sentryRateLimitHeader', () async {
Expand Down Expand Up @@ -207,6 +211,10 @@ void main() {
await sut.send(envelope);

expect(fixture.clientReportRecorder.discardedEvents.isEmpty, isTrue);

expect(fixture.loggedLevel, SentryLevel.warning);
expect(
fixture.loggedMessage, 'Rate limit reached, failed to send envelope');
});

test('does record lost event for error >= 500', () async {
Expand Down Expand Up @@ -237,6 +245,8 @@ class Fixture {
late var clientReportRecorder = MockClientReportRecorder();

HttpTransport getSut(http.Client client, RateLimiter rateLimiter) {
options.debug = true;
options.logger = mockLogger;
options.httpClient = client;
options.recorder = clientReportRecorder;
options.clock = () {
Expand All @@ -254,4 +264,18 @@ class Fixture {
final tracer = SentryTracer(context, MockHub());
return SentryTransaction(tracer);
}

SentryLevel? loggedLevel;
String? loggedMessage;

void mockLogger(
SentryLevel level,
String message, {
String? logger,
Object? exception,
StackTrace? stackTrace,
}) {
loggedLevel = level;
loggedMessage = message;
}
}

0 comments on commit 8bac8ba

Please sign in to comment.