Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -933,6 +933,7 @@ public enum ServerLogMessages implements LogMessage {
STATE_MANAGER_PUBLISH_ENABLED(LEVEL.INFO, SERVER_CATEGORY.STATE, "Twin JSON publisher enabled with topic {}"),
STATE_MANAGER_PUBLISH_FAILED(LEVEL.ERROR, SERVER_CATEGORY.STATE, "Failed to start Twin JSON publisher"),
STATE_MANAGER_SCHEDULER_ERROR(LEVEL.ERROR, SERVER_CATEGORY.STATE, "Scheduler task failed"),
STATE_MANAGER_AUDIT_INIT_FAILED(LEVEL.ERROR, SERVER_CATEGORY.STATE, "Failed to initialize audit context - auditing will be disabled"),
// </editor-fold>

//-------------------------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,16 @@
import io.mapsmessaging.rest.translation.GsonDateTimeDeserialiser;
import io.mapsmessaging.rest.translation.GsonDateTimeSerialiser;
import io.mapsmessaging.rest.translation.InstantTypeAdapter;
import io.mapsmessaging.state.config.capability.*;
import io.mapsmessaging.state.stanag.messages.core.MessageType;
import io.mapsmessaging.state.stanag.messages.task.admin.TaskAdminActionEnum;
import io.mapsmessaging.state.stanag.messages.task.result.ResultReason;
import io.mapsmessaging.state.stanag.messages.TaskState;

import io.mapsmessaging.state.config.capability.PlanTaskType;
import io.mapsmessaging.state.config.capability.PrefixedEnumTypeAdapter;
import io.mapsmessaging.state.config.capability.TaskConditionMode;
import io.mapsmessaging.state.config.capability.TaskSpecialization;
import io.mapsmessaging.state.config.capability.TaskTemplateMode;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;

public class GsonStanagHelper {
public class StateJsonHelper {

public static Gson createGson() {
return new GsonBuilder()
Expand All @@ -60,30 +59,10 @@ public static Gson createGson() {
TaskTemplateMode.class,
new PrefixedEnumTypeAdapter<>(TaskTemplateMode.class, "TaskTemplateModeEnum_")
)
.registerTypeAdapter(
MessageType.class,
new PrefixedEnumTypeAdapter<>(MessageType.class, "MessageTypeEnum_")
)
.registerTypeAdapter(
TaskState.class,
new PrefixedEnumTypeAdapter<>(TaskState.class, "TaskStateEnum_")
)
.registerTypeAdapter(
ResultReason.class,
new PrefixedEnumTypeAdapter<>(ResultReason.class, "ResultReasonEnum_")
)
.registerTypeAdapter(
TaskAdminActionEnum.class,
new PrefixedEnumTypeAdapter<>(TaskAdminActionEnum.class, "TaskAdminActionEnum_")
)
.registerTypeAdapter(
ResultReason.class,
new PrefixedEnumTypeAdapter<>(ResultReason.class, "ResultReasonEnum_")
)
.create();
}

private GsonStanagHelper() {
private StateJsonHelper() {
// helper only
}
}
30 changes: 18 additions & 12 deletions src/main/java/io/mapsmessaging/state/StateManagerAgent.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,11 @@
import io.mapsmessaging.dto.rest.system.SubSystemStatusDTO;
import io.mapsmessaging.logging.Logger;
import io.mapsmessaging.logging.LoggerFactory;
import io.mapsmessaging.state.adapter.StateMessageAdapterContext;
import io.mapsmessaging.state.adapter.StateMessageAdapterFactory;
import io.mapsmessaging.state.auditor.StateAuditContext;
import io.mapsmessaging.state.drone.core.TwinLifecycleStatus;
import io.mapsmessaging.state.drone.core.TwinManager;
import io.mapsmessaging.state.stanag.StanagSession;
import io.mapsmessaging.state.stanag.audit.Auditor;
import io.mapsmessaging.utilities.Agent;
import io.mapsmessaging.utilities.Lifecycle;
import io.mapsmessaging.utilities.configuration.ConfigurationManager;
Expand All @@ -42,6 +43,7 @@
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.ServiceLoader;

import static io.mapsmessaging.logging.ServerLogMessages.*;

Expand All @@ -59,32 +61,28 @@ public class StateManagerAgent implements Agent {
private TwinManager twinManager;

@Getter
private Auditor auditor;
private StateAuditContext auditContext;
private AuditorFactory.AuditorInstance auditorInstance;

public StateManagerAgent() {
TwinManagerConfigDTO config = ConfigurationManager.getInstance().getConfiguration(TwinManagerConfig.class);
DroneInfoRegistry registry;
TakProtocolDTO takConfig;
StanagConfig stanagConfig;
if(config != null){
try {
AuditorFactory factory = new AuditorFactory();
auditorInstance = factory.build(Path.of( EnvironmentConfig.getInstance().getPathLookups().get("MAPS_DATA")));
auditor = auditorInstance.getAuditor();
auditContext = auditorInstance.getAuditContext();
} catch (IOException e) {
e.printStackTrace();
logger.log(STATE_MANAGER_AUDIT_INIT_FAILED, e);
}
twinManager = new TwinManager(config.isRemoveExpiredTwins(), config.getStaleTimeoutMillis(), config.getHeartbeatTimeoutMillis(), config.getRetentionTimeoutMillis(), auditor);
twinManager = new TwinManager(config.isRemoveExpiredTwins(), config.getStaleTimeoutMillis(), config.getHeartbeatTimeoutMillis(), config.getRetentionTimeoutMillis(), auditContext);
Comment thread
jbuckton marked this conversation as resolved.
registry = new DroneInfoRegistry(config.getDroneInfo());
takConfig = config.getTak();
stanagConfig = config.getStanagConfig();
lifecycleList.add(new SchedulerManager(twinManager));
lifecycleList.add(new TakManager(twinManager, takConfig));
lifecycleList.add(new MavlinkTwinManager(twinManager, registry, config));
if(stanagConfig != null && stanagConfig.isEnable()) {
lifecycleList.add(new StanagSession(twinManager, stanagConfig));
}
loadStateMessageAdapters(config);
lifecycleList.add(new TwinPublisherManager(twinManager, config.getPublish()));
aisManager = new AISN2KManager(twinManager, config.getN2KTwinConfig());
lifecycleList.add(aisManager);
Expand All @@ -104,6 +102,14 @@ public String getDescription() {
return "Manages state of known objects within memory and maintains a digital twin";
}

private void loadStateMessageAdapters(TwinManagerConfigDTO config) {
StateMessageAdapterContext context = new StateMessageAdapterContext(twinManager, config);
ServiceLoader<StateMessageAdapterFactory> adapterFactories = ServiceLoader.load(StateMessageAdapterFactory.class);
for (StateMessageAdapterFactory adapterFactory : adapterFactories) {
adapterFactory.create(context).ifPresent(lifecycleList::add);
}
}

@Override
public synchronized void start() {
try {
Expand Down Expand Up @@ -141,4 +147,4 @@ public SubSystemStatusDTO getStatus() {
status.setStatus(Status.OK);
return status;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,11 @@
* limitations under the License.
*/

package io.mapsmessaging.state.stanag.tasks.monitor;
package io.mapsmessaging.state.adapter;

public enum TaskMonitorState {
ACCEPTED,
IN_PROGRESS,
COMPLETE,
FAILED,
TIMEOUT,
LOST
}
import io.mapsmessaging.utilities.Lifecycle;

public interface StateMessageAdapter extends Lifecycle {

String getName();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,24 @@
* limitations under the License.
*/

package io.mapsmessaging.state.stanag.messages.node.common;
package io.mapsmessaging.state.adapter;

import lombok.Builder;
import io.mapsmessaging.state.config.TwinManagerConfigDTO;
import io.mapsmessaging.state.drone.core.TwinManager;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;

@Getter
@Builder
public class Altitude {
@RequiredArgsConstructor
public class StateMessageAdapterContext {

private final Double value;
@NonNull
@NotNull
private final TwinManager twinManager;

private final String type;
}
@NonNull
@NotNull
private final TwinManagerConfigDTO config;
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@
* limitations under the License.
*/

package io.mapsmessaging.state.stanag;
package io.mapsmessaging.state.adapter;

import io.mapsmessaging.api.message.Message;
import java.util.Optional;

public interface TaskMessageSender {
void sendTaskMessage(String taskTopic, Message message);
public interface StateMessageAdapterFactory {

String getName();

Optional<StateMessageAdapter> create(StateMessageAdapterContext context);
}
13 changes: 6 additions & 7 deletions src/main/java/io/mapsmessaging/state/auditor/AuditorFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import java.security.PrivateKey;
import java.security.interfaces.EdECPublicKey;

import io.mapsmessaging.state.stanag.audit.Auditor;
import lombok.Getter;

public class AuditorFactory {
Expand Down Expand Up @@ -110,13 +109,13 @@ public AuditorInstance build(
AuditLogger auditLogger = new AuditLogger(auditJournal);
AuditPayloadStore auditPayloadStore = new AuditPayloadStore(payloadRootDirectory);

Auditor auditor = new Auditor(
StateAuditContext auditContext = new StateAuditContext(
auditLogger,
auditPayloadStore
);

return new AuditorInstance(
auditor,
auditContext,
auditJournal,
auditRootDirectory,
journalRootDirectory,
Expand Down Expand Up @@ -179,7 +178,7 @@ private record AuditKeys(
@Getter
public static class AuditorInstance implements AutoCloseable {

private final Auditor auditor;
private final StateAuditContext auditContext;
private final AuditJournal auditJournal;
private final Path auditRootDirectory;
private final Path journalRootDirectory;
Expand All @@ -188,15 +187,15 @@ public static class AuditorInstance implements AutoCloseable {
private final Path publicKeyPath;

private AuditorInstance(
Auditor auditor,
StateAuditContext auditContext,
AuditJournal auditJournal,
Path auditRootDirectory,
Path journalRootDirectory,
Path payloadRootDirectory,
Path privateKeyPath,
Path publicKeyPath
) {
this.auditor = auditor;
this.auditContext = auditContext;
this.auditJournal = auditJournal;
this.auditRootDirectory = auditRootDirectory;
this.journalRootDirectory = journalRootDirectory;
Expand All @@ -210,4 +209,4 @@ public void close() throws IOException {
auditJournal.close();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,10 @@
* limitations under the License.
*/

package io.mapsmessaging.state.stanag.messages;
package io.mapsmessaging.state.auditor;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import io.mapsmessaging.audit.AuditLogger;
import io.mapsmessaging.audit.AuditPayloadStore;

@Getter
@Setter
@AllArgsConstructor
public class FlexibleEnumeration {
private String name;
}
public record StateAuditContext(AuditLogger auditLogger, AuditPayloadStore auditPayloadStore) {
}
34 changes: 0 additions & 34 deletions src/main/java/io/mapsmessaging/state/config/StanagConfig.java

This file was deleted.

Loading