This is an automated email from the ASF dual-hosted git repository.

dominikriemer pushed a commit to branch add-resource-dtos
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit b2cf14e6a9ed2401272f7d78464ed37fdcb3ca4c
Author: Dominik Riemer <[email protected]>
AuthorDate: Fri Jun 12 23:09:20 2026 +0200

    Add dataset summary dto
---
 .../model/datalake/DatasetSummaryDto.java          |  24 ++--
 .../management/DataLakeMeasureResourceManager.java | 158 +++++++++++++++++++++
 .../resource/management/SpResourceManager.java     |   4 +
 .../impl/datalake/DataLakeMeasureResource.java     |  13 ++
 .../src/lib/apis/datalake-rest.service.ts          |  10 ++
 .../lib/model/resource/resource-summary.model.ts   |  11 +-
 .../datalake-configuration-entry.ts                |   8 +-
 .../datalake-configuration.component.html          |  40 ++----
 .../datalake-configuration.component.ts            | 144 +++++++++----------
 9 files changed, 294 insertions(+), 118 deletions(-)

diff --git 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration-entry.ts
 
b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DatasetSummaryDto.java
similarity index 63%
copy from 
ui/src/app/dataset/components/datalake-configuration/datalake-configuration-entry.ts
copy to 
streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DatasetSummaryDto.java
index 48bdda2273..565d25fdfb 100644
--- 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration-entry.ts
+++ 
b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DatasetSummaryDto.java
@@ -1,5 +1,3 @@
-import { RetentionTimeConfig } from '@streampipes/platform-services';
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -17,16 +15,16 @@ import { RetentionTimeConfig } from 
'@streampipes/platform-services';
  * limitations under the License.
  *
  */
