Skip to content

Commit 9002239

Browse files
committed
conservative: download intraday heart rate data by day
1 parent 465cad7 commit 9002239

1 file changed

Lines changed: 18 additions & 7 deletions

File tree

kafka-connect-fitbit-source/src/main/java/org/radarbase/connect/rest/fitbit/route/FitbitIntradayHeartRateRoute.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,20 @@
1717

1818
package org.radarbase.connect.rest.fitbit.route;
1919

20-
import static java.time.format.DateTimeFormatter.ISO_LOCAL_TIME;
21-
import static java.time.temporal.ChronoUnit.SECONDS;
20+
import static java.time.ZoneOffset.UTC;
2221

2322
import io.confluent.connect.avro.AvroData;
23+
24+
import java.time.Instant;
25+
import java.time.temporal.ChronoUnit;
26+
import java.util.List;
2427
import java.util.stream.Stream;
2528
import org.radarbase.connect.rest.fitbit.converter.FitbitIntradayHeartRateAvroConverter;
2629
import org.radarbase.connect.rest.fitbit.request.FitbitRequestGenerator;
2730
import org.radarbase.connect.rest.fitbit.request.FitbitRestRequest;
2831
import org.radarbase.connect.rest.fitbit.user.User;
2932
import org.radarbase.connect.rest.fitbit.user.UserRepository;
33+
import org.radarbase.connect.rest.fitbit.util.DateRange;
3034

3135
public class FitbitIntradayHeartRateRoute extends FitbitPollingRoute {
3236
private final FitbitIntradayHeartRateAvroConverter converter;
@@ -39,15 +43,22 @@ public FitbitIntradayHeartRateRoute(FitbitRequestGenerator generator,
3943

4044
@Override
4145
protected String getUrlFormat(String baseUrl) {
42-
return baseUrl + "/1/user/%s/activities/heart/date/%s/1d/1sec/time/%s/%s.json?timezone=UTC";
46+
// URL format args: user-id, date
47+
return baseUrl + "/1/user/%s/activities/heart/date/%s/1d/1sec.json?timezone=UTC";
4348
}
4449

4550
protected Stream<FitbitRestRequest> createRequests(User user) {
46-
return startDateGenerator(getOffset(user).plus(ONE_SECOND).truncatedTo(SECONDS))
51+
// Important: heart rate is queried at the resolution of a single
52+
// day, so the offset for the next request will be set to the next day.
53+
Instant startDate = this.getOffset(user).plus(ONE_DAY)
54+
.atZone(UTC)
55+
.truncatedTo(ChronoUnit.DAYS).toInstant();
56+
List<DateRange> dateRangeStream = startDateGenerator(startDate).toList();
57+
return dateRangeStream.stream()
4758
.map(dateRange -> newRequest(user, dateRange,
48-
user.getExternalUserId(), DATE_FORMAT.format(dateRange.start()),
49-
ISO_LOCAL_TIME.format(dateRange.start()),
50-
ISO_LOCAL_TIME.format(dateRange.end().truncatedTo(SECONDS))));
59+
user.getExternalUserId(),
60+
DATE_FORMAT.format(dateRange.start())
61+
));
5162
}
5263

5364
@Override

0 commit comments

Comments
 (0)