Skip to content

Commit 6ed9da6

Browse files
authored
Merge pull request #65 from RADAR-base/filterAfterEndDate
Filter after end date
2 parents 7b41259 + 9a7312a commit 6ed9da6

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

kafka-connect-fitbit-source/src/main/java/org/radarbase/connect/rest/fitbit/converter/FitbitAvroConverter.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,15 @@
2727
import java.util.Collection;
2828
import java.util.Collections;
2929
import java.util.HashMap;
30-
import java.util.Iterator;
3130
import java.util.Map;
32-
import java.util.Objects;
3331
import java.util.Optional;
34-
import java.util.OptionalDouble;
35-
import java.util.OptionalLong;
3632
import java.util.concurrent.TimeUnit;
3733
import java.util.stream.Collectors;
3834
import java.util.stream.Stream;
3935
import java.util.stream.StreamSupport;
4036
import okhttp3.Response;
4137
import okhttp3.ResponseBody;
38+
import org.apache.avro.Schema.Field;
4239
import org.apache.avro.generic.IndexedRecord;
4340
import org.apache.kafka.connect.data.SchemaAndValue;
4441
import org.apache.kafka.connect.source.SourceRecord;
@@ -86,7 +83,7 @@ public Collection<SourceRecord> convert(
8683
double timeReceived = System.currentTimeMillis() / 1000d;
8784

8885
return processRecords((FitbitRestRequest)restRequest, activities, timeReceived)
89-
.filter(Objects::nonNull)
86+
.filter(t -> validateRecord((FitbitRestRequest)restRequest, t))
9087
.map(t -> {
9188
SchemaAndValue avro = avroData.toConnectData(t.value.getSchema(), t.value);
9289
Map<String, ?> offset = Collections.singletonMap(
@@ -98,6 +95,22 @@ public Collection<SourceRecord> convert(
9895
.collect(Collectors.toList());
9996
}
10097

98+
private boolean validateRecord(FitbitRestRequest request, TopicData record) {
99+
if (record == null) {
100+
return false;
101+
}
102+
Instant endDate = request.getUser().getEndDate();
103+
if (endDate == null) {
104+
return true;
105+
}
106+
Field timeField = record.value.getSchema().getField("time");
107+
if (timeField != null) {
108+
long time = (long) (((Double)record.value.get(timeField.pos()) * 1000.0));
109+
return Instant.ofEpochMilli(time).isBefore(endDate);
110+
}
111+
return true;
112+
}
113+
101114
/** Process the JSON records generated by given request. */
102115
protected abstract Stream<TopicData> processRecords(
103116
FitbitRestRequest request,

0 commit comments

Comments
 (0)