2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.dbquery.internal.dbimpl.influx2;
15 import java.util.function.BiConsumer;
16 import java.util.function.Consumer;
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.openhab.binding.dbquery.internal.config.InfluxDB2BridgeConfiguration;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
24 import com.influxdb.Cancellable;
25 import com.influxdb.client.InfluxDBClient;
26 import com.influxdb.client.InfluxDBClientFactory;
27 import com.influxdb.client.InfluxDBClientOptions;
28 import com.influxdb.client.QueryApi;
29 import com.influxdb.client.domain.Ready;
30 import com.influxdb.query.FluxRecord;
33 * Real implementation of {@link InfluxDBClientFacade}
35 * @author Joan Pujol - Initial contribution
38 public class InfluxDBClientFacadeImpl implements InfluxDBClientFacade {
39 private final Logger logger = LoggerFactory.getLogger(InfluxDBClientFacadeImpl.class);
41 private final InfluxDB2BridgeConfiguration config;
43 private @Nullable InfluxDBClient client;
44 private @Nullable QueryApi queryAPI;
46 public InfluxDBClientFacadeImpl(InfluxDB2BridgeConfiguration config) {
51 public boolean connect() {
52 var clientOptions = InfluxDBClientOptions.builder().url(config.getUrl()).org(config.getOrganization())
53 .bucket(config.getBucket()).authenticateToken(config.getToken().toCharArray()).build();
55 final InfluxDBClient createdClient = InfluxDBClientFactory.create(clientOptions);
56 this.client = createdClient;
57 var currentQueryAPI = createdClient.getQueryApi();
58 this.queryAPI = currentQueryAPI;
60 boolean connected = checkConnectionStatus();
62 logger.debug("Successfully connected to InfluxDB. Instance ready={}", createdClient.ready());
64 logger.warn("Not able to connect to InfluxDB with config {}", config);
70 private boolean checkConnectionStatus() {
71 final InfluxDBClient currentClient = client;
72 if (currentClient != null) {
73 Ready ready = currentClient.ready();
74 boolean isUp = ready != null && ready.getStatus() == Ready.StatusEnum.READY;
76 logger.debug("database status is OK");
78 logger.warn("database not ready");
82 logger.warn("checkConnection: database is not connected");
88 public boolean isConnected() {
89 return checkConnectionStatus();
93 public boolean disconnect() {
94 final InfluxDBClient currentClient = client;
95 if (currentClient != null) {
96 currentClient.close();
99 logger.debug("Succesfully disconnected from InfluxDB");
101 logger.debug("Already disconnected");
107 public void query(String query, BiConsumer<Cancellable, FluxRecord> onNext, Consumer<? super Throwable> onError,
108 Runnable onComplete) {
109 var currentQueryAPI = queryAPI;
110 if (currentQueryAPI != null) {
111 currentQueryAPI.query(query, onNext, onError, onComplete);
113 logger.warn("Query ignored as current queryAPI is null");