import java.time.ZoneId;
import java.time.ZonedDateTime;
-import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
private @NonNullByDefault({}) ItemToStorePointCreator itemToStorePointCreator;
private @NonNullByDefault({}) InfluxDBRepository influxDBRepository;
+ private boolean tryReconnection = false;
+
@Activate
public InfluxDBPersistenceService(final @Reference ItemRegistry itemRegistry,
final @Reference MetadataRegistry metadataRegistry) {
itemToStorePointCreator = new ItemToStorePointCreator(configuration, metadataRegistry);
influxDBRepository = createInfluxDBRepository();
influxDBRepository.connect();
+ tryReconnection = true;
} else {
logger.error("Cannot load configuration, persistence service wont work");
+ tryReconnection = false;
}
logger.debug("InfluxDB persistence service is now activated");
@Deactivate
public void deactivate() {
logger.debug("InfluxDB persistence service deactivated");
+ tryReconnection = false;
if (influxDBRepository != null) {
influxDBRepository.disconnect();
influxDBRepository = null;
@Override
public Set<PersistenceItemInfo> getItemInfo() {
- if (influxDBRepository != null && influxDBRepository.isConnected()) {
+ if (checkConnection()) {
return influxDBRepository.getStoredItemsCount().entrySet().stream()
.map(entry -> new InfluxDBPersistentItemInfo(entry.getKey(), entry.getValue()))
.collect(Collectors.toUnmodifiableSet());
} else {
logger.info("getItemInfo ignored, InfluxDB is not yet connected");
- return Collections.emptySet();
+ return Set.of();
}
}
@Override
public void store(Item item, @Nullable String alias) {
- if (influxDBRepository != null && influxDBRepository.isConnected()) {
+ if (checkConnection()) {
InfluxPoint point = itemToStorePointCreator.convert(item, alias);
if (point != null) {
logger.trace("Storing item {} in InfluxDB point {}", item, point);
public Iterable<HistoricItem> query(FilterCriteria filter) {
logger.debug("Got a query for historic points!");
- if (influxDBRepository != null && influxDBRepository.isConnected()) {
+ if (checkConnection()) {
logger.trace(
"Filter: itemname: {}, ordering: {}, state: {}, operator: {}, getBeginDate: {}, getEndDate: {}, getPageSize: {}, getPageNumber: {}",
filter.getItemName(), filter.getOrdering().toString(), filter.getState(), filter.getOperator(),
return results.stream().map(this::mapRow2HistoricItem).collect(Collectors.toList());
} else {
logger.debug("query ignored, InfluxDB is not yet connected");
- return Collections.emptyList();
+ return List.of();
}
}
public List<PersistenceStrategy> getDefaultStrategies() {
return List.of(PersistenceStrategy.Globals.RESTORE, PersistenceStrategy.Globals.CHANGE);
}
+
+ /**
+ * check connection and try reconnect
+ *
+ * @return true if connected
+ */
+ private boolean checkConnection() {
+ if (influxDBRepository == null) {
+ return false;
+ } else if (influxDBRepository.isConnected()) {
+ return true;
+ } else if (tryReconnection) {
+ logger.debug("Connection lost, trying re-connection");
+ influxDBRepository.connect();
+ return influxDBRepository.isConnected();
+ }
+ return false;
+ }
}