This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch sp-1157-upgrade-third-party-services in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 530bac0c30adb597c25d664ea513c5000c17d039 Author: Dominik Riemer <[email protected]> AuthorDate: Sun Jan 29 15:53:50 2023 +0100 Refactor code to support Influx 2 (#1157) --- .../deploy/standalone/influxdb/docker-compose.yml | 10 +++- .../apache/streampipes/commons/constants/Envs.java | 38 +++++++++++- .../commons/environment/DefaultEnvironment.java | 54 +++++++++++++++++ .../commons/environment/Environment.java | 32 ++++++++++- .../environment/variable/EnvironmentVariable.java | 12 +++- .../streampipes/config/backend/BackendConfig.java | 4 -- .../dataexplorer/commons/DataExplorerWriter.java | 67 ---------------------- .../dataexplorer/commons/TimeSeriesStore.java | 8 +-- .../dataexplorer/commons/auth/AuthInterceptor.java | 29 ++++++---- .../dataexplorer/commons/image/ImageStore.java | 20 ++++--- .../commons/influx/InfluxClientProvider.java | 66 +++++++++++++++++++++ .../commons/influx/InfluxConnectionSettings.java | 39 ++++++------- .../dataexplorer/commons/influx/InfluxStore.java | 14 ++--- streampipes-data-explorer/pom.xml | 5 ++ .../dataexplorer/DataLakeManagementV4.java | 3 +- .../dataexplorer/query/DataExplorerQuery.java | 4 +- .../dataexplorer/utils/DataExplorerUtils.java | 15 ----- .../dataexplorer/v4/query/DataExplorerQueryV4.java | 6 +- .../sinks/internal/jvm/datalake/DataLakeSink.java | 3 +- 19 files changed, 275 insertions(+), 154 deletions(-) diff --git a/installer/cli/deploy/standalone/influxdb/docker-compose.yml b/installer/cli/deploy/standalone/influxdb/docker-compose.yml index 43f8f6e1a..7ea38aca1 100644 --- a/installer/cli/deploy/standalone/influxdb/docker-compose.yml +++ b/installer/cli/deploy/standalone/influxdb/docker-compose.yml @@ -16,13 +16,20 @@ version: "3.4" services: influxdb: - image: fogsyio/influxdb:1.7 + image: influxdb:2.6 environment: - INFLUXDB_DATA_ENGINE=tsm1 - INFLUXDB_REPORTING_DISABLED=false - INFLUXDB_ADMIN_ENABLED=true + - DOCKER_INFLUXDB_INIT_USERNAME=admin + - DOCKER_INFLUXDB_INIT_PASSWORD=sp-admin + - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=sp-admin + - DOCKER_INFLUXDB_INIT_ORG=sp + - DOCKER_INFLUXDB_INIT_BUCKET=sp + - DOCKER_INFLUXDB_INIT_MODE=upgrade volumes: - influxdb:/var/lib/influxdb + - influxdb2:/var/lib/influxdb2 logging: driver: "json-file" options: @@ -33,6 +40,7 @@ services: volumes: influxdb: + influxdb2: networks: spnet: diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java index 546050058..067df3dea 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java @@ -23,9 +23,9 @@ public enum Envs { SP_PORT("SP_PORT", null), @Deprecated(since = "0.90.0", forRemoval = true) - SP_CONSUL_LOCATION("CONSUL_LOCATION", "consul"), + SP_CONSUL_LOCATION("CONSUL_LOCATION", "consul", "localhost"), - SP_CONSUL_HOST("SP_CONSUL_HOST", "consul"), + SP_CONSUL_HOST("SP_CONSUL_HOST", "consul", "localhost"), SP_CONSUL_PORT("SP_CONSUL_PORT", "8500"), SP_KAFKA_RETENTION_MS("SP_KAFKA_RETENTION_MS", null), SP_JWT_SECRET("JWT_SECRET", null), @@ -42,14 +42,42 @@ public enum Envs { SP_CLIENT_SECRET("SP_CLIENT_SECRET", null), SP_ENCRYPTION_PASSCODE("SP_ENCRYPTION_PASSCODE", null), SP_DEBUG("SP_DEBUG", "false"), - SP_MAX_WAIT_TIME_AT_SHUTDOWN("SP_MAX_WAIT_TIME_AT_SHUTDOWN", null); + SP_MAX_WAIT_TIME_AT_SHUTDOWN("SP_MAX_WAIT_TIME_AT_SHUTDOWN", null), + + // CouchDB Storage + SP_COUCHDB_PROTOCOL("SP_COUCHDB_PROTOCOL", "http"), + SP_COUCHDB_HOST("SP_COUCHDB_HOST", "couchdb", "localhost"), + SP_COUCHDB_PORT("SP_COUCHDB_PORT", "5984"), + SP_COUCHDB_USER("SP_COUCHDB_USER", "admin"), + SP_COUCHDB_PASSWORD("SP_COUCHDB_PASSWORD", "admin"), + + + // Time Series Storage + SP_TS_STORAGE_PROTOCOL("SP_TS_STORAGE_PROTOCOL", "http"), + SP_TS_STORAGE_HOST("SP_TS_STORAGE_HOST", "influxdb", "localhost"), + SP_TS_STORAGE_PORT("SP_TS_STORAGE_PORT", "8086"), + + SP_TS_STORAGE_TOKEN("SP_TS_STORAGE_TOKEN", "sp-admin"), + + SP_TS_STORAGE_ORG("SP_TS_STORAGE_ORG", "sp"), + + SP_TS_STORAGE_BUCKET("SP_TS_STORAGE_BUCKET", "sp"); private final String envVariableName; private final String defaultValue; + private final String devDefaultValue; + + Envs(String envVariableName, String defaultValue, String devDefaultValue) { + this.envVariableName = envVariableName; + this.defaultValue = defaultValue; + this.devDefaultValue = devDefaultValue; + } + Envs(String envVariableName, String defaultValue) { this.envVariableName = envVariableName; this.defaultValue = defaultValue; + this.devDefaultValue = defaultValue; } public boolean exists() { @@ -87,4 +115,8 @@ public enum Envs { public String getDefaultValue() { return defaultValue; } + + public String getDevDefaultValue() { + return devDefaultValue; + } } diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java index 0c051ef16..8ccf01948 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java @@ -40,6 +40,60 @@ public class DefaultEnvironment implements Environment { return new BooleanEnvironmentVariable(Envs.SP_DEBUG); } + @Override + public StringEnvironmentVariable getTsStorageProtocol() { + return new StringEnvironmentVariable(Envs.SP_TS_STORAGE_PROTOCOL); + } + + @Override + public StringEnvironmentVariable getTsStorageHost() { + return new StringEnvironmentVariable(Envs.SP_TS_STORAGE_HOST); + } + + @Override + public IntEnvironmentVariable getTsStoragePort() { + return new IntEnvironmentVariable(Envs.SP_TS_STORAGE_PORT); + } + + @Override + public StringEnvironmentVariable getTsStorageToken() { + return new StringEnvironmentVariable(Envs.SP_TS_STORAGE_TOKEN); + } + + @Override + public StringEnvironmentVariable getTsStorageOrg() { + return new StringEnvironmentVariable(Envs.SP_TS_STORAGE_ORG); + } + + @Override + public StringEnvironmentVariable getTsStorageBucket() { + return new StringEnvironmentVariable(Envs.SP_TS_STORAGE_BUCKET); + } + + @Override + public StringEnvironmentVariable getCouchDbProtocol() { + return new StringEnvironmentVariable(Envs.SP_COUCHDB_PROTOCOL); + } + @Override + public StringEnvironmentVariable getCouchDbHost() { + return new StringEnvironmentVariable(Envs.SP_COUCHDB_HOST); + } + + @Override + public IntEnvironmentVariable getCouchDbPort() { + return new IntEnvironmentVariable(Envs.SP_COUCHDB_PORT); + } + + @Override + public StringEnvironmentVariable getCouchDbUsername() { + return new StringEnvironmentVariable(Envs.SP_COUCHDB_USER); + } + + @Override + public StringEnvironmentVariable getCouchDbPassword() { + return new StringEnvironmentVariable(Envs.SP_COUCHDB_PASSWORD); + } + @Override public StringEnvironmentVariable getConsulLocation() { return new StringEnvironmentVariable(Envs.SP_CONSUL_LOCATION); diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java index b3a3256d2..63be042c3 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java @@ -24,12 +24,40 @@ import org.apache.streampipes.commons.environment.variable.StringEnvironmentVari public interface Environment { + // Consul env variables StringEnvironmentVariable getConsulHost(); IntEnvironmentVariable getConsulPort(); - BooleanEnvironmentVariable getSpDebug(); - @Deprecated(since = "0.90.0", forRemoval = true) StringEnvironmentVariable getConsulLocation(); + + BooleanEnvironmentVariable getSpDebug(); + + // Time series storage env variables + + StringEnvironmentVariable getTsStorageProtocol(); + + StringEnvironmentVariable getTsStorageHost(); + + IntEnvironmentVariable getTsStoragePort(); + + StringEnvironmentVariable getTsStorageToken(); + + StringEnvironmentVariable getTsStorageOrg(); + + StringEnvironmentVariable getTsStorageBucket(); + + // CouchDB env variables + + StringEnvironmentVariable getCouchDbProtocol(); + + StringEnvironmentVariable getCouchDbHost(); + + IntEnvironmentVariable getCouchDbPort(); + + StringEnvironmentVariable getCouchDbUsername(); + + StringEnvironmentVariable getCouchDbPassword(); + } diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/variable/EnvironmentVariable.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/variable/EnvironmentVariable.java index 769d5fea9..e02031df4 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/variable/EnvironmentVariable.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/variable/EnvironmentVariable.java @@ -23,8 +23,9 @@ import org.apache.streampipes.commons.constants.Envs; public abstract class EnvironmentVariable<T> { - private T defaultValue; - private String envVariableName; + private final T defaultValue; + private final String envVariableName; + private boolean devModeActive; public EnvironmentVariable(String envVariableName, T defaultValue) { @@ -34,7 +35,8 @@ public abstract class EnvironmentVariable<T> { public EnvironmentVariable(Envs envVariable) { this.envVariableName = envVariable.getEnvVariableName(); - this.defaultValue = parse(envVariable.getDefaultValue()); + this.devModeActive = isDevModeActive(); + this.defaultValue = devModeActive ? parse(envVariable.getDevDefaultValue()) : parse(envVariable.getDefaultValue()); } public T getValue() { @@ -57,6 +59,10 @@ public abstract class EnvironmentVariable<T> { return resolver.resolve(); } + private boolean isDevModeActive() { + return CustomEnvs.getEnvAsBoolean(Envs.SP_DEBUG.getEnvVariableName()); + } + public abstract T parse(String value); } diff --git a/streampipes-config/src/main/java/org/apache/streampipes/config/backend/BackendConfig.java b/streampipes-config/src/main/java/org/apache/streampipes/config/backend/BackendConfig.java index 1c02d9883..43e602362 100644 --- a/streampipes-config/src/main/java/org/apache/streampipes/config/backend/BackendConfig.java +++ b/streampipes-config/src/main/java/org/apache/streampipes/config/backend/BackendConfig.java @@ -241,10 +241,6 @@ public enum BackendConfig { return config.getInteger(BackendConfigKeys.INFLUX_PORT); } - public String getInfluxUrl() { - return "http://" + getInfluxHost() + ":" + getInfluxPort(); - } - public String getInfluxDatabaseName() { return config.getString(BackendConfigKeys.INFLUX_DATA_BASE); } diff --git a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/DataExplorerWriter.java b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/DataExplorerWriter.java deleted file mode 100644 index 022bc75d8..000000000 --- a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/DataExplorerWriter.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.apache.streampipes.dataexplorer.commons; - -import org.apache.streampipes.dataexplorer.commons.configs.DataExplorerConfigurations; -import org.apache.streampipes.dataexplorer.commons.influx.InfluxConnectionSettings; - -import org.influxdb.InfluxDB; -import org.influxdb.InfluxDBFactory; -import org.influxdb.dto.Point; - -import java.util.Map; -import java.util.concurrent.TimeUnit; - -@Deprecated -public class DataExplorerWriter { - private InfluxDB influxDB; - - // TODO return a connection here - public void connect(InfluxConnectionSettings dataExplorerConnectionSettings) { - this.influxDB = InfluxDBFactory.connect( - dataExplorerConnectionSettings.getInfluxDbHost() + ":" + dataExplorerConnectionSettings.getInfluxDbPort(), - dataExplorerConnectionSettings.getUser(), dataExplorerConnectionSettings.getPassword()); - this.influxDB.setDatabase(DataExplorerConfigurations.DATA_LAKE_DATABASE_NAME); - } - - public void close() { - this.influxDB.close(); - } - - public void write(Map<String, Object> data, - String measurement) { - Point.Builder builder = Point.measurement(measurement) - .time((Long) data.get("timestamp"), TimeUnit.MILLISECONDS); - - data.remove("timestamp"); - - for (String key : data.keySet()) { - if (data.get(key) instanceof Double || data.get(key) == null) { - builder.addField(key, (Double) data.get(key)); - } else if (data.get(key) instanceof Integer) { - builder.addField(key, (Integer) data.get(key)); - } else { - builder.tag(key, (String) data.get(key)); - } - } - - this.influxDB.write(builder.build()); - } - -} diff --git a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/TimeSeriesStore.java b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/TimeSeriesStore.java index 83b31be88..687f13961 100644 --- a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/TimeSeriesStore.java +++ b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/TimeSeriesStore.java @@ -19,12 +19,12 @@ package org.apache.streampipes.dataexplorer.commons; import org.apache.streampipes.client.StreamPipesClient; +import org.apache.streampipes.commons.environment.Environment; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.dataexplorer.commons.image.ImageStore; import org.apache.streampipes.dataexplorer.commons.influx.InfluxStore; import org.apache.streampipes.model.datalake.DataLakeMeasure; import org.apache.streampipes.model.runtime.Event; -import org.apache.streampipes.svcdiscovery.api.SpConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +38,7 @@ public class TimeSeriesStore { private ImageStore imageStore; - public TimeSeriesStore(SpConfig config, + public TimeSeriesStore(Environment environment, StreamPipesClient client, DataLakeMeasure measure, boolean enableImageStore) { @@ -47,10 +47,10 @@ public class TimeSeriesStore { if (enableImageStore) { // TODO check if event properties are replaces correctly - this.imageStore = new ImageStore(measure, config); + this.imageStore = new ImageStore(measure, environment); } - this.influxStore = new InfluxStore(measure, config); + this.influxStore = new InfluxStore(measure, environment); } diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/auth/AuthInterceptor.java similarity index 57% copy from streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java copy to streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/auth/AuthInterceptor.java index b3a3256d2..52c37c4b2 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java +++ b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/auth/AuthInterceptor.java @@ -16,20 +16,29 @@ * */ -package org.apache.streampipes.commons.environment; +package org.apache.streampipes.dataexplorer.commons.auth; -import org.apache.streampipes.commons.environment.variable.BooleanEnvironmentVariable; -import org.apache.streampipes.commons.environment.variable.IntEnvironmentVariable; -import org.apache.streampipes.commons.environment.variable.StringEnvironmentVariable; +import okhttp3.Interceptor; +import okhttp3.Response; +import org.jetbrains.annotations.NotNull; -public interface Environment { +import java.io.IOException; - StringEnvironmentVariable getConsulHost(); +public class AuthInterceptor implements Interceptor { - IntEnvironmentVariable getConsulPort(); + private String token; - BooleanEnvironmentVariable getSpDebug(); + public AuthInterceptor(String token) { + this.token = token; + } - @Deprecated(since = "0.90.0", forRemoval = true) - StringEnvironmentVariable getConsulLocation(); + @NotNull + @Override + public Response intercept(@NotNull Chain chain) throws IOException { + var req = chain.request(); + var authHeaderValue = "Token " + token; + req = req.newBuilder().addHeader("Authorization", authHeaderValue).build(); + + return chain.proceed(req); + } } diff --git a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/image/ImageStore.java b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/image/ImageStore.java index 66be08389..e9323d111 100644 --- a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/image/ImageStore.java +++ b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/image/ImageStore.java @@ -18,12 +18,11 @@ package org.apache.streampipes.dataexplorer.commons.image; +import org.apache.streampipes.commons.environment.Environment; import org.apache.streampipes.commons.exceptions.SpRuntimeException; -import org.apache.streampipes.dataexplorer.commons.configs.CouchDbEnvKeys; import org.apache.streampipes.model.datalake.DataLakeMeasure; import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.model.schema.EventProperty; -import org.apache.streampipes.svcdiscovery.api.SpConfig; import org.apache.commons.codec.binary.Base64; import org.lightcouch.CouchDbClient; @@ -44,18 +43,21 @@ public class ImageStore { private List<EventProperty> imageProperties; private CouchDbClient couchDbClient; - public ImageStore(DataLakeMeasure measure, SpConfig config) { - this.couchDbClient = new CouchDbClient(from(config)); + public ImageStore(DataLakeMeasure measure, + Environment environment) { + this.couchDbClient = new CouchDbClient(from(environment)); this.imageProperties = ImageStoreUtils.getImageProperties(measure); } - private static CouchDbProperties from(SpConfig config) { - String couchDbProtocol = config.getString(CouchDbEnvKeys.COUCHDB_PROTOCOL); - String couchDbHost = config.getString(CouchDbEnvKeys.COUCHDB_HOST); - int couchDbPort = config.getInteger(CouchDbEnvKeys.COUCHDB_PORT); + private static CouchDbProperties from(Environment env) { + String couchDbProtocol = env.getCouchDbProtocol().getValueOrDefault(); + String couchDbHost = env.getCouchDbHost().getValueOrDefault(); + int couchDbPort = env.getCouchDbPort().getValueOrDefault(); + String username = env.getCouchDbUsername().getValueOrDefault(); + String password = env.getCouchDbPassword().getValueOrDefault(); return new CouchDbProperties(DB_NAME, true, couchDbProtocol, - couchDbHost, couchDbPort, null, null); + couchDbHost, couchDbPort, username, password); } public void onEvent(Event event) throws SpRuntimeException { diff --git a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxClientProvider.java b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxClientProvider.java new file mode 100644 index 000000000..455552bb1 --- /dev/null +++ b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxClientProvider.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.streampipes.dataexplorer.commons.influx; + +import org.apache.streampipes.commons.environment.Environment; +import org.apache.streampipes.commons.environment.Environments; +import org.apache.streampipes.dataexplorer.commons.auth.AuthInterceptor; + +import okhttp3.OkHttpClient; +import org.influxdb.InfluxDB; +import org.influxdb.InfluxDBFactory; + +import java.util.concurrent.TimeUnit; + +public class InfluxClientProvider { + + /** + * Create a new InfluxDB client from environment variables + * + * @return InfluxDB + */ + public static InfluxDB getInfluxDBClient() { + var env = getEnvironment(); + return getInfluxDBClient(InfluxConnectionSettings.from(env)); + } + + /** + * Create a new InfluxDB client from provided settings + * + * @param settings Connection settings + * @return InfluxDB + */ + public static InfluxDB getInfluxDBClient(InfluxConnectionSettings settings) { + OkHttpClient.Builder okHttpClientBuilder = getHttpClientBuilder(settings.getToken()); + + return InfluxDBFactory.connect(settings.getConnectionUrl(), okHttpClientBuilder); + } + + private static OkHttpClient.Builder getHttpClientBuilder(String authToken) { + return new OkHttpClient().newBuilder() + .addInterceptor(new AuthInterceptor(authToken)) + .connectTimeout(120, TimeUnit.SECONDS) + .readTimeout(120, TimeUnit.SECONDS) + .writeTimeout(120, TimeUnit.SECONDS); + } + + private static Environment getEnvironment() { + return Environments.getEnvironment(); + } +} diff --git a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxConnectionSettings.java b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxConnectionSettings.java index 0716a9bf7..d94f41825 100644 --- a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxConnectionSettings.java +++ b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxConnectionSettings.java @@ -18,38 +18,37 @@ package org.apache.streampipes.dataexplorer.commons.influx; -import org.apache.streampipes.dataexplorer.commons.configs.DataExplorerEnvKeys; -import org.apache.streampipes.svcdiscovery.api.SpConfig; +import org.apache.streampipes.commons.environment.Environment; public class InfluxConnectionSettings { private final Integer influxDbPort; + + private final String influxDbProtocol; private final String influxDbHost; private final String databaseName; - private final String user; - private final String password; + private final String token; - private InfluxConnectionSettings(String influxDbHost, + private InfluxConnectionSettings(String influxDbProtocol, + String influxDbHost, Integer influxDbPort, String databaseName, - String user, - String password) { + String token) { + this.influxDbProtocol = influxDbProtocol; this.influxDbHost = influxDbHost; this.influxDbPort = influxDbPort; this.databaseName = databaseName; - this.user = user; - this.password = password; + this.token = token; } - public static InfluxConnectionSettings from(SpConfig configStore) { + public static InfluxConnectionSettings from(Environment environment) { return new InfluxConnectionSettings( - configStore.getString(DataExplorerEnvKeys.DATA_LAKE_PROTOCOL) + "://" - + configStore.getString(DataExplorerEnvKeys.DATA_LAKE_HOST), - configStore.getInteger(DataExplorerEnvKeys.DATA_LAKE_PORT), - configStore.getString(DataExplorerEnvKeys.DATA_LAKE_DATABASE_NAME), - configStore.getString(DataExplorerEnvKeys.DATA_LAKE_USERNAME), - configStore.getString(DataExplorerEnvKeys.DATA_LAKE_PASSWORD)); + environment.getTsStorageProtocol().getValueOrDefault(), + environment.getTsStorageHost().getValueOrDefault(), + environment.getTsStoragePort().getValueOrDefault(), + environment.getTsStorageBucket().getValueOrDefault(), + environment.getTsStorageToken().getValueOrDefault()); } public Integer getInfluxDbPort() { @@ -64,11 +63,11 @@ public class InfluxConnectionSettings { return databaseName; } - public String getUser() { - return user; + public String getToken() { + return token; } - public String getPassword() { - return password; + public String getConnectionUrl() { + return influxDbProtocol + "://" + influxDbHost + ":" + influxDbPort; } } diff --git a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxStore.java b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxStore.java index 7ef23ca0e..481aacc1c 100644 --- a/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxStore.java +++ b/streampipes-data-explorer-commons/src/main/java/org/apache/streampipes/dataexplorer/commons/influx/InfluxStore.java @@ -18,6 +18,7 @@ package org.apache.streampipes.dataexplorer.commons.influx; +import org.apache.streampipes.commons.environment.Environment; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.model.datalake.DataLakeMeasure; import org.apache.streampipes.model.runtime.Event; @@ -25,11 +26,9 @@ import org.apache.streampipes.model.runtime.field.PrimitiveField; import org.apache.streampipes.model.schema.EventProperty; import org.apache.streampipes.model.schema.EventPropertyPrimitive; import org.apache.streampipes.model.schema.PropertyScope; -import org.apache.streampipes.svcdiscovery.api.SpConfig; import org.apache.streampipes.vocabulary.XSD; import org.influxdb.InfluxDB; -import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Point; import org.influxdb.dto.Pong; import org.influxdb.dto.Query; @@ -64,8 +63,8 @@ public class InfluxStore { } public InfluxStore(DataLakeMeasure measure, - SpConfig configStore) throws SpRuntimeException { - this(measure, InfluxConnectionSettings.from(configStore)); + Environment environment) throws SpRuntimeException { + this(measure, InfluxConnectionSettings.from(environment)); } /** @@ -75,15 +74,12 @@ public class InfluxStore { * be found */ private void connect(InfluxConnectionSettings settings) throws SpRuntimeException { - // Connecting to the server - // "http://" must be in front - String urlAndPort = settings.getInfluxDbHost() + ":" + settings.getInfluxDbPort(); - influxDb = InfluxDBFactory.connect(urlAndPort, settings.getUser(), settings.getPassword()); + influxDb = InfluxClientProvider.getInfluxDBClient(settings); // Checking, if server is available Pong response = influxDb.ping(); if (response.getVersion().equalsIgnoreCase("unknown")) { - throw new SpRuntimeException("Could not connect to InfluxDb Server: " + urlAndPort); + throw new SpRuntimeException("Could not connect to InfluxDb Server: " + settings.getConnectionUrl()); } String databaseName = settings.getDatabaseName(); diff --git a/streampipes-data-explorer/pom.xml b/streampipes-data-explorer/pom.xml index f03ffaad9..0f8c4aa37 100644 --- a/streampipes-data-explorer/pom.xml +++ b/streampipes-data-explorer/pom.xml @@ -34,6 +34,11 @@ <artifactId>streampipes-config</artifactId> <version>0.91.0-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.apache.streampipes</groupId> + <artifactId>streampipes-data-explorer-commons</artifactId> + <version>0.91.0-SNAPSHOT</version> + </dependency> <dependency> <groupId>org.apache.streampipes</groupId> <artifactId>streampipes-model</artifactId> diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/DataLakeManagementV4.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/DataLakeManagementV4.java index 6928f940e..e02a2f84f 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/DataLakeManagementV4.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/DataLakeManagementV4.java @@ -19,6 +19,7 @@ package org.apache.streampipes.dataexplorer; import org.apache.streampipes.config.backend.BackendConfig; +import org.apache.streampipes.dataexplorer.commons.influx.InfluxClientProvider; import org.apache.streampipes.dataexplorer.param.RetentionPolicyQueryParams; import org.apache.streampipes.dataexplorer.query.DeleteDataQuery; import org.apache.streampipes.dataexplorer.query.EditRetentionPolicyQuery; @@ -182,7 +183,7 @@ public class DataLakeManagementV4 { public Map<String, Object> getTagValues(String measurementId, String fields) { - InfluxDB influxDB = DataExplorerUtils.getInfluxDBClient(); + InfluxDB influxDB = InfluxClientProvider.getInfluxDBClient(); Map<String, Object> tags = new HashMap<>(); if (fields != null && !("".equals(fields))) { List<String> fieldList = Arrays.asList(fields.split(",")); diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQuery.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQuery.java index d34b5bba4..3bd5140e0 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQuery.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQuery.java @@ -18,7 +18,7 @@ package org.apache.streampipes.dataexplorer.query; import org.apache.streampipes.config.backend.BackendConfig; -import org.apache.streampipes.dataexplorer.utils.DataExplorerUtils; +import org.apache.streampipes.dataexplorer.commons.influx.InfluxClientProvider; import org.apache.streampipes.model.datalake.DataSeries; import org.apache.streampipes.model.datalake.SpQueryResult; @@ -32,7 +32,7 @@ import java.util.List; public abstract class DataExplorerQuery<T> { public T executeQuery() throws RuntimeException { - InfluxDB influxDB = DataExplorerUtils.getInfluxDBClient(); + InfluxDB influxDB = InfluxClientProvider.getInfluxDBClient(); DataExplorerQueryBuilder queryBuilder = DataExplorerQueryBuilder.create(BackendConfig.INSTANCE.getInfluxDatabaseName()); getQuery(queryBuilder); diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/utils/DataExplorerUtils.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/utils/DataExplorerUtils.java index 31061ec66..a0b512565 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/utils/DataExplorerUtils.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/utils/DataExplorerUtils.java @@ -17,16 +17,10 @@ */ package org.apache.streampipes.dataexplorer.utils; -import org.apache.streampipes.config.backend.BackendConfig; import org.apache.streampipes.model.datalake.DataLakeMeasure; import org.apache.streampipes.storage.management.StorageDispatcher; -import okhttp3.OkHttpClient; -import org.influxdb.InfluxDB; -import org.influxdb.InfluxDBFactory; - import java.util.List; -import java.util.concurrent.TimeUnit; public class DataExplorerUtils { @@ -36,13 +30,4 @@ public class DataExplorerUtils { .getDataLakeStorage() .getAllDataLakeMeasures(); } - - public static InfluxDB getInfluxDBClient() { - OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient().newBuilder() - .connectTimeout(120, TimeUnit.SECONDS) - .readTimeout(120, TimeUnit.SECONDS) - .writeTimeout(120, TimeUnit.SECONDS); - - return InfluxDBFactory.connect(BackendConfig.INSTANCE.getInfluxUrl(), okHttpClientBuilder); - } } diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/v4/query/DataExplorerQueryV4.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/v4/query/DataExplorerQueryV4.java index 7d4af4071..05d4f7987 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/v4/query/DataExplorerQueryV4.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/v4/query/DataExplorerQueryV4.java @@ -19,7 +19,7 @@ package org.apache.streampipes.dataexplorer.v4.query; import org.apache.streampipes.config.backend.BackendConfig; -import org.apache.streampipes.dataexplorer.utils.DataExplorerUtils; +import org.apache.streampipes.dataexplorer.commons.influx.InfluxClientProvider; import org.apache.streampipes.dataexplorer.v4.params.DeleteFromStatementParams; import org.apache.streampipes.dataexplorer.v4.params.FillParams; import org.apache.streampipes.dataexplorer.v4.params.GroupingByTagsParams; @@ -88,7 +88,7 @@ public class DataExplorerQueryV4 { } public SpQueryResult executeQuery(boolean ignoreMissingValues) throws RuntimeException { - InfluxDB influxDB = DataExplorerUtils.getInfluxDBClient(); + InfluxDB influxDB = InfluxClientProvider.getInfluxDBClient(); List<QueryElement<?>> queryElements = getQueryElements(); if (this.maximumAmountOfEvents != -1) { @@ -119,7 +119,7 @@ public class DataExplorerQueryV4 { } public SpQueryResult executeQuery(Query query, boolean ignoreMissingValues) { - InfluxDB influxDB = DataExplorerUtils.getInfluxDBClient(); + InfluxDB influxDB = InfluxClientProvider.getInfluxDBClient(); var dataResult = executeQuery(influxDB, query, ignoreMissingValues); influxDB.close(); diff --git a/streampipes-extensions/streampipes-sinks-internal-jvm/src/main/java/org/apache/streampipes/sinks/internal/jvm/datalake/DataLakeSink.java b/streampipes-extensions/streampipes-sinks-internal-jvm/src/main/java/org/apache/streampipes/sinks/internal/jvm/datalake/DataLakeSink.java index 0088f916e..e23dd1879 100644 --- a/streampipes-extensions/streampipes-sinks-internal-jvm/src/main/java/org/apache/streampipes/sinks/internal/jvm/datalake/DataLakeSink.java +++ b/streampipes-extensions/streampipes-sinks-internal-jvm/src/main/java/org/apache/streampipes/sinks/internal/jvm/datalake/DataLakeSink.java @@ -18,6 +18,7 @@ package org.apache.streampipes.sinks.internal.jvm.datalake; +import org.apache.streampipes.commons.environment.Environments; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.dataexplorer.commons.TimeSeriesStore; import org.apache.streampipes.model.DataSinkType; @@ -69,7 +70,7 @@ public class DataLakeSink extends StreamPipesDataSink { DataLakeMeasure measure = new DataLakeMeasure(measureName, timestampField, eventSchema); - this.timeSeriesStore = new TimeSeriesStore(runtimeContext.getConfigStore().getConfig(), + this.timeSeriesStore = new TimeSeriesStore(Environments.getEnvironment(), runtimeContext.getStreamPipesClient(), measure, true);
