Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/org/sensorhub/oshconnect/OSHSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import org.sensorhub.oshconnect.util.DataStreamsQueryBuilder;
import org.sensorhub.oshconnect.util.Utilities;

import java.time.Duration;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.ExecutionException;

Expand Down Expand Up @@ -99,6 +101,14 @@ public List<OSHDataStream> discoverDataStreams(String query) throws ExecutionExc
return result;
}

public boolean isLive(Duration window) throws ExecutionException, InterruptedException {
var cutoff = Instant.now().minus(window);
return getConnectedSystemsApiClientExtras()
.getLastObservationTimes(getId(), "").get()
.values().stream()
.anyMatch(t -> t != null && t.isAfter(cutoff));
}

/**
* Add or update a data stream in the list of data streams and notify listeners.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,8 @@ public void serialize(String commandID, CommandData commandData, boolean showLin
writer.name("id").value(commandID);
}

// TODO: Should be controlstream@id
if (commandData.getControlStreamId() != null) {
writer.name("control@id").value(commandData.getControlStreamId());
writer.name("controlstream@id").value(commandData.getControlStreamId());
}

if (commandData.getSamplingFeatureId() != null) {
Expand All @@ -149,8 +148,7 @@ public void serialize(String commandID, CommandData commandData, boolean showLin
writer.name("sender").value(commandData.getSender());

// create or reuse existing params writer and write param data
// TODO: Should be parameters
writer.name("params");
writer.name("parameters");
var paramWriter = getSweCommonWriter(contextData.csInfo, writer, ctx.getPropertyFilter());

// write if JSON is supported, otherwise print warning message
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,17 @@

import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.function.Function;
import java.time.Instant;
import java.time.format.DateTimeParseException;
import java.util.LinkedHashMap;
import java.util.Map;

public class ConSysApiClientExtras {
static final String JSON_ARRAY_ITEMS = "items";
Expand Down Expand Up @@ -136,6 +141,45 @@ public CompletableFuture<List<String>> getDataStreamIds(String systemID, String
});
}

public CompletableFuture<Map<String, Instant>> getLastObservationTimes(String systemID, String queryString) {
if (queryString == null)
queryString = "";

return sendGetRequest(endpoint.resolve(SYSTEMS_COLLECTION + "/" + systemID + "/" + DATASTREAMS_COLLECTION + queryString), ResourceFormat.JSON, body -> {
try {
var ctx = new RequestContext(body);
JsonObject bodyJson = JsonParser.parseReader(new InputStreamReader(ctx.getInputStream())).getAsJsonObject();
JsonArray features = bodyJson.getAsJsonArray(JSON_ARRAY_ITEMS);

Map<String, Instant> times = new LinkedHashMap<>();
for (var feature : features) {
var obj = feature.getAsJsonObject();
if (!obj.has("id"))
throw new IOException("No id found in feature");
times.put(obj.get("id").getAsString(), parseExtentEnd(obj.getAsJsonArray("phenomenonTime")));
}
return times;
} catch (IOException e) {
throw new CompletionException(e);
}
});
}

private static Instant parseExtentEnd(JsonArray extent) {
if (extent == null || extent.size() < 2)
return null;
var end = extent.get(1).getAsString();
if ("0".equals(end)) // no observations yet
return null;
if ("now".equals(end)) // defensive: your node uses this on validTime, not phenomenonTime
return Instant.now();
try {
return Instant.parse(end);
} catch (DateTimeParseException e) {
return null;
}
}

/**
* Update a data stream.
*
Expand Down Expand Up @@ -290,7 +334,7 @@ public CompletableFuture<List<ObservationData>> getObservations(String dataStrea
}

return observations;
} catch (IOException e) {
} catch (Exception e) {
throw new CompletionException(e);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ public void checkServerTrusted(X509Certificate[] chain, String authType) {}
sslContextFactory.getSslContext().getClientSessionContext().setSessionCacheSize(0);

client = new WebSocketClient(sslContextFactory);
client.getPolicy().setMaxBinaryMessageSize(4 * 1024 * 1024); // Jetty 9.x
// client.setMaxBinaryMessageSize(4 * 1024 * 1024); // Jetty 10/11+

client.start();
client.connect(this, new URI(urlString), clientUpgradeRequest);
Expand Down
2 changes: 1 addition & 1 deletion submodules/osh-core
Submodule osh-core updated 83 files
+21 −0 .github/workflows/gradle_publish.yml
+39 −0 README.md
+73 −31 common.gradle
+10 −0 lib-ogc/sensorml-core/src/main/java/org/vast/sensorML/SMLBuilders.java
+69 −61 lib-ogc/swe-common-core/src/main/java/org/vast/data/DataBlockList.java
+90 −98 lib-ogc/swe-common-core/src/main/java/org/vast/data/DataBlockMixed.java
+67 −51 lib-ogc/swe-common-core/src/main/java/org/vast/data/DataBlockParallel.java
+1 −1 lib-ogc/swe-common-core/src/main/java/org/vast/swe/SWEJsonBindings.java
+2 −1 lib-ogc/swe-common-core/src/main/java/org/vast/swe/fast/JsonDataParserGson.java
+37 −0 lib-ogc/swe-common-core/src/test/java/org/vast/swe/fast/TestJsonDataParser.java
+6 −2 sensorhub-core-osgi/src/main/java/org/sensorhub/impl/osgi/SensorHubOsgi.java
+18 −2 sensorhub-core/src/main/java/org/sensorhub/api/command/CommandStatus.java
+20 −0 sensorhub-core/src/main/java/org/sensorhub/api/command/CommandStreamInfo.java
+22 −2 sensorhub-core/src/main/java/org/sensorhub/api/command/ICommandStreamInfo.java
+13 −0 sensorhub-core/src/main/java/org/sensorhub/api/command/IStreamingControlInterface.java
+13 −0 sensorhub-core/src/main/java/org/sensorhub/api/data/IStreamingDataInterface.java
+29 −2 sensorhub-core/src/main/java/org/sensorhub/api/datastore/TemporalFilter.java
+5 −7 sensorhub-core/src/main/java/org/sensorhub/impl/comm/TCPCommProvider.java
+7 −2 sensorhub-core/src/main/java/org/sensorhub/impl/database/registry/FederatedCommandStatusStore.java
+7 −7 sensorhub-core/src/main/java/org/sensorhub/impl/database/registry/FederatedCommandStore.java
+30 −6 sensorhub-core/src/main/java/org/sensorhub/impl/database/registry/FederatedObsStore.java
+9 −2 sensorhub-core/src/main/java/org/sensorhub/impl/database/system/SystemDriverDatabase.java
+11 −0 sensorhub-core/src/main/java/org/sensorhub/impl/datastore/command/CommandStreamInfoWrapper.java
+6 −0 sensorhub-core/src/main/java/org/sensorhub/impl/datastore/mem/InMemoryCommandStatusStore.java
+7 −1 sensorhub-core/src/main/java/org/sensorhub/impl/datastore/mem/InMemoryCommandStore.java
+2 −0 sensorhub-core/src/main/java/org/sensorhub/impl/datastore/mem/InMemoryCommandStreamStore.java
+15 −3 sensorhub-core/src/main/java/org/sensorhub/impl/datastore/mem/InMemoryObsStore.java
+21 −16 sensorhub-core/src/main/java/org/sensorhub/impl/module/AbstractModule.java
+1 −1 sensorhub-core/src/main/java/org/sensorhub/impl/sensor/AbstractSensorModule.java
+2 −1 sensorhub-core/src/main/java/org/sensorhub/impl/service/HttpServer.java
+2 −0 sensorhub-core/src/main/java/org/sensorhub/impl/system/DefaultSystemRegistry.java
+6 −3 sensorhub-core/src/main/java/org/sensorhub/impl/system/SystemDriverTransactionHandler.java
+108 −72 sensorhub-core/src/main/java/org/sensorhub/impl/system/SystemTransactionHandler.java
+18 −0 sensorhub-core/src/main/java/org/sensorhub/utils/ObjectUtils.java
+1 −1 sensorhub-core/src/testFixtures/java/org/sensorhub/impl/datastore/AbstractTestCommandStore.java
+58 −3 sensorhub-core/src/testFixtures/java/org/sensorhub/impl/datastore/AbstractTestCommandStreamStore.java
+208 −151 sensorhub-core/src/testFixtures/java/org/sensorhub/impl/datastore/AbstractTestDataStreamStore.java
+11 −1 sensorhub-core/src/testFixtures/java/org/sensorhub/impl/datastore/AbstractTestFeatureStore.java
+93 −10 sensorhub-core/src/testFixtures/java/org/sensorhub/impl/datastore/AbstractTestObsStore.java
+37 −0 sensorhub-datastore-h2/src/main/java/org/h2/mvstore/DecisionMakerWithError.java
+177 −0 sensorhub-datastore-h2/src/main/java/org/h2/mvstore/DescendingCursor.java
+30 −26 sensorhub-datastore-h2/src/main/java/org/h2/mvstore/RangeCursor.java
+68 −83 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVBaseFeatureStoreImpl.java
+30 −53 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVBaseResourceStoreImpl.java
+47 −82 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVCommandStatusStoreImpl.java
+81 −136 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVCommandStoreImpl.java
+64 −83 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVCommandStreamStoreImpl.java
+64 −83 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVDataStreamStoreImpl.java
+5 −1 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVFeatureDatabase.java
+110 −155 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVObsStoreImpl.java
+1 −1 sensorhub-datastore-h2/src/main/java/org/sensorhub/impl/datastore/h2/MVObsSystemDatabase.java
+20 −9 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/BaseHandler.java
+1 −1 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/ConSysApiService.java
+5 −0 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/ConSysApiServiceConfig.java
+11 −5 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/RestApiServlet.java
+63 −32 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/client/ConSysApiClient.java
+10 −0 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/obs/DataStreamHandler.java
+3 −1 ...orhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/obs/DataStreamSchemaBindingOmJson.java
+14 −4 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/obs/ObsHandler.java
+1 −1 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/resource/BaseResourceHandler.java
+30 −12 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandBindingJson.java
+13 −3 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandHandler.java
+0 −1 ...rhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandResultBindingSweCommon.java
+14 −4 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandStatusHandler.java
+10 −0 sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandStreamHandler.java
+30 −2 ...hub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandStreamSchemaBindingJson.java
+1 −1 sensorhub-service-consys/src/test/java/org/sensorhub/impl/service/consys/TestControlStreams.java
+9 −1 sensorhub-service-consys/src/test/java/org/sensorhub/impl/service/consys/client/TestClientDataStreams.java
+107 −0 sensorhub-service-consys/src/test/java/org/sensorhub/impl/service/consys/client/TestClientObs.java
+0 −2 sensorhub-service-consys/src/test/java/org/sensorhub/impl/service/consys/demodata/Api.java
+34 −9 sensorhub-service-consys/src/test/java/org/sensorhub/impl/service/consys/demodata/Saildrone.java
+1 −3 sensorhub-webui-core/src/main/java/org/sensorhub/ui/AdminUIModule.java
+762 −162 sensorhub-webui-core/src/main/java/org/sensorhub/ui/ProcessAdminPanel.java
+94 −47 sensorhub-webui-core/src/main/java/org/sensorhub/ui/ProcessFlowDiagram.java
+24 −26 sensorhub-webui-core/src/main/java/org/sensorhub/ui/ProcessSelectionPopup.java
+16 −7 sensorhub-webui-core/src/main/java/org/sensorhub/ui/SWEControlForm.java
+24 −1 sensorhub-webui-core/src/main/java/org/sensorhub/ui/SWEEditForm.java
+123 −0 sensorhub-webui-core/src/main/java/org/sensorhub/ui/SystemIOList.java
+50 −0 sensorhub-webui-core/src/main/java/org/sensorhub/ui/SystemIOSelectionPopup.java
+1 −1 sensorhub-webui-core/src/main/java/org/sensorhub/ui/SystemSelectionPopup.java
+102 −25 sensorhub-webui-core/src/main/java/org/sensorhub/ui/table/LazyLoadingObsContainer.java
+13 −1 sensorhub-webui-core/src/main/java/org/sensorhub/ui/table/PagedTable.java
+29 −31 sensorhub-webui-core/src/main/java/org/sensorhub/ui/table/PagedTableControls.java