bug6140: added log output to Igtimi freestyle command dialog

This commit is contained in:
Axel Uhl
2025-06-23 18:14:06 +02:00
parent f059b48864
commit 8e63af9689
9 changed files with 116 additions and 11 deletions
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.igtimiadapter.server.replication.ReplicableRiotSer
import com.sap.sailing.domain.igtimiadapter.server.replication.RiotReplicationOperation;
import com.sap.sailing.domain.igtimiadapter.server.riot.impl.RiotServerImpl;
import com.sap.sailing.domain.igtimiadapter.shared.IgtimiWindReceiver;
import com.sap.sse.common.Duration;
import com.sap.sse.common.MultiTimeRange;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
@@ -180,4 +181,6 @@ public interface RiotServer extends Replicable<ReplicableRiotServer, RiotReplica
* device identified by {@code deviceSerialNumber}.
*/
boolean sendFreestyleCommand(String deviceSerialNumber, String command) throws IOException;
Iterable<String> getDeviceLogs(String serialNumber, Duration duration) throws ParseException, IOException;
}
@@ -14,9 +14,11 @@ import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@@ -573,6 +575,31 @@ public class RiotServerImpl extends AbstractReplicableWithObjectInputStream<Repl
T getResult(IgtimiConnection connection, String deviceSerialNumber, Type[] types) throws IOException, ParseException;
}
@Override
public Iterable<String> getDeviceLogs(String serialNumber, Duration duration) throws ParseException, IOException {
final TimePoint endTime = TimePoint.now();
final TimePoint startTime = endTime.minus(duration);
final Iterable<Msg> messages;
if (getMasterDescriptor() == null) {
messages = domainObjectFactory.getMessages(serialNumber, MultiTimeRange.of(TimeRange.create(startTime, endTime)),
Collections.singleton(DataCase.LOG), /* clientSessionOrNull */ null);
} else {
messages = getFromPrimary(serialNumber, new Type[] { Type.valueOf(DataCase.LOG.getNumber()) },
(c, dsn, ts)->c.getMessages(startTime, endTime, Collections.singleton(dsn), ts));
}
final List<String> logMessages = new ArrayList<>();
for (final Msg message : messages) {
for (final DataMsg data : message.getData().getDataList()) {
for (final DataPoint dataPoint : data.getDataList()) {
if (dataPoint.hasLog()) {
logMessages.add(dataPoint.getLog().getMessage());
}
}
}
}
return logMessages;
}
@Override
public void addWebSocketClient(RiotWebsocketHandler riotWebsocketHandler) {
liveWebSocketConnections.add(riotWebsocketHandler);