|
|
@@ -1,24 +1,20 @@
|
|
|
package io.connector.module.senslog1.gateway;
|
|
|
|
|
|
+import cz.senslog.common.util.Tuple;
|
|
|
import io.connector.core.AbstractGateway;
|
|
|
import io.connector.core.DataCollection;
|
|
|
+import io.connector.core.Message;
|
|
|
import io.connector.core.MessageHeader;
|
|
|
-import io.connector.core.module.ModuleType;
|
|
|
-import io.connector.model.senslog1.Observation;
|
|
|
-import io.connector.model.senslog1.SensorObservation;
|
|
|
-import io.connector.model.senslog1.UnitData;
|
|
|
-import io.connector.model.senslog1.UnitInfo;
|
|
|
+import io.connector.model.senslog1.*;
|
|
|
import io.connector.module.senslog1.SensLog1Client;
|
|
|
+import io.connector.module.senslog1.SensLog1SchedulerConfig;
|
|
|
import io.vertx.core.MultiMap;
|
|
|
import io.vertx.core.buffer.Buffer;
|
|
|
-import io.vertx.core.eventbus.EventBus;
|
|
|
import io.vertx.core.json.JsonObject;
|
|
|
-import io.vertx.ext.web.Router;
|
|
|
|
|
|
import java.time.OffsetDateTime;
|
|
|
import java.util.*;
|
|
|
|
|
|
-import static io.connector.core.module.ModuleType.SENSLOG1;
|
|
|
import static java.time.OffsetDateTime.MAX;
|
|
|
import static java.time.OffsetDateTime.MIN;
|
|
|
import static java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME;
|
|
|
@@ -26,10 +22,12 @@ import static java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME;
|
|
|
public class SensLog1Gateway extends AbstractGateway {
|
|
|
|
|
|
private final SensLog1Client client;
|
|
|
+ private final SensLog1SchedulerConfig schedulerConfig;
|
|
|
|
|
|
- public SensLog1Gateway(EventBus eventBus, Router router, ModuleType moduleType, SensLog1Client client) {
|
|
|
- super(eventBus, router, moduleType, SENSLOG1);
|
|
|
+ public SensLog1Gateway(String id, SensLog1SchedulerConfig schedulerConfig, SensLog1Client client) {
|
|
|
+ super(id, true);
|
|
|
this.client = client;
|
|
|
+ this.schedulerConfig = schedulerConfig;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -37,13 +35,13 @@ public class SensLog1Gateway extends AbstractGateway {
|
|
|
|
|
|
// TODO rename to a general name
|
|
|
schedulerMapping()
|
|
|
- .addMapping("schedule-observations", "observations");
|
|
|
+ .addMapping("schedule-observations", "observations-with-info");
|
|
|
|
|
|
event().consume("schedule-observations", message -> {
|
|
|
List<UnitData> unitData = client.lastObservations();
|
|
|
OffsetDateTime from = MAX, to = MIN;
|
|
|
for (UnitData unit : unitData) {
|
|
|
- for (SensorObservation sensor : unit.getSensors()) {
|
|
|
+ for (SensorData sensor : unit.getSensors()) {
|
|
|
for (Observation observation : sensor.getObservations()) {
|
|
|
if (observation.getTimestamp().isBefore(from)) {
|
|
|
from = observation.getTimestamp();
|
|
|
@@ -56,10 +54,12 @@ public class SensLog1Gateway extends AbstractGateway {
|
|
|
}
|
|
|
|
|
|
// TODO add scheduler config to the body
|
|
|
+ String allowedUnits = String.join(",", schedulerConfig.getAllowedStations());
|
|
|
|
|
|
message.reply(message.body()).options()
|
|
|
- .addHeader("fromDate", from.format(ISO_OFFSET_DATE_TIME))
|
|
|
- .addHeader("toDate", from.plusMinutes(30).format(ISO_OFFSET_DATE_TIME));
|
|
|
+ .addHeader("fromDate", "2020-02-10T06:30:00+01:00") // from.format(ISO_OFFSET_DATE_TIME))
|
|
|
+ .addHeader("toDate", "2020-02-10T07:30:00+01:00") // to.format(ISO_OFFSET_DATE_TIME))
|
|
|
+ .addHeader("unitId", allowedUnits);
|
|
|
});
|
|
|
|
|
|
event().consume("units", message -> {
|
|
|
@@ -96,22 +96,12 @@ public class SensLog1Gateway extends AbstractGateway {
|
|
|
message.reply(new DataCollection<>(unsentObservations));
|
|
|
});
|
|
|
|
|
|
- event().consume("unit-data", message -> {
|
|
|
+ event().consume("observations-with-positions", message -> {
|
|
|
MultiMap params = message.headers();
|
|
|
|
|
|
- OffsetDateTime fromDate;
|
|
|
- if (params.contains("fromDate")) {
|
|
|
- fromDate = OffsetDateTime.parse(params.get("fromDate"), ISO_OFFSET_DATE_TIME);
|
|
|
- } else {
|
|
|
- message.fail(400, "Attribute 'fromDate' is required."); return;
|
|
|
- }
|
|
|
-
|
|
|
- OffsetDateTime toDate;
|
|
|
- if (params.contains("toDate")) {
|
|
|
- toDate = OffsetDateTime.parse(params.get("toDate"), ISO_OFFSET_DATE_TIME);
|
|
|
- } else {
|
|
|
- message.fail(400, "Attribute 'toDate' is required."); return;
|
|
|
- }
|
|
|
+ Tuple<OffsetDateTime, OffsetDateTime> timeRange = getTimeRangeFromParam(message);
|
|
|
+ if (timeRange == null) { return; }
|
|
|
+ OffsetDateTime fromDate = timeRange.getItem1(), toDate = timeRange.getItem2();
|
|
|
|
|
|
List<UnitData> positions, observations;
|
|
|
if (params.contains("unitId")) {
|
|
|
@@ -130,19 +120,9 @@ public class SensLog1Gateway extends AbstractGateway {
|
|
|
event().consume("positions", message -> {
|
|
|
MultiMap params = message.headers();
|
|
|
|
|
|
- OffsetDateTime fromDate;
|
|
|
- if (params.contains("fromDate")) {
|
|
|
- fromDate = OffsetDateTime.parse(params.get("fromDate"), ISO_OFFSET_DATE_TIME);
|
|
|
- } else {
|
|
|
- message.fail(400, "Attribute 'fromDate' is required."); return;
|
|
|
- }
|
|
|
-
|
|
|
- OffsetDateTime toDate;
|
|
|
- if (params.contains("toDate")) {
|
|
|
- toDate = OffsetDateTime.parse(params.get("toDate"), ISO_OFFSET_DATE_TIME);
|
|
|
- } else {
|
|
|
- message.fail(400, "Attribute 'toDate' is required."); return;
|
|
|
- }
|
|
|
+ Tuple<OffsetDateTime, OffsetDateTime> timeRange = getTimeRangeFromParam(message);
|
|
|
+ if (timeRange == null) { return; }
|
|
|
+ OffsetDateTime fromDate = timeRange.getItem1(), toDate = timeRange.getItem2();
|
|
|
|
|
|
List<UnitData> positions;
|
|
|
if (params.contains("unitId")) {
|
|
|
@@ -155,24 +135,36 @@ public class SensLog1Gateway extends AbstractGateway {
|
|
|
message.reply(new DataCollection<>(positions));
|
|
|
});
|
|
|
|
|
|
- event().consume("observations", message -> {
|
|
|
- // TODO get filter/config from message.body()
|
|
|
+ event().consume("observations-with-info", message -> {
|
|
|
|
|
|
MultiMap params = message.headers();
|
|
|
+ Tuple<OffsetDateTime, OffsetDateTime> timeRange = getTimeRangeFromParam(message);
|
|
|
+ if (timeRange == null) { return; }
|
|
|
+ OffsetDateTime fromDate = timeRange.getItem1(), toDate = timeRange.getItem2();
|
|
|
|
|
|
- OffsetDateTime fromDate;
|
|
|
- if (params.contains("fromDate")) {
|
|
|
- fromDate = OffsetDateTime.parse(params.get("fromDate"), ISO_OFFSET_DATE_TIME);
|
|
|
+ List<Unit> unitData;
|
|
|
+ if (params.contains("unitId")) {
|
|
|
+ long unitId = Long.parseLong(params.get("unitId"));
|
|
|
+ if (params.contains("sensorId")) {
|
|
|
+ long sensorId = Long.parseLong(params.get("sensorId"));
|
|
|
+ unitData = client.observationsWithInfo(unitId, sensorId, fromDate, toDate);
|
|
|
+ } else {
|
|
|
+ unitData = client.observationsWithInfo(unitId, fromDate, toDate);
|
|
|
+ }
|
|
|
} else {
|
|
|
- message.fail(400, "Attribute 'fromDate' is required."); return;
|
|
|
+ unitData = client.observationsWithInfo(fromDate, toDate);
|
|
|
}
|
|
|
|
|
|
- OffsetDateTime toDate;
|
|
|
- if (params.contains("toDate")) {
|
|
|
- toDate = OffsetDateTime.parse(params.get("toDate"), ISO_OFFSET_DATE_TIME);
|
|
|
- } else {
|
|
|
- message.fail(400, "Attribute 'toDate' is required."); return;
|
|
|
- }
|
|
|
+ message.reply(new DataCollection<>(unitData));
|
|
|
+ });
|
|
|
+
|
|
|
+ event().consume("observations", message -> {
|
|
|
+ // TODO get filter/config from message.body()
|
|
|
+
|
|
|
+ MultiMap params = message.headers();
|
|
|
+ Tuple<OffsetDateTime, OffsetDateTime> timeRange = getTimeRangeFromParam(message);
|
|
|
+ if (timeRange == null) { return; }
|
|
|
+ OffsetDateTime fromDate = timeRange.getItem1(), toDate = timeRange.getItem2();
|
|
|
|
|
|
List<UnitData> observations;
|
|
|
if (params.contains("unitId")) {
|
|
|
@@ -191,6 +183,26 @@ public class SensLog1Gateway extends AbstractGateway {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private static <T> Tuple<OffsetDateTime, OffsetDateTime> getTimeRangeFromParam(Message<T> message) {
|
|
|
+ MultiMap params = message.headers();
|
|
|
+
|
|
|
+ OffsetDateTime fromDate;
|
|
|
+ if (params.contains("fromDate")) {
|
|
|
+ fromDate = OffsetDateTime.parse(params.get("fromDate"), ISO_OFFSET_DATE_TIME);
|
|
|
+ } else {
|
|
|
+ message.fail(400, "Attribute 'fromDate' is required."); return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ OffsetDateTime toDate;
|
|
|
+ if (params.contains("toDate")) {
|
|
|
+ toDate = OffsetDateTime.parse(params.get("toDate"), ISO_OFFSET_DATE_TIME);
|
|
|
+ } else {
|
|
|
+ message.fail(400, "Attribute 'toDate' is required."); return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return Tuple.of(fromDate, toDate);
|
|
|
+ }
|
|
|
+
|
|
|
@SafeVarargs
|
|
|
private static List<UnitData> mergeUnitDate(List<UnitData> ...unitsToMerge) {
|
|
|
int len = unitsToMerge.length;
|