-export class DataLakeConfigurationEntry {
-    public name: string;
-    public pipelines: string[] = [];
-    public eventsTotal = 0;
-    public eventsLatest = 0;
-    public eventsTotalLoading = false;
-    public eventsLatestLoading = false;
-    public remove = true;
-    public elementId: string;
-    public retention: RetentionTimeConfig;
 
-    constructor() {}
+package org.apache.streampipes.model.datalake;
+
+import java.util.List;
+
+public record DatasetSummaryDto(String elementId,
+                                String measureName,
+                                boolean retentionConfigured,
+                                String lastExport,
+                                Boolean lastRetentionStatus,
+                                List<String> pipelines,
+                                boolean removable) {
 }
diff --git 
a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataLakeMeasureResourceManager.java
 
b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataLakeMeasureResourceManager.java
new file mode 100644
index 0000000000..a80c7280e1
--- /dev/null
+++ 
b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/DataLakeMeasureResourceManager.java
@@ -0,0 +1,158 @@
+/*
+ * 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.resource.management;
+
+import org.apache.streampipes.model.datalake.DataLakeMeasure;
+import org.apache.streampipes.model.datalake.DatasetSummaryDto;
+import org.apache.streampipes.model.datalake.RetentionTimeConfig;
+import org.apache.streampipes.model.graph.DataSinkInvocation;
+import org.apache.streampipes.model.pipeline.Pipeline;
+import org.apache.streampipes.model.resource.ResourceSummaryDto;
+import org.apache.streampipes.model.staticproperty.FreeTextStaticProperty;
+import 
org.apache.streampipes.resource.management.permission.SpPermissionEvaluator;
+import org.apache.streampipes.storage.api.explorer.IDataLakeMeasureStorage;
+import org.apache.streampipes.storage.api.pipeline.IPipelineStorage;
+import org.apache.streampipes.storage.management.StorageDispatcher;
+
+import org.springframework.security.core.Authentication;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+public class DataLakeMeasureResourceManager extends 
AbstractResourceManager<IDataLakeMeasureStorage> {
+
+  private static final String DATA_LAKE_APP_ID = 
"org.apache.streampipes.sinks.internal.jvm.datalake";
+  private static final String MEASURE_FIELD_INTERNAL_NAME = "db_measurement";
+  private static final List<String> FORBIDDEN_MEASURE_NAME_CHARS = 
List.of("/", "?", "=", "\"");
+
+  private final IPipelineStorage pipelineStorage;
+  private final SpPermissionEvaluator permissionEvaluator;
+
+  public DataLakeMeasureResourceManager() {
+    super(StorageDispatcher.INSTANCE.getNoSqlStore().getDataLakeStorage());
+    this.pipelineStorage = 
StorageDispatcher.INSTANCE.getNoSqlStore().getPipelineStorageAPI();
+    this.permissionEvaluator = new SpPermissionEvaluator();
+  }
+
+  public ResourceSummaryDto<DatasetSummaryDto> getSummary(Authentication auth) 
{
+    var pipelinesByMeasure = getVisiblePipelinesByMeasure(auth);
+
+    var datasets = db.findAll().stream()
+        .filter(measure -> canReadMeasure(auth, measure))
+        .map(measure -> toSummary(measure, pipelinesByMeasure))
+        .toList();
+
+    return new ResourceSummaryDto<>(datasets, datasets.size());
+  }
+
+  private DatasetSummaryDto toSummary(
+      DataLakeMeasure measure,
+      Map<String, List<PipelineInfo>> pipelinesByMeasure
+  ) {
+    var pipelineInfos = 
pipelinesByMeasure.getOrDefault(measure.getMeasureName(), List.of());
+    var pipelines = pipelineInfos.stream().map(PipelineInfo::name).toList();
+    var removable = pipelineInfos.stream().noneMatch(PipelineInfo::running);
+    var retentionConfigured = hasRetention(measure.getRetentionTime());
+    var lastExport = getLastExport(measure.getRetentionTime());
+    var lastRetentionStatus = 
getLastRetentionStatus(measure.getRetentionTime());
+
+    return new DatasetSummaryDto(
+        measure.getElementId(),
+        measure.getMeasureName(),
+        retentionConfigured,
+        lastExport,
+        lastRetentionStatus,
+        pipelines,
+        removable
+    );
+  }
+
+  private Map<String, List<PipelineInfo>> 
getVisiblePipelinesByMeasure(Authentication auth) {
+    return pipelineStorage.findAll().stream()
+        .filter(pipeline -> permissionEvaluator.hasPermission(auth, 
pipeline.getPipelineId(), "READ"))
+        .flatMap(pipeline -> extractSinks(pipeline).stream()
+            .map(this::getMeasureName)
+            .flatMap(Optional::stream)
+            .map(measureName -> new PipelineMeasure(
+                measureName,
+                new PipelineInfo(pipeline.getName(), pipeline.isRunning())
+            )))
+        .collect(Collectors.groupingBy(PipelineMeasure::measureName,
+            Collectors.mapping(PipelineMeasure::pipelineInfo, 
Collectors.toList())));
+  }
+
+  private boolean canReadMeasure(Authentication auth, DataLakeMeasure measure) 
{
+    return measure != null
+        && measure.getElementId() != null
+        && permissionEvaluator.hasPermission(auth, measure.getElementId(), 
"READ");
+  }
+
+  private List<DataSinkInvocation> extractSinks(Pipeline pipeline) {
+    return pipeline.getActions().stream()
+        .filter(sink -> DATA_LAKE_APP_ID.equals(sink.getAppId()))
+        .toList();
+  }
+
+  private Optional<String> getMeasureName(DataSinkInvocation sink) {
+    return sink.getStaticProperties().stream()
+        .filter(sp -> MEASURE_FIELD_INTERNAL_NAME.equals(sp.getInternalName()))
+        .filter(FreeTextStaticProperty.class::isInstance)
+        .map(FreeTextStaticProperty.class::cast)
+        .map(FreeTextStaticProperty::getValue)
+        .findFirst()
+        .map(this::sanitizeMeasureName);
+  }
+
+  private String sanitizeMeasureName(String measureName) {
+    return FORBIDDEN_MEASURE_NAME_CHARS.stream()
+        .reduce(measureName, (currentName, forbiddenChar) -> 
currentName.replace(forbiddenChar, "_"));
+  }
+
+  private boolean hasRetention(RetentionTimeConfig retentionTime) {
+    return retentionTime != null && retentionTime.getDataRetentionConfig() != 
null;
+  }
+
+  private Boolean getLastRetentionStatus(RetentionTimeConfig retentionTime) {
+    if (retentionTime == null
+        || retentionTime.getRetentionExportConfig() == null
+        || retentionTime.getRetentionExportConfig().getRetentionLog() == null
+        || 
retentionTime.getRetentionExportConfig().getRetentionLog().isEmpty()) {
+      return null;
+    }
+
+    var retentionLog = 
retentionTime.getRetentionExportConfig().getRetentionLog();
+    return retentionLog.get(retentionLog.size() - 1).getStatus();
+  }
+
+  private String getLastExport(RetentionTimeConfig retentionTime) {
+    if (retentionTime == null || retentionTime.getRetentionExportConfig() == 
null) {
+      return null;
+    }
+
+    return retentionTime.getRetentionExportConfig().getLastExport();
+  }
+
+  private record PipelineInfo(String name, boolean running) {
+  }
+
+  private record PipelineMeasure(String measureName, PipelineInfo 
pipelineInfo) {
+  }
+}
diff --git 
a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/SpResourceManager.java
 
b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/SpResourceManager.java
index c985766ccb..0eaf2f7947 100644
--- 
a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/SpResourceManager.java
+++ 
b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/SpResourceManager.java
@@ -50,6 +50,10 @@ public class SpResourceManager {
     return new DataStreamResourceManager();
   }
 
+  public DataLakeMeasureResourceManager manageDataLakeMeasures() {
+    return new DataLakeMeasureResourceManager();
+  }
+
   public PipelineResourceManager managePipelines() {
     return new PipelineResourceManager();
   }
diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/datalake/DataLakeMeasureResource.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/datalake/DataLakeMeasureResource.java
index 28e12fc92e..5f94ed50c3 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/datalake/DataLakeMeasureResource.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/datalake/DataLakeMeasureResource.java
@@ -20,7 +20,10 @@ package org.apache.streampipes.rest.impl.datalake;
 
 import org.apache.streampipes.dataexplorer.management.DataExplorerDispatcher;
 import org.apache.streampipes.model.datalake.DataLakeMeasure;
+import org.apache.streampipes.model.datalake.DatasetSummaryDto;
 import org.apache.streampipes.model.monitoring.SpLogMessage;
+import org.apache.streampipes.model.resource.ResourceSummaryDto;
+import 
org.apache.streampipes.resource.management.DataLakeMeasureResourceManager;
 
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -50,6 +53,12 @@ public class DataLakeMeasureResource extends 
AbstractDataLakeResource {
     super();
   }
 
+  @GetMapping(path = "/summary", produces = MediaType.APPLICATION_JSON_VALUE)
+  @PreAuthorize("this.hasReadAuthority()")
+  public ResourceSummaryDto<DatasetSummaryDto> getDatasetSummary() {
+    return getResourceManager().getSummary(getAuthentication());
+  }
+
   @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = 
MediaType.APPLICATION_JSON_VALUE)
   @PreAuthorize("this.hasWriteAuthority()")
   public ResponseEntity<?> addDataLake(@RequestBody DataLakeMeasure 
dataLakeMeasure) {
@@ -139,4 +148,8 @@ public class DataLakeMeasureResource extends 
AbstractDataLakeResource {
     }
   }
 
+  private DataLakeMeasureResourceManager getResourceManager() {
+    return getSpResourceManager().manageDataLakeMeasures();
+  }
+
 }
diff --git 
a/ui/projects/streampipes/platform-services/src/lib/apis/datalake-rest.service.ts
 
b/ui/projects/streampipes/platform-services/src/lib/apis/datalake-rest.service.ts
index 3011e492b0..fb2ccafeff 100644
--- 
a/ui/projects/streampipes/platform-services/src/lib/apis/datalake-rest.service.ts
+++ 
b/ui/projects/streampipes/platform-services/src/lib/apis/datalake-rest.service.ts
@@ -29,6 +29,10 @@ import { DataLakeMeasure, SpQueryResult } from 
'../model/gen/streampipes-model';
 import { map } from 'rxjs/operators';
 import { DatalakeQueryParameters } from 
'../model/datalake/DatalakeQueryParameters';
 import { NGX_LOADING_BAR_IGNORED } from '@ngx-loading-bar/http-client';
+import {
+    DatasetSummaryDto,
+    ResourceSummaryDto,
+} from '../model/resource/resource-summary.model';
 import {
     CsvImportPreviewRequest,
     CsvImportPreviewResult,
@@ -85,6 +89,12 @@ export class DatalakeRestService {
         );
     }
 
+    getMeasurementSummary(): Observable<ResourceSummaryDto<DatasetSummaryDto>> 
{
+        return this.http.get<ResourceSummaryDto<DatasetSummaryDto>>(
+            `${this.dataLakeMeasureUrl}/summary`,
+        );
+    }
+
     getMeasurement(id: string): Observable<DataLakeMeasure> {
         return this.http
             .get(`${this.dataLakeMeasureUrl}/${id}`)
diff --git 
a/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts
 
b/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts
index 4e3b8b3aef..067d05ea54 100644
--- 
a/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts
+++ 
b/ui/projects/streampipes/platform-services/src/lib/model/resource/resource-summary.model.ts
@@ -18,7 +18,6 @@
 
 import { PipelineHealthStatus } from '../gen/streampipes-model';
 import { DataExplorerWidgetHealthStatus } from '../gen/streampipes-model';
-
 export interface ResourceSummaryDto<T> {
     totalCount: number;
     resources: T[];
@@ -44,6 +43,16 @@ export interface AdapterSummaryDto {
     icon: string;
 }
 
+export interface DatasetSummaryDto {
+    elementId: string;
+    measureName: string;
+    retentionConfigured: boolean;
+    lastExport: string | null;
+    lastRetentionStatus: boolean | null;
+    pipelines: string[];
+    removable: boolean;
+}
+
 export interface PipelineSummaryDto {
     elementId: string;
     name: string;
diff --git 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration-entry.ts
 
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration-entry.ts
index 48bdda2273..a6b3aadef5 100644
--- 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration-entry.ts
+++ 
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration-entry.ts
@@ -1,5 +1,3 @@
-import { RetentionTimeConfig } from '@streampipes/platform-services';
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -17,8 +15,10 @@ import { RetentionTimeConfig } from 
'@streampipes/platform-services';
  * limitations under the License.
  *
  */
+
 export class DataLakeConfigurationEntry {
     public name: string;
+    public measureName: string;
     public pipelines: string[] = [];
     public eventsTotal = 0;
     public eventsLatest = 0;
@@ -26,7 +26,9 @@ export class DataLakeConfigurationEntry {
     public eventsLatestLoading = false;
     public remove = true;
     public elementId: string;
-    public retention: RetentionTimeConfig;
+    public retentionConfigured = false;
+    public lastExport: string | null = null;
+    public lastRetentionStatus: boolean | null = null;
 
     constructor() {}
 }
diff --git 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html
 
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html
index 7f0a7a3db5..198b41c9f0 100644
--- 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html
+++ 
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.html
@@ -199,9 +199,9 @@
                                         <i
                                             class="material-icons"
                                             [ngStyle]="{
-                                                color: 
configurationEntry?.retention
+                                                color: 
configurationEntry.retentionConfigured
                                                     ? 'var(--color-success)'
-                                                    : 'var(--color-neutral',
+                                                    : 'var(--color-neutral)',
                                             }"
                                             >history</i
                                         >
@@ -226,19 +226,15 @@
                                 fxLayout="row"
                                 fxLayoutAlign="start center"
                             >
-                                @if (configurationEntry?.retention) {
+                                @if (configurationEntry.retentionConfigured) {
                                     <button
                                         color="accent"
                                         mat-icon-button
                                         [matTooltip]="
                                             ('Open Retention Log' | translate) 
+
-                                            (configurationEntry?.retention
-                                                ?.retentionExportConfig
-                                                ?.lastExport
+                                            (configurationEntry.lastExport
                                                 ? ' • ' +
-                                                  (configurationEntry.retention
-                                                      .retentionExportConfig
-                                                      .lastExport
+                                                  
(configurationEntry.lastExport
                                                       | date
                                                           : 'yyyy-MM-dd 
HH:mm:ss')
                                                 : '')
@@ -247,9 +243,7 @@
                                         matTooltipPosition="above"
                                         (click)="
                                             openRetentionLog(
-                                                configurationEntry?.retention
-                                                    .retentionExportConfig
-                                                    .retentionLog
+                                                configurationEntry.elementId
                                             )
                                         "
                                     >
@@ -257,22 +251,12 @@
                                             class="material-icons"
                                             [ngStyle]="{
                                                 color:
-                                                    configurationEntry
-                                                        ?.retention
-                                                        ?.retentionExportConfig
-                                                        ?.retentionLog
-                                                        ?.length &&
-                                                    
configurationEntry.retention
-                                                        .retentionExportConfig
-                                                        .retentionLog[
-                                                        configurationEntry
-                                                            .retention
-                                                            
.retentionExportConfig
-                                                            .retentionLog
-                                                            .length - 1
-                                                    ].status
-                                                        ? 'green'
-                                                        : 'red',
+                                                    
configurationEntry.lastRetentionStatus ===
+                                                    null
+                                                        ? 
'var(--color-neutral)'
+                                                        : 
configurationEntry.lastRetentionStatus
+                                                          ? 'green'
+                                                          : 'red',
                                             }"
                                             >list_alt</i
                                         >
diff --git 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
 
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
index 2de04b35a0..fcfc0472aa 100644
--- 
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
+++ 
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.ts
@@ -39,12 +39,11 @@ import {
 } from '@angular/material/table';
 import { DataLakeConfigurationEntry } from './datalake-configuration-entry';
 import {
-    ChartService,
-    DataLakeMeasure,
     DatalakeRestService,
+    DataLakeMeasure,
+    DatasetSummaryDto,
     ExportProviderService,
     ExportProviderSettings,
-    RetentionLog,
 } from '@streampipes/platform-services';
 import { MatPaginator } from '@angular/material/paginator';
 import { MatSort, MatSortHeader } from '@angular/material/sort';
@@ -143,7 +142,6 @@ export class DatalakeConfigurationComponent
     spTable!: SpTableComponent<DataLakeConfigurationEntry>;
 
     private datalakeRestService = inject(DatalakeRestService);
-    private dataViewDataExplorerService = inject(ChartService);
     private dialogService = inject(DialogService);
     private breadcrumbService = inject(SpBreadcrumbService);
     private exportProviderRestService = inject(ExportProviderService);
@@ -227,7 +225,7 @@ export class DatalakeConfigurationComponent
         this.assetFilter$?.unsubscribe();
     }
 
-    loadAvailableExportProvider() {
+    loadAvailableExportProvider(): void {
         this.availableExportProvider = [];
         this.exportProviderRestService
             .getAllExportProviders()
@@ -237,50 +235,23 @@ export class DatalakeConfigurationComponent
             });
     }
 
-    loadAvailableMeasurements() {
+    loadAvailableMeasurements(): void {
         this.availableMeasurements = [];
-        // get all available measurements that are stored in the data lake
         this.datalakeRestService
-            .getAllMeasurementSeries()
-            .subscribe(allMeasurements => {
-                // get all measurements that are still used in pipelines
-                this.dataViewDataExplorerService
-                    .getAllPersistedDataStreams()
-                    .subscribe(inUseMeasurements => {
-                        allMeasurements.forEach(measurement => {
-                            const entry = new DataLakeConfigurationEntry();
-                            entry.elementId = measurement.elementId;
-                            entry.name = measurement.measureName;
-                            entry.eventsLatest = -1;
-                            entry.eventsTotal = -1;
-                            if (measurement?.retentionTime != null) {
-                                entry.retention = measurement.retentionTime;
-                            }
-                            inUseMeasurements.forEach(inUseMeasurement => {
-                                if (
-                                    inUseMeasurement.measureName ===
-                                    measurement.measureName
-                                ) {
-                                    entry.pipelines.push(
-                                        inUseMeasurement.pipelineName,
-                                    );
-                                    if (inUseMeasurement.pipelineIsRunning) {
-                                        entry.remove = false;
-                                    }
-                                }
-                            });
-                            this.availableMeasurements.push(entry);
-                        });
-
-                        this.availableMeasurements.sort((a, b) =>
-                            a.name.localeCompare(b.name),
-                        );
-                        this.applyMeasurementFilters(this.currentFilterIds);
-                    });
+            .getMeasurementSummary()
+            .subscribe(datasetSummary => {
+                this.availableMeasurements = datasetSummary.resources.map(
+                    measurement => this.toConfigurationEntry(measurement),
+                );
+
+                this.availableMeasurements.sort((a, b) =>
+                    a.name.localeCompare(b.name),
+                );
+                this.applyMeasurementFilters(this.currentFilterIds);
             });
     }
 
-    applyMeasurementFilters(elementIds: Set<string>) {
+    applyMeasurementFilters(elementIds: Set<string>): void {
         this.currentFilterIds = elementIds;
         if (elementIds === undefined) {
             this.filteredMeasurements = [];
@@ -317,7 +288,7 @@ export class DatalakeConfigurationComponent
         }
     }
 
-    createExportProvider(provider: ExportProviderSettings | null) {
+    createExportProvider(provider: ExportProviderSettings | null): void {
         const dialogRef: DialogRef<ExportProviderComponent> =
             this.dialogService.open(ExportProviderComponent, {
                 panelType: PanelType.SLIDE_IN_PANEL,
@@ -333,7 +304,7 @@ export class DatalakeConfigurationComponent
         });
     }
 
-    cleanDatalakeIndex(measurementIndex: string) {
+    cleanDatalakeIndex(measurementIndex: string): void {
         const dialogRef: DialogRef<DeleteDatalakeIndexComponent> =
             this.dialogService.open(DeleteDatalakeIndexComponent, {
                 panelType: PanelType.STANDARD_PANEL,
@@ -352,7 +323,7 @@ export class DatalakeConfigurationComponent
         });
     }
 
-    deleteDatalakeIndex(measurementIndex: string) {
+    deleteDatalakeIndex(measurementIndex: string): void {
         const dialogRef: DialogRef<DeleteDatalakeIndexComponent> =
             this.dialogService.open(DeleteDatalakeIndexComponent, {
                 panelType: PanelType.STANDARD_PANEL,
@@ -371,7 +342,7 @@ export class DatalakeConfigurationComponent
         });
     }
 
-    deleteExportProvider(providerId: string) {
+    deleteExportProvider(providerId: string): void {
         const dialogRef: DialogRef<DeleteExportProviderComponent> =
             this.dialogService.open(DeleteExportProviderComponent, {
                 panelType: PanelType.STANDARD_PANEL,
@@ -388,7 +359,7 @@ export class DatalakeConfigurationComponent
             }
         });
     }
-    testExportProvider(providerId: string) {
+    testExportProvider(providerId: string): void {
         const dialogRef: DialogRef<ExportProviderConnectionTestComponent> =
             this.dialogService.open(ExportProviderConnectionTestComponent, {
                 panelType: PanelType.STANDARD_PANEL,
@@ -408,7 +379,7 @@ export class DatalakeConfigurationComponent
         });
     }
 
-    openDownloadDialog(measurementName: string) {
+    openDownloadDialog(measurementName: string): void {
         this.dialogService.open(DataDownloadDialogComponent, {
             panelType: PanelType.SLIDE_IN_PANEL,
             title: this.translateService.instant('Download data'),
@@ -421,7 +392,7 @@ export class DatalakeConfigurationComponent
         });
     }
 
-    openRetentionDialog(measurementId: string) {
+    openRetentionDialog(measurementId: string): void {
         const dialogRef: DialogRef<DataRetentionDialogComponent> =
             this.dialogService.open(DataRetentionDialogComponent, {
                 panelType: PanelType.SLIDE_IN_PANEL,
@@ -444,37 +415,25 @@ export class DatalakeConfigurationComponent
         });
     }
 
-    openRetentionLog(retentionLog: RetentionLog[]) {
-        const dialogRef: DialogRef<DataRetentionLogDialogComponent> =
-            this.dialogService.open(DataRetentionLogDialogComponent, {
-                panelType: PanelType.STANDARD_PANEL,
-                title: this.translateService.instant('Retention Log'),
-                width: '100vw',
-                data: {
-                    retentionLog: retentionLog,
-                },
-            });
-
-        dialogRef.afterClosed().subscribe(data => {
-            if (data) {
-                setTimeout(() => {
-                    this.loadAvailableMeasurements();
-                }, 1000);
-            }
+    openRetentionLog(measurementId: string): void {
+        this.datalakeRestService.getMeasurement(measurementId).subscribe({
+            next: measurement => {
+                this.openRetentionLogDialog(measurement);
+            },
         });
     }
 
-    onPageChange(event: any) {
+    onPageChange(event: any): void {
         this.pageIndex = event.pageIndex;
         this.pageSize = event.pageSize;
         //this.receiveMeasurementSizes(this.pageIndex);
     }
 
-    receiveTotalMeasurementSize(entry: DataLakeConfigurationEntry) {
+    receiveTotalMeasurementSize(entry: DataLakeConfigurationEntry): void {
         this.queryEntryCounts([entry.name], 'eventsTotal');
     }
 
-    receiveMeasurementSizes(pageIndex: number) {
+    receiveMeasurementSizes(pageIndex: number): void {
         const start = pageIndex * this.pageSize;
         const end = start + this.pageSize;
         const measurements = this.filteredMeasurements
@@ -485,7 +444,7 @@ export class DatalakeConfigurationComponent
             this.queryEntryCounts(measurements, 'eventsLatest', 7);
         }
     }
-    showPermissionsDialog(element: DataLakeMeasure) {
+    showPermissionsDialog(element: DataLakeConfigurationEntry): void {
         this.dialogService.open(ObjectPermissionDialogComponent, {
             panelType: PanelType.SLIDE_IN_PANEL,
             title: this.translateService.instant('Manage permissions'),
@@ -500,7 +459,7 @@ export class DatalakeConfigurationComponent
         });
     }
 
-    openCsvImportDialog() {
+    openCsvImportDialog(): void {
         const dialogRef: DialogRef<CsvImportDialogComponent> =
             this.dialogService.open(CsvImportDialogComponent, {
                 panelType: PanelType.SLIDE_IN_PANEL,
@@ -553,4 +512,43 @@ export class DatalakeConfigurationComponent
             }
         });
     }
+
+    private toConfigurationEntry(
+        measurement: DatasetSummaryDto,
+    ): DataLakeConfigurationEntry {
+        const entry = new DataLakeConfigurationEntry();
+        entry.elementId = measurement.elementId;
+        entry.name = measurement.measureName;
+        entry.measureName = measurement.measureName;
+        entry.pipelines = measurement.pipelines;
+        entry.retentionConfigured = measurement.retentionConfigured;
+        entry.lastExport = measurement.lastExport;
+        entry.lastRetentionStatus = measurement.lastRetentionStatus;
+        entry.remove = measurement.removable;
+        entry.eventsLatest = -1;
+        entry.eventsTotal = -1;
+        return entry;
+    }
+
+    private openRetentionLogDialog(measurement: DataLakeMeasure): void {
+        const dialogRef: DialogRef<DataRetentionLogDialogComponent> =
+            this.dialogService.open(DataRetentionLogDialogComponent, {
+                panelType: PanelType.STANDARD_PANEL,
+                title: this.translateService.instant('Retention Log'),
+                width: '100vw',
+                data: {
+                    retentionLog:
+                        measurement.retentionTime?.retentionExportConfig
+                            ?.retentionLog ?? [],
+                },
+            });
+
+        dialogRef.afterClosed().subscribe(data => {
+            if (data) {
+                setTimeout(() => {
+                    this.loadAvailableMeasurements();
+                }, 1000);
+            }
+        });
+    }
 }

Reply via email to