This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch load-dashboard-in-single-request in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit cb20a331556949a7f3aa833d7bd4d3a547be25a0 Author: Dominik Riemer <[email protected]> AuthorDate: Tue Aug 5 11:02:18 2025 +0200 chore: Add API to load dashboard resources in a single request --- .../model/dashboard/CompositeDashboardModel.java | 15 +++--- .../model/datalake/DataExplorerWidgetModel.java | 20 ------- .../manager/setup/CouchDbInstallationStep.java | 6 +++ .../setup/tasks/AddDataLakeMeasureViewTask.java | 49 +++++++++++++++++ .../management/DataExplorerResourceManager.java | 31 +++++++++++ .../impl/dashboard/DataLakeDashboardResource.java | 11 +++- .../core/migrations/AvailableMigrations.java | 4 +- .../v0980/AddDataLakeMeasureViewMigration.java | 61 ++++++++++++++++++++++ .../storage/api/IDataLakeMeasureStorage.java | 12 ++--- .../streampipes/storage/api/INoSqlStorage.java | 3 +- .../storage/couchdb/CouchDbStorageManager.java | 8 +-- .../couchdb/impl/DataLakeMeasureStorage.java | 60 +++++++++++++++++++++ .../streampipes/storage/couchdb/utils/Utils.java | 1 + 13 files changed, 239 insertions(+), 42 deletions(-) diff --git a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/CompositeDashboardModel.java similarity index 65% copy from streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java copy to streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/CompositeDashboardModel.java index 38cca4a759..cb06527e42 100644 --- a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java +++ b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/CompositeDashboardModel.java @@ -15,14 +15,15 @@ * limitations under the License. * */ -package org.apache.streampipes.resource.management; -import org.apache.streampipes.model.dashboard.DashboardModel; -import org.apache.streampipes.storage.management.StorageDispatcher; +package org.apache.streampipes.model.dashboard; -public class DataExplorerResourceManager extends AbstractCRUDResourceManager<DashboardModel> { +import org.apache.streampipes.model.datalake.DataExplorerWidgetModel; +import org.apache.streampipes.model.datalake.DataLakeMeasure; - public DataExplorerResourceManager() { - super(StorageDispatcher.INSTANCE.getNoSqlStore().getDataExplorerDashboardStorage(), DashboardModel.class); - } +import java.util.List; + +public record CompositeDashboardModel(DashboardModel dashboard, + List<DataExplorerWidgetModel> widgets, + List<DataLakeMeasure> dataLakeMeasures) { } diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataExplorerWidgetModel.java b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataExplorerWidgetModel.java index 8e302ae163..af5d2739c9 100644 --- a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataExplorerWidgetModel.java +++ b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataExplorerWidgetModel.java @@ -45,10 +45,6 @@ public class DataExplorerWidgetModel extends DashboardEntity { @JsonSerialize(using = CustomMapSerializer.class, as = Map.class) private Map<String, Object> timeSettings; - private String pipelineId; - private String measureName; - - public DataExplorerWidgetModel() { super(); this.baseAppearanceConfig = new HashMap<>(); @@ -97,22 +93,6 @@ public class DataExplorerWidgetModel extends DashboardEntity { this.dataConfig = dataConfig; } - public String getPipelineId() { - return pipelineId; - } - - public void setPipelineId(String pipelineId) { - this.pipelineId = pipelineId; - } - - public String getMeasureName() { - return measureName; - } - - public void setMeasureName(String measureName) { - this.measureName = measureName; - } - public Map<String, Object> getTimeSettings() { return this.timeSettings; } diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java index e1e305e4a9..1e627973c6 100644 --- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java +++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java @@ -19,6 +19,7 @@ package org.apache.streampipes.manager.setup; import org.apache.streampipes.manager.setup.design.UserDesignDocument; +import org.apache.streampipes.manager.setup.tasks.AddDataLakeMeasureViewTask; import org.apache.streampipes.manager.setup.tasks.AddDefaultPipelineTemplatesTask; import org.apache.streampipes.manager.setup.tasks.CreateAssetLinkTypeTask; import org.apache.streampipes.manager.setup.tasks.CreateDefaultAssetTask; @@ -77,6 +78,7 @@ public class CouchDbInstallationStep extends InstallationStep { addUserView(); addNotificationView(); addPipelineView(); + addDataLakeMeasureView(); } private void addNotificationView() { @@ -168,4 +170,8 @@ public class CouchDbInstallationStep extends InstallationStep { logFailure(PREPARING_USERS_TEXT, e); } } + + private void addDataLakeMeasureView() { + new AddDataLakeMeasureViewTask().execute(); + } } diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/tasks/AddDataLakeMeasureViewTask.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/tasks/AddDataLakeMeasureViewTask.java new file mode 100644 index 0000000000..4ce055c6e7 --- /dev/null +++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/tasks/AddDataLakeMeasureViewTask.java @@ -0,0 +1,49 @@ +/* + * 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.manager.setup.tasks; + +import org.apache.streampipes.storage.couchdb.utils.Utils; + +import org.lightcouch.DesignDocument; + +import java.util.HashMap; +import java.util.Map; + +import static org.apache.streampipes.manager.setup.design.DesignDocumentUtils.prepareDocument; + +public class AddDataLakeMeasureViewTask implements InstallationTask { + + public static final String MEASUREMENT_BY_NAME_VIEW = "_design/measurement"; + + public static final String VIEW_NAME = "by-measure-name"; + public static final String MAP_FUNCTION = "function (doc) { if (doc.measureName) { emit(doc.measureName, doc); } }"; + + @Override + public void execute() { + DesignDocument dataLakeDoc = prepareDocument(MEASUREMENT_BY_NAME_VIEW); + Map<String, DesignDocument.MapReduce> dataLakeMeasureViews = new HashMap<>(); + + DesignDocument.MapReduce byNameFn = new DesignDocument.MapReduce(); + byNameFn.setMap(MAP_FUNCTION); + + dataLakeMeasureViews.put(VIEW_NAME, byNameFn); + dataLakeDoc.setViews(dataLakeMeasureViews); + Utils.getCouchDbGsonClient(Utils.DATA_LAKE_DB_NAME).design().synchronizeWithDb(dataLakeDoc); + } +} diff --git a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java index 38cca4a759..06edb30d5c 100644 --- a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java +++ b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java @@ -17,12 +17,43 @@ */ package org.apache.streampipes.resource.management; +import org.apache.streampipes.model.dashboard.CompositeDashboardModel; import org.apache.streampipes.model.dashboard.DashboardModel; +import org.apache.streampipes.model.datalake.DataExplorerWidgetModel; +import org.apache.streampipes.storage.api.CRUDStorage; +import org.apache.streampipes.storage.api.IDataLakeMeasureStorage; import org.apache.streampipes.storage.management.StorageDispatcher; +import java.util.List; +import java.util.Map; + public class DataExplorerResourceManager extends AbstractCRUDResourceManager<DashboardModel> { + private final CRUDStorage<DataExplorerWidgetModel> widgetStorage; + private final IDataLakeMeasureStorage dataLakeMeasureStorage; + public DataExplorerResourceManager() { super(StorageDispatcher.INSTANCE.getNoSqlStore().getDataExplorerDashboardStorage(), DashboardModel.class); + this.widgetStorage = StorageDispatcher.INSTANCE.getNoSqlStore().getDataExplorerWidgetStorage(); + this.dataLakeMeasureStorage = StorageDispatcher.INSTANCE.getNoSqlStore().getDataLakeStorage(); + } + + public CompositeDashboardModel getCompositeDashboard(String dashboardId) { + var dashboard = db.getElementById(dashboardId); + var widgets = dashboard.getWidgets().stream().map(w -> widgetStorage.getElementById(w.getId())).toList(); + var dataLakeMeasures = getMeasureNames(widgets).stream().map(dataLakeMeasureStorage::getByMeasureName).toList(); + + return new CompositeDashboardModel(dashboard, widgets, dataLakeMeasures); + } + + private List<String> getMeasureNames(List<DataExplorerWidgetModel> widgets) { + return widgets.stream().map(DataExplorerWidgetModel::getDataConfig) + .map(dataConfig -> (List<?>) ((Map<?, ?>) dataConfig).get("sourceConfigs")) + .filter(Map.class::isInstance) + .map(Map.class::cast) + .map(cfg -> cfg.get("measureName")) + .filter(String.class::isInstance) + .map(String.class::cast) + .toList(); } } diff --git a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DataLakeDashboardResource.java b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DataLakeDashboardResource.java index 75eaded908..38f6f72177 100644 --- a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DataLakeDashboardResource.java +++ b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DataLakeDashboardResource.java @@ -20,8 +20,9 @@ package org.apache.streampipes.rest.impl.dashboard; import org.apache.streampipes.model.client.user.DefaultPrivilege; +import org.apache.streampipes.model.dashboard.CompositeDashboardModel; import org.apache.streampipes.model.dashboard.DashboardModel; -import org.apache.streampipes.resource.management.AbstractCRUDResourceManager; +import org.apache.streampipes.resource.management.DataExplorerResourceManager; import org.apache.streampipes.rest.core.base.impl.AbstractAuthGuardedRestResource; import org.springframework.http.MediaType; @@ -56,6 +57,12 @@ public class DataLakeDashboardResource extends AbstractAuthGuardedRestResource { return getResourceManager().find(dashboardId); } + @GetMapping(path = "/{dashboardId}/full", produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("this.hasReadAuthority() and hasPermission(#dashboardId, 'READ')") + public CompositeDashboardModel getCompositeDashboardModel(@PathVariable("dashboardId") String dashboardId) { + return getResourceManager().getCompositeDashboard(dashboardId); + } + @PutMapping(path = "/{dashboardId}", produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("this.hasWriteAuthority() and hasPermission(#dashboardModel.couchDbId, 'WRITE')") public ResponseEntity<DashboardModel> modifyDashboard(@RequestBody DashboardModel dashboardModel) { @@ -77,7 +84,7 @@ public class DataLakeDashboardResource extends AbstractAuthGuardedRestResource { return ok(); } - private AbstractCRUDResourceManager<DashboardModel> getResourceManager() { + private DataExplorerResourceManager getResourceManager() { return getSpResourceManager().manageDataExplorer(); } diff --git a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java index e5e79b786c..b547059f59 100644 --- a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java +++ b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java @@ -26,6 +26,7 @@ import org.apache.streampipes.service.core.migrations.v090.UpdateUsernameViewMig import org.apache.streampipes.service.core.migrations.v093.AdapterMigration; import org.apache.streampipes.service.core.migrations.v093.StoreEmailTemplatesMigration; import org.apache.streampipes.service.core.migrations.v095.MergeFilenamesAndRenameDuplicatesMigration; +import org.apache.streampipes.service.core.migrations.v0980.AddDataLakeMeasureViewMigration; import org.apache.streampipes.service.core.migrations.v0980.ModifyAssetLinkTypesMigration; import org.apache.streampipes.service.core.migrations.v0980.ModifyAssetLinksMigration; import org.apache.streampipes.service.core.migrations.v970.AddDataLakePipelineTemplateMigration; @@ -56,7 +57,8 @@ public class AvailableMigrations { new AddRolesToUserDbMigration(), new AddDataLakePipelineTemplateMigration(), new ModifyAssetLinksMigration(), - new ModifyAssetLinkTypesMigration() + new ModifyAssetLinkTypesMigration(), + new AddDataLakeMeasureViewMigration() ); } } diff --git a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/AddDataLakeMeasureViewMigration.java b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/AddDataLakeMeasureViewMigration.java new file mode 100644 index 0000000000..640f132c69 --- /dev/null +++ b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/AddDataLakeMeasureViewMigration.java @@ -0,0 +1,61 @@ +/* + * 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.service.core.migrations.v0980; + +import org.apache.streampipes.manager.setup.tasks.AddDataLakeMeasureViewTask; +import org.apache.streampipes.service.core.migrations.Migration; +import org.apache.streampipes.storage.couchdb.utils.Utils; + +import org.lightcouch.NoDocumentException; + +import java.io.IOException; + +public class AddDataLakeMeasureViewMigration implements Migration { + + @Override + public boolean shouldExecute() { + try { + var designDoc = Utils + .getCouchDbGsonClient(Utils.DATA_LAKE_DB_NAME) + .design() + .getFromDb(AddDataLakeMeasureViewTask.MEASUREMENT_BY_NAME_VIEW); + var viewKey = AddDataLakeMeasureViewTask.VIEW_NAME; + var viewMapFunction = AddDataLakeMeasureViewTask.MAP_FUNCTION; + var views = designDoc.getViews(); + + if (views.containsKey(viewKey)) { + return !(views.get(viewKey).getMap().equals(viewMapFunction)); + } else { + return true; + } + } catch (NoDocumentException e) { + return true; + } + } + + @Override + public void executeMigration() throws IOException { + new AddDataLakeMeasureViewTask().execute(); + } + + @Override + public String getDescription() { + return "Creating view for data lake measure database"; + } +} diff --git a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IDataLakeMeasureStorage.java similarity index 65% copy from streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java copy to streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IDataLakeMeasureStorage.java index 38cca4a759..cab2575714 100644 --- a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataExplorerResourceManager.java +++ b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IDataLakeMeasureStorage.java @@ -15,14 +15,12 @@ * limitations under the License. * */ -package org.apache.streampipes.resource.management; -import org.apache.streampipes.model.dashboard.DashboardModel; -import org.apache.streampipes.storage.management.StorageDispatcher; +package org.apache.streampipes.storage.api; -public class DataExplorerResourceManager extends AbstractCRUDResourceManager<DashboardModel> { +import org.apache.streampipes.model.datalake.DataLakeMeasure; - public DataExplorerResourceManager() { - super(StorageDispatcher.INSTANCE.getNoSqlStore().getDataExplorerDashboardStorage(), DashboardModel.class); - } +public interface IDataLakeMeasureStorage extends CRUDStorage<DataLakeMeasure> { + + DataLakeMeasure getByMeasureName(String measureName); } diff --git a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java index 742adf1409..ec330a4a7e 100644 --- a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java +++ b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java @@ -24,7 +24,6 @@ import org.apache.streampipes.model.client.user.Role; import org.apache.streampipes.model.client.user.UserActivationToken; import org.apache.streampipes.model.dashboard.DashboardModel; import org.apache.streampipes.model.datalake.DataExplorerWidgetModel; -import org.apache.streampipes.model.datalake.DataLakeMeasure; import org.apache.streampipes.model.extensions.configuration.SpServiceConfiguration; import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration; import org.apache.streampipes.model.file.FileMetadata; @@ -48,7 +47,7 @@ public interface INoSqlStorage { INotificationStorage getNotificationStorageApi(); - CRUDStorage<DataLakeMeasure> getDataLakeStorage(); + IDataLakeMeasureStorage getDataLakeStorage(); CRUDStorage<FileMetadata> getFileMetadataStorage(); diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java index c6edb2cfcf..ea54cf6e0a 100644 --- a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java +++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java @@ -31,6 +31,7 @@ import org.apache.streampipes.model.file.FileMetadata; import org.apache.streampipes.model.template.CompactPipelineTemplate; import org.apache.streampipes.storage.api.CRUDStorage; import org.apache.streampipes.storage.api.IAdapterStorage; +import org.apache.streampipes.storage.api.IDataLakeMeasureStorage; import org.apache.streampipes.storage.api.IDataProcessorStorage; import org.apache.streampipes.storage.api.IDataSinkStorage; import org.apache.streampipes.storage.api.IDataStreamStorage; @@ -48,6 +49,7 @@ import org.apache.streampipes.storage.api.IUserStorage; import org.apache.streampipes.storage.couchdb.impl.AdapterDescriptionStorageImpl; import org.apache.streampipes.storage.couchdb.impl.AdapterInstanceStorageImpl; import org.apache.streampipes.storage.couchdb.impl.CoreConfigurationStorageImpl; +import org.apache.streampipes.storage.couchdb.impl.DataLakeMeasureStorage; import org.apache.streampipes.storage.couchdb.impl.DataProcessorStorageImpl; import org.apache.streampipes.storage.couchdb.impl.DataSinkStorageImpl; import org.apache.streampipes.storage.couchdb.impl.DataStreamStorageImpl; @@ -115,9 +117,9 @@ public enum CouchDbStorageManager implements INoSqlStorage { } @Override - public CRUDStorage<DataLakeMeasure> getDataLakeStorage() { - return new DefaultCrudStorage<>( - () -> Utils.getCouchDbGsonClient("data-lake"), + public IDataLakeMeasureStorage getDataLakeStorage() { + return new DataLakeMeasureStorage( + () -> Utils.getCouchDbGsonClient(Utils.DATA_LAKE_DB_NAME), DataLakeMeasure.class ); } diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/DataLakeMeasureStorage.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/DataLakeMeasureStorage.java new file mode 100644 index 0000000000..38dec9498b --- /dev/null +++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/DataLakeMeasureStorage.java @@ -0,0 +1,60 @@ +/* + * 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.storage.couchdb.impl; + +import org.apache.streampipes.model.datalake.DataLakeMeasure; +import org.apache.streampipes.storage.api.IDataLakeMeasureStorage; + +import org.lightcouch.CouchDbClient; + +import java.util.List; +import java.util.function.Supplier; + +public class DataLakeMeasureStorage extends DefaultCrudStorage<DataLakeMeasure> implements IDataLakeMeasureStorage { + + public static final String MEASUREMENT_BY_NAME_VIEW = "measurement/by-measure-name"; + + public DataLakeMeasureStorage(Supplier<CouchDbClient> couchDbClientSupplier, Class<DataLakeMeasure> clazz) { + super(couchDbClientSupplier, clazz); + } + + @Override + public DataLakeMeasure getByMeasureName(String measureName) { + List<DataLakeMeasure> results = couchDbClientSupplier.get() + .view(MEASUREMENT_BY_NAME_VIEW) + .key(measureName) + .includeDocs(true) + .limit(1) + .query(DataLakeMeasure.class); + + if (!results.isEmpty()) { + return results.get(0); + } else { + return null; + } + } + + @Override + public List<DataLakeMeasure> findAll() { + return couchDbClientSupplier.get() + .view(MEASUREMENT_BY_NAME_VIEW) + .includeDocs(true) + .query(DataLakeMeasure.class); + } +} diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java index b6f9bf20ba..b98d8bafef 100644 --- a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java +++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java @@ -33,6 +33,7 @@ import org.lightcouch.CouchDbProperties; public class Utils { public static final String USER_DB_NAME = "users"; + public static final String DATA_LAKE_DB_NAME = "data-lake"; public static CouchDbClient getCouchDbDataProcessorDescriptionClient() { return getCouchDbGsonClient("data-processor");
