Skip to content

Commit

Permalink
improve fallback to legacy config when config cannot be parsed
Browse files Browse the repository at this point in the history
  • Loading branch information
YannickWeber committed Sep 19, 2024
1 parent 28d70f8 commit 76d127e
Show file tree
Hide file tree
Showing 7 changed files with 180 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,18 @@
import com.hivemq.edge.modules.adapters.simulation.config.SimulationToMqttConfig;
import com.hivemq.edge.modules.adapters.simulation.config.SimulationToMqttMapping;
import com.hivemq.edge.modules.adapters.simulation.config.legacy.LegacySimulationAdapterConfig;
import com.hivemq.extension.sdk.api.annotations.NotNull;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class SimulationProtocolAdapterFactory implements ProtocolAdapterFactory<SimulationAdapterConfig> {

private static final @NotNull Logger log = LoggerFactory.getLogger(SimulationProtocolAdapterFactory.class);

@Override
public @NotNull ProtocolAdapterInformation getInformation() {
return SimulationProtocolAdapterInformation.INSTANCE;
Expand All @@ -51,16 +55,35 @@ public class SimulationProtocolAdapterFactory implements ProtocolAdapterFactory<

@Override
public @NotNull SimulationAdapterConfig convertConfigObject(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
if (config.get("simulationToMqtt") != null || config.get("mqttToSimulation") != null) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
try {
return ProtocolAdapterFactory.super.convertConfigObject(objectMapper, config);
} else {
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception currentConfigFailedException) {
try {
log.warn("Could not load '{}' configuration, trying to load legacy configuration. Because: '{}'",
SimulationProtocolAdapterInformation.INSTANCE.getDisplayName(),
currentConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", currentConfigFailedException);
}
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception legacyConfigFailedException) {
log.warn("Could not load legacy '{}' configuration. Because: '{}'",
SimulationProtocolAdapterInformation.INSTANCE.getDisplayName(),
legacyConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", legacyConfigFailedException);
}
//we rethrow the exception from the current config conversation, to have a correct rest response.
throw currentConfigFailedException;
}
}
}

private static @NotNull SimulationAdapterConfig tryConvertLegacyConfig(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
final LegacySimulationAdapterConfig legacySimulationAdapterConfig =
objectMapper.convertValue(config, LegacySimulationAdapterConfig.class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,17 @@
import com.hivemq.edge.adapters.etherip.config.EipToMqttMapping;
import com.hivemq.edge.adapters.etherip.config.legacy.LegacyEipAdapterConfig;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class EipProtocolAdapterFactory implements ProtocolAdapterFactory<EipAdapterConfig> {

private static final @NotNull Logger log = LoggerFactory.getLogger(EipProtocolAdapterFactory.class);

@Override
public @NotNull ProtocolAdapterInformation getInformation() {
return EipProtocolAdapterInformation.INSTANCE;
Expand All @@ -46,11 +50,29 @@ public class EipProtocolAdapterFactory implements ProtocolAdapterFactory<EipAdap

@Override
public @NotNull EipAdapterConfig convertConfigObject(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
if (config.get("eipToMqtt") != null || config.get("mqttToEip") != null) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
try {
return ProtocolAdapterFactory.super.convertConfigObject(objectMapper, config);
} else {
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception currentConfigFailedException) {
try {
log.warn("Could not load '{}' configuration, trying to load legacy configuration. Because: '{}'",
EipProtocolAdapterInformation.INSTANCE.getDisplayName(),
currentConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", currentConfigFailedException);
}
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception legacyConfigFailedException) {
log.warn("Could not load legacy '{}' configuration. Because: '{}'",
EipProtocolAdapterInformation.INSTANCE.getDisplayName(),
legacyConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", legacyConfigFailedException);
}
//we rethrow the exception from the current config conversation, to have a correct rest response.
throw currentConfigFailedException;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,17 @@
import com.hivemq.edge.adapters.file.config.FileToMqttMapping;
import com.hivemq.edge.adapters.file.config.legacy.LegacyFileAdapterConfig;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class FileProtocolAdapterFactory implements ProtocolAdapterFactory<FileAdapterConfig> {

private static final @NotNull Logger log = LoggerFactory.getLogger(FileProtocolAdapterFactory.class);

@Override
public @NotNull ProtocolAdapterInformation getInformation() {
return FileProtocolAdapterInformation.INSTANCE;
Expand All @@ -46,11 +50,29 @@ public class FileProtocolAdapterFactory implements ProtocolAdapterFactory<FileAd

@Override
public @NotNull FileAdapterConfig convertConfigObject(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
if (config.get("fileToMqtt") != null || config.get("mqttToFile") != null) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
try {
return ProtocolAdapterFactory.super.convertConfigObject(objectMapper, config);
} else {
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception currentConfigFailedException) {
try {
log.warn("Could not load '{}' configuration, trying to load legacy configuration. Because: '{}'",
FileProtocolAdapterInformation.INSTANCE.getDisplayName(),
currentConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", currentConfigFailedException);
}
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception legacyConfigFailedException) {
log.warn("Could not load legacy '{}' configuration. Because: '{}'",
FileProtocolAdapterInformation.INSTANCE.getDisplayName(),
legacyConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", legacyConfigFailedException);
}
//we rethrow the exception from the current config conversation, to have a correct rest response.
throw currentConfigFailedException;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,20 +52,30 @@ public class HttpProtocolAdapterFactory implements ProtocolAdapterFactory<HttpAd

@Override
public @NotNull HttpAdapterConfig convertConfigObject(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
try {
return ProtocolAdapterFactory.super.convertConfigObject(objectMapper, config);
} catch (final Exception currentConfigFailedException) {
try {
log.warn("Could not load http adapter configuration, trying to load legacy configuration.");
log.warn("Could not load '{}' configuration, trying to load legacy configuration. Because: '{}'",
HttpProtocolAdapterInformation.INSTANCE.getDisplayName(),
currentConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", currentConfigFailedException);
}
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception ignored) {
log.warn("Could not load legacy http adapter configuration.");
} catch (final Exception legacyConfigFailedException) {
log.warn("Could not load legacy '{}' configuration. Because: '{}'",
HttpProtocolAdapterInformation.INSTANCE.getDisplayName(),
legacyConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", legacyConfigFailedException);
}
//we rethrow the exception from the current config conversation, to have a correct rest response.
throw currentConfigFailedException;
}
}

}

@Override
Expand All @@ -74,7 +84,8 @@ public class HttpProtocolAdapterFactory implements ProtocolAdapterFactory<HttpAd
}

private static @NotNull HttpAdapterConfig tryConvertLegacyConfig(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
final LegacyHttpAdapterConfig legacyHttpAdapterConfig =
objectMapper.convertValue(config, LegacyHttpAdapterConfig.class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,24 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hivemq.adapter.sdk.api.ProtocolAdapter;
import com.hivemq.adapter.sdk.api.ProtocolAdapterInformation;
import com.hivemq.adapter.sdk.api.config.MqttUserProperty;
import com.hivemq.adapter.sdk.api.factories.ProtocolAdapterFactory;
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterInput;
import com.hivemq.edge.adapters.modbus.config.legacy.LegacyModbusAdapterConfig;
import com.hivemq.edge.adapters.modbus.config.ModbusAdapterConfig;
import com.hivemq.edge.adapters.modbus.config.ModbusToMqttConfig;
import com.hivemq.edge.adapters.modbus.config.ModbusToMqttMapping;
import com.hivemq.edge.adapters.modbus.config.legacy.LegacyModbusAdapterConfig;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ModbusProtocolAdapterFactory implements ProtocolAdapterFactory<ModbusAdapterConfig> {

private static final @NotNull Logger log = LoggerFactory.getLogger(ModbusProtocolAdapterFactory.class);

@Override
public @NotNull ProtocolAdapterInformation getInformation() {
return ModbusProtocolAdapterInformation.INSTANCE;
Expand All @@ -52,15 +55,35 @@ public class ModbusProtocolAdapterFactory implements ProtocolAdapterFactory<Modb

@Override
public @NotNull ModbusAdapterConfig convertConfigObject(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
if(config.get("modbusToMqtt") != null || config.get("mqttToModbus") != null) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
try {
return ProtocolAdapterFactory.super.convertConfigObject(objectMapper, config);
} else {
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception currentConfigFailedException) {
try {
log.warn("Could not load '{}' configuration, trying to load legacy configuration. Because: '{}'",
ModbusProtocolAdapterInformation.INSTANCE.getDisplayName(),
currentConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", currentConfigFailedException);
}
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception legacyConfigFailedException) {
log.warn("Could not load legacy '{}' configuration. Because: '{}'",
ModbusProtocolAdapterInformation.INSTANCE.getDisplayName(),
legacyConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", legacyConfigFailedException);
}
//we rethrow the exception from the current config conversation, to have a correct rest response.
throw currentConfigFailedException;
}
}
}

private static @NotNull ModbusAdapterConfig tryConvertLegacyConfig(final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
private static @NotNull ModbusAdapterConfig tryConvertLegacyConfig(
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
final LegacyModbusAdapterConfig legacyModbusAdapterConfig =
objectMapper.convertValue(config, LegacyModbusAdapterConfig.class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,17 @@
import com.hivemq.edge.adapters.opcua.config.OpcUaToMqttMapping;
import com.hivemq.edge.adapters.opcua.config.legacy.LegacyOpcUaAdapterConfig;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class OpcUaProtocolAdapterFactory implements ProtocolAdapterFactory<OpcUaAdapterConfig> {

private static final @NotNull Logger log = LoggerFactory.getLogger(OpcUaProtocolAdapterFactory.class);

@Override
public @NotNull ProtocolAdapterInformation getInformation() {
return OpcUaProtocolAdapterInformation.INSTANCE;
Expand All @@ -51,11 +55,29 @@ public class OpcUaProtocolAdapterFactory implements ProtocolAdapterFactory<OpcUa

@Override
public @NotNull OpcUaAdapterConfig convertConfigObject(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
if (config.get("opcuaToMqtt") != null || config.get("mqttToOpcua") != null) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
try {
return ProtocolAdapterFactory.super.convertConfigObject(objectMapper, config);
} else {
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception currentConfigFailedException) {
try {
log.warn("Could not load '{}' configuration, trying to load legacy configuration. Because: '{}'",
OpcUaProtocolAdapterInformation.INSTANCE.getDisplayName(),
currentConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", currentConfigFailedException);
}
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception legacyConfigFailedException) {
log.warn("Could not load legacy '{}' configuration. Because: '{}'",
OpcUaProtocolAdapterInformation.INSTANCE.getDisplayName(),
legacyConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", legacyConfigFailedException);
}
//we rethrow the exception from the current config conversation, to have a correct rest response.
throw currentConfigFailedException;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hivemq.adapter.sdk.api.ProtocolAdapter;
import com.hivemq.adapter.sdk.api.ProtocolAdapterInformation;
import com.hivemq.adapter.sdk.api.config.MqttUserProperty;
import com.hivemq.adapter.sdk.api.factories.ProtocolAdapterFactory;
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterInput;
import com.hivemq.edge.adapters.plc4x.config.Plc4xToMqttMapping;
import com.hivemq.edge.adapters.plc4x.types.ads.config.ADSAdapterConfig;
import com.hivemq.edge.adapters.plc4x.types.ads.config.ADSToMqttConfig;
import com.hivemq.edge.adapters.plc4x.types.ads.config.legacy.LegacyADSAdapterConfig;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
Expand All @@ -36,6 +37,8 @@
*/
public class ADSProtocolAdapterFactory implements ProtocolAdapterFactory<ADSAdapterConfig> {

private static final @NotNull Logger log = LoggerFactory.getLogger(ADSProtocolAdapterFactory.class);

@Override
public @NotNull ProtocolAdapterInformation getInformation() {
return ADSProtocolAdapterInformation.INSTANCE;
Expand All @@ -55,11 +58,29 @@ public class ADSProtocolAdapterFactory implements ProtocolAdapterFactory<ADSAdap

@Override
public @NotNull ADSAdapterConfig convertConfigObject(
final @NotNull ObjectMapper objectMapper, final @NotNull Map<String, Object> config) {
if (config.get("adsToMqtt") != null || config.get("mqttToAds") != null) {
final @NotNull ObjectMapper objectMapper,
final @NotNull Map<String, Object> config) {
try {
return ProtocolAdapterFactory.super.convertConfigObject(objectMapper, config);
} else {
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception currentConfigFailedException) {
try {
log.warn("Could not load '{}' configuration, trying to load legacy configuration. Because: '{}'",
ADSProtocolAdapterInformation.INSTANCE.getDisplayName(),
currentConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", currentConfigFailedException);
}
return tryConvertLegacyConfig(objectMapper, config);
} catch (final Exception legacyConfigFailedException) {
log.warn("Could not load legacy '{}' configuration. Because: '{}'",
ADSProtocolAdapterInformation.INSTANCE.getDisplayName(),
legacyConfigFailedException.getMessage());
if (log.isDebugEnabled()) {
log.debug("Original Exception:", legacyConfigFailedException);
}
//we rethrow the exception from the current config conversation, to have a correct rest response.
throw currentConfigFailedException;
}
}
}

Expand Down

0 comments on commit 76d127e

Please sign in to comment.