mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-26 15:21:41 +01:00
[influxdb] Fix exception handling and improve some type conversions (#15452)
Signed-off-by: Jan N. Klug <github@klug.nrw>
This commit is contained in:
parent
f4fed3a800
commit
f24a517a0f
@ -29,8 +29,10 @@ import org.openhab.core.library.items.ColorItem;
|
|||||||
import org.openhab.core.library.items.ContactItem;
|
import org.openhab.core.library.items.ContactItem;
|
||||||
import org.openhab.core.library.items.DateTimeItem;
|
import org.openhab.core.library.items.DateTimeItem;
|
||||||
import org.openhab.core.library.items.DimmerItem;
|
import org.openhab.core.library.items.DimmerItem;
|
||||||
|
import org.openhab.core.library.items.ImageItem;
|
||||||
import org.openhab.core.library.items.LocationItem;
|
import org.openhab.core.library.items.LocationItem;
|
||||||
import org.openhab.core.library.items.NumberItem;
|
import org.openhab.core.library.items.NumberItem;
|
||||||
|
import org.openhab.core.library.items.PlayerItem;
|
||||||
import org.openhab.core.library.items.RollershutterItem;
|
import org.openhab.core.library.items.RollershutterItem;
|
||||||
import org.openhab.core.library.items.SwitchItem;
|
import org.openhab.core.library.items.SwitchItem;
|
||||||
import org.openhab.core.library.types.DateTimeType;
|
import org.openhab.core.library.types.DateTimeType;
|
||||||
@ -39,10 +41,14 @@ import org.openhab.core.library.types.HSBType;
|
|||||||
import org.openhab.core.library.types.OnOffType;
|
import org.openhab.core.library.types.OnOffType;
|
||||||
import org.openhab.core.library.types.OpenClosedType;
|
import org.openhab.core.library.types.OpenClosedType;
|
||||||
import org.openhab.core.library.types.PercentType;
|
import org.openhab.core.library.types.PercentType;
|
||||||
|
import org.openhab.core.library.types.PlayPauseType;
|
||||||
import org.openhab.core.library.types.PointType;
|
import org.openhab.core.library.types.PointType;
|
||||||
import org.openhab.core.library.types.QuantityType;
|
import org.openhab.core.library.types.QuantityType;
|
||||||
|
import org.openhab.core.library.types.RawType;
|
||||||
|
import org.openhab.core.library.types.RewindFastforwardType;
|
||||||
import org.openhab.core.library.types.StringType;
|
import org.openhab.core.library.types.StringType;
|
||||||
import org.openhab.core.types.State;
|
import org.openhab.core.types.State;
|
||||||
|
import org.openhab.core.types.UnDefType;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -81,7 +87,7 @@ public class InfluxDBStateConvertUtils {
|
|||||||
} else if (state instanceof DateTimeType type) {
|
} else if (state instanceof DateTimeType type) {
|
||||||
value = type.getZonedDateTime().toInstant().toEpochMilli();
|
value = type.getZonedDateTime().toInstant().toEpochMilli();
|
||||||
} else {
|
} else {
|
||||||
value = state.toString();
|
value = state.toFullString();
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@ -137,9 +143,21 @@ public class InfluxDBStateConvertUtils {
|
|||||||
Instant i = Instant.ofEpochMilli(new BigDecimal(valueStr).longValue());
|
Instant i = Instant.ofEpochMilli(new BigDecimal(valueStr).longValue());
|
||||||
ZonedDateTime z = ZonedDateTime.ofInstant(i, TimeZone.getDefault().toZoneId());
|
ZonedDateTime z = ZonedDateTime.ofInstant(i, TimeZone.getDefault().toZoneId());
|
||||||
return new DateTimeType(z);
|
return new DateTimeType(z);
|
||||||
|
} else if (item instanceof PlayerItem) {
|
||||||
|
try {
|
||||||
|
return PlayPauseType.valueOf(valueStr);
|
||||||
|
} catch (IllegalArgumentException ignored) {
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return RewindFastforwardType.valueOf(valueStr);
|
||||||
|
} catch (IllegalArgumentException ignored) {
|
||||||
|
}
|
||||||
|
} else if (item instanceof ImageItem) {
|
||||||
|
return RawType.valueOf(valueStr);
|
||||||
} else {
|
} else {
|
||||||
return new StringType(valueStr);
|
return new StringType(valueStr);
|
||||||
}
|
}
|
||||||
|
return UnDefType.UNDEF;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean toBoolean(@Nullable Object object) {
|
private static boolean toBoolean(@Nullable Object object) {
|
||||||
|
@ -29,8 +29,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import org.influxdb.InfluxDB;
|
import org.influxdb.InfluxDB;
|
||||||
|
import org.influxdb.InfluxDBException;
|
||||||
import org.influxdb.InfluxDBFactory;
|
import org.influxdb.InfluxDBFactory;
|
||||||
import org.influxdb.InfluxDBIOException;
|
|
||||||
import org.influxdb.dto.BatchPoints;
|
import org.influxdb.dto.BatchPoints;
|
||||||
import org.influxdb.dto.Point;
|
import org.influxdb.dto.Point;
|
||||||
import org.influxdb.dto.Pong;
|
import org.influxdb.dto.Pong;
|
||||||
@ -59,14 +59,12 @@ import com.influxdb.exceptions.InfluxException;
|
|||||||
public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
|
public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
|
||||||
private final Logger logger = LoggerFactory.getLogger(InfluxDB1RepositoryImpl.class);
|
private final Logger logger = LoggerFactory.getLogger(InfluxDB1RepositoryImpl.class);
|
||||||
private final InfluxDBConfiguration configuration;
|
private final InfluxDBConfiguration configuration;
|
||||||
private final InfluxDBMetadataService influxDBMetadataService;
|
|
||||||
private final FilterCriteriaQueryCreator queryCreator;
|
private final FilterCriteriaQueryCreator queryCreator;
|
||||||
private @Nullable InfluxDB client;
|
private @Nullable InfluxDB client;
|
||||||
|
|
||||||
public InfluxDB1RepositoryImpl(InfluxDBConfiguration configuration,
|
public InfluxDB1RepositoryImpl(InfluxDBConfiguration configuration,
|
||||||
InfluxDBMetadataService influxDBMetadataService) {
|
InfluxDBMetadataService influxDBMetadataService) {
|
||||||
this.configuration = configuration;
|
this.configuration = configuration;
|
||||||
this.influxDBMetadataService = influxDBMetadataService;
|
|
||||||
this.queryCreator = new InfluxDB1FilterCriteriaQueryCreatorImpl(configuration, influxDBMetadataService);
|
this.queryCreator = new InfluxDB1FilterCriteriaQueryCreatorImpl(configuration, influxDBMetadataService);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,7 +129,7 @@ public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
|
|||||||
BatchPoints batchPoints = BatchPoints.database(configuration.getDatabaseName())
|
BatchPoints batchPoints = BatchPoints.database(configuration.getDatabaseName())
|
||||||
.retentionPolicy(configuration.getRetentionPolicy()).points(points).build();
|
.retentionPolicy(configuration.getRetentionPolicy()).points(points).build();
|
||||||
currentClient.write(batchPoints);
|
currentClient.write(batchPoints);
|
||||||
} catch (InfluxException | InfluxDBIOException e) {
|
} catch (InfluxException | InfluxDBException e) {
|
||||||
logger.debug("Writing to database failed", e);
|
logger.debug("Writing to database failed", e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -177,7 +175,7 @@ public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
|
|||||||
} else {
|
} else {
|
||||||
throw new InfluxException("API not present");
|
throw new InfluxException("API not present");
|
||||||
}
|
}
|
||||||
} catch (InfluxException | InfluxDBIOException e) {
|
} catch (InfluxException | InfluxDBException e) {
|
||||||
logger.warn("Failed to execute query '{}': {}", filter, e.getMessage());
|
logger.warn("Failed to execute query '{}': {}", filter, e.getMessage());
|
||||||
return List.of();
|
return List.of();
|
||||||
}
|
}
|
||||||
|
@ -33,13 +33,18 @@ import org.junit.jupiter.params.provider.ValueSource;
|
|||||||
import org.openhab.core.i18n.UnitProvider;
|
import org.openhab.core.i18n.UnitProvider;
|
||||||
import org.openhab.core.library.items.ContactItem;
|
import org.openhab.core.library.items.ContactItem;
|
||||||
import org.openhab.core.library.items.DateTimeItem;
|
import org.openhab.core.library.items.DateTimeItem;
|
||||||
|
import org.openhab.core.library.items.ImageItem;
|
||||||
import org.openhab.core.library.items.NumberItem;
|
import org.openhab.core.library.items.NumberItem;
|
||||||
|
import org.openhab.core.library.items.PlayerItem;
|
||||||
import org.openhab.core.library.items.SwitchItem;
|
import org.openhab.core.library.items.SwitchItem;
|
||||||
import org.openhab.core.library.types.DateTimeType;
|
import org.openhab.core.library.types.DateTimeType;
|
||||||
import org.openhab.core.library.types.DecimalType;
|
import org.openhab.core.library.types.DecimalType;
|
||||||
import org.openhab.core.library.types.OnOffType;
|
import org.openhab.core.library.types.OnOffType;
|
||||||
import org.openhab.core.library.types.OpenClosedType;
|
import org.openhab.core.library.types.OpenClosedType;
|
||||||
|
import org.openhab.core.library.types.PlayPauseType;
|
||||||
import org.openhab.core.library.types.QuantityType;
|
import org.openhab.core.library.types.QuantityType;
|
||||||
|
import org.openhab.core.library.types.RawType;
|
||||||
|
import org.openhab.core.library.types.RewindFastforwardType;
|
||||||
import org.openhab.core.library.unit.SIUnits;
|
import org.openhab.core.library.unit.SIUnits;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,6 +79,24 @@ public class InfluxDBStateConvertUtilsTest {
|
|||||||
assertThat(InfluxDBStateConvertUtils.stateToObject(type), equalTo(nowInMillis));
|
assertThat(InfluxDBStateConvertUtils.stateToObject(type), equalTo(nowInMillis));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertImageState() {
|
||||||
|
RawType type = new RawType(new byte[] { 0x64, 0x66, 0x55, 0x00, 0x34 }, RawType.DEFAULT_MIME_TYPE);
|
||||||
|
assertThat(InfluxDBStateConvertUtils.stateToObject(type), is("data:application/octet-stream;base64,ZGZVADQ="));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertPlayPauseState() {
|
||||||
|
assertThat(InfluxDBStateConvertUtils.stateToObject(PlayPauseType.PAUSE), is("PAUSE"));
|
||||||
|
assertThat(InfluxDBStateConvertUtils.stateToObject(PlayPauseType.PLAY), is("PLAY"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertRewindFastForwardState() {
|
||||||
|
assertThat(InfluxDBStateConvertUtils.stateToObject(RewindFastforwardType.REWIND), is("REWIND"));
|
||||||
|
assertThat(InfluxDBStateConvertUtils.stateToObject(RewindFastforwardType.FASTFORWARD), is("FASTFORWARD"));
|
||||||
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@ValueSource(strings = { "1.12", "25" })
|
@ValueSource(strings = { "1.12", "25" })
|
||||||
public void convertDecimalToState(String number) {
|
public void convertDecimalToState(String number) {
|
||||||
@ -111,4 +134,21 @@ public class InfluxDBStateConvertUtilsTest {
|
|||||||
ZonedDateTime.ofInstant(Instant.ofEpochMilli(val), ZoneId.systemDefault()));
|
ZonedDateTime.ofInstant(Instant.ofEpochMilli(val), ZoneId.systemDefault()));
|
||||||
assertThat(InfluxDBStateConvertUtils.objectToState(val, item), equalTo(expected));
|
assertThat(InfluxDBStateConvertUtils.objectToState(val, item), equalTo(expected));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertImageToState() {
|
||||||
|
ImageItem item = new ImageItem("name");
|
||||||
|
RawType type = new RawType(new byte[] { 0x64, 0x66, 0x55, 0x00, 0x34 }, RawType.DEFAULT_MIME_TYPE);
|
||||||
|
assertThat(InfluxDBStateConvertUtils.objectToState("data:application/octet-stream;base64,ZGZVADQ=", item),
|
||||||
|
is(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertPlayerToState() {
|
||||||
|
PlayerItem item = new PlayerItem("name");
|
||||||
|
assertThat(InfluxDBStateConvertUtils.objectToState("PLAY", item), is(PlayPauseType.PLAY));
|
||||||
|
assertThat(InfluxDBStateConvertUtils.objectToState("PAUSE", item), is(PlayPauseType.PAUSE));
|
||||||
|
assertThat(InfluxDBStateConvertUtils.objectToState("REWIND", item), is(RewindFastforwardType.REWIND));
|
||||||
|
assertThat(InfluxDBStateConvertUtils.objectToState("FASTFORWARD", item), is(RewindFastforwardType.FASTFORWARD));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user