1717
1818package org .radarbase .connect .rest .fitbit .route ;
1919
20- import static java .time .ZoneOffset .UTC ;
21- import static java .time .temporal .ChronoUnit .DAYS ;
22- import static java .time .temporal .ChronoUnit .MINUTES ;
23- import static java .time .temporal .ChronoUnit .NANOS ;
24- import static java .time .temporal .ChronoUnit .SECONDS ;
25- import static org .radarbase .connect .rest .converter .PayloadToSourceRecordConverter .MIN_INSTANT ;
26- import static org .radarbase .connect .rest .converter .PayloadToSourceRecordConverter .TIMESTAMP_OFFSET_KEY ;
27- import static org .radarbase .connect .rest .converter .PayloadToSourceRecordConverter .nearFuture ;
28- import static org .radarbase .connect .rest .request .PollingRequestRoute .max ;
29-
3020import java .io .IOException ;
3121import java .time .Duration ;
3222import java .time .Instant ;
23+ import static java .time .ZoneOffset .UTC ;
3324import java .time .ZonedDateTime ;
3425import java .time .format .DateTimeFormatter ;
26+ import static java .time .temporal .ChronoUnit .DAYS ;
27+ import static java .time .temporal .ChronoUnit .MINUTES ;
28+ import static java .time .temporal .ChronoUnit .NANOS ;
29+ import static java .time .temporal .ChronoUnit .SECONDS ;
3530import java .time .temporal .TemporalAmount ;
3631import java .util .AbstractMap ;
3732import java .util .Comparator ;
4237import java .util .concurrent .ConcurrentHashMap ;
4338import java .util .stream .Collectors ;
4439import java .util .stream .Stream ;
45- import okhttp3 .Request ;
46- import okhttp3 .Response ;
40+
4741import org .apache .kafka .connect .source .SourceRecord ;
4842import org .apache .kafka .connect .storage .OffsetStorageReader ;
4943import org .radarbase .connect .rest .RestSourceConnectorConfig ;
44+ import static org .radarbase .connect .rest .converter .PayloadToSourceRecordConverter .MIN_INSTANT ;
45+ import static org .radarbase .connect .rest .converter .PayloadToSourceRecordConverter .TIMESTAMP_OFFSET_KEY ;
46+ import static org .radarbase .connect .rest .converter .PayloadToSourceRecordConverter .nearFuture ;
5047import org .radarbase .connect .rest .fitbit .FitbitRestSourceConnectorConfig ;
5148import org .radarbase .connect .rest .fitbit .request .FitbitRequestGenerator ;
5249import org .radarbase .connect .rest .fitbit .request .FitbitRestRequest ;
5552import org .radarbase .connect .rest .fitbit .user .UserRepository ;
5653import org .radarbase .connect .rest .fitbit .util .DateRange ;
5754import org .radarbase .connect .rest .request .PollingRequestRoute ;
55+ import static org .radarbase .connect .rest .request .PollingRequestRoute .max ;
5856import org .radarbase .connect .rest .request .RestRequest ;
5957import org .slf4j .Logger ;
6058import org .slf4j .LoggerFactory ;
6159
60+ import okhttp3 .Request ;
61+ import okhttp3 .Response ;
62+
6263/**
6364 * Route for regular polling.
6465 *
@@ -118,6 +119,7 @@ public abstract class FitbitPollingRoute implements PollingRequestRoute {
118119 private Duration tooManyRequestsCooldown ;
119120 private final Map <String , Integer > forbidden403Counter ;
120121 private int maxForbiddenResponses ;
122+ private Duration forbidden403Cooldown ;
121123
122124 public FitbitPollingRoute (
123125 FitbitRequestGenerator generator ,
@@ -144,6 +146,7 @@ public void initialize(RestSourceConnectorConfig config) {
144146 .minus (getPollIntervalPerUser ());
145147 this .maxForbiddenResponses = fitbitConfig .getMaxForbidden ();
146148 this .converter ().initialize (fitbitConfig );
149+ this .forbidden403Cooldown = Duration .ofSeconds (fitbitConfig .getForbiddenBackoff ());
147150 }
148151
149152 @ Override
@@ -190,7 +193,7 @@ public void requestFailed(RestRequest request, Response response) {
190193 String userId = user .getId ();
191194 int count = forbidden403Counter .compute (userId , (k , v ) -> v == null ? 1 : v + 1 );
192195 if (count >= maxForbiddenResponses ) {
193- Instant backOff = lastPoll .plus (ONE_DAY );
196+ Instant backOff = lastPoll .plus (this . forbidden403Cooldown );
194197 lastPollPerUser .put (userId , backOff );
195198 forbidden403Counter .remove (userId );
196199 logger .warn ("User {} reached max 403 responses for route {}. Backing off until {}" ,
0 commit comments