This is an automated email from the ASF dual-hosted git repository.
riemer pushed a commit to branch
4072-reduce-loading-time-for-dataset-count-in-dataset-view
in repository https://gitbox.apache.org/repos/asf/streampipes.git
The following commit(s) were added to
refs/heads/4072-reduce-loading-time-for-dataset-count-in-dataset-view by this
push:
new 88ef77e48a feat(#4072): Reduce loading time for dataset counts
88ef77e48a is described below
commit 88ef77e48a601d9aeb5cd2eefbce67f9d6005a0f
Author: Dominik Riemer <[email protected]>
AuthorDate: Thu Dec 18 13:14:25 2025 +0100
feat(#4072): Reduce loading time for dataset counts
---
.../dataexplorer/api/IDataExplorerManager.java | 3 +-
.../influx/DataExplorerManagerInflux.java | 5 +-
.../influx/DataLakeMeasurementCounterInflux.java | 14 +-
.../iotdb/DataExplorerManagerIotDb.java | 6 +-
.../iotdb/DataLakeMeasurementCounterIotDb.java | 9 +-
.../query/DataLakeMeasurementCounter.java | 5 +-
.../impl/datalake/DataLakeMeasureResource.java | 6 +-
.../src/lib/apis/datalake-rest.service.ts | 6 +-
.../datalake-configuration-entry.ts | 5 +-
.../datalake-configuration.component.html | 244 ++++++++++++---------
.../datalake-configuration.component.scss | 4 +
.../datalake-configuration.component.ts | 61 ++++--
12 files changed, 232 insertions(+), 136 deletions(-)
diff --git
a/streampipes-data-explorer-api/src/main/java/org/apache/streampipes/dataexplorer/api/IDataExplorerManager.java
b/streampipes-data-explorer-api/src/main/java/org/apache/streampipes/dataexplorer/api/IDataExplorerManager.java
index 586a77706c..5711aade33 100644
---
a/streampipes-data-explorer-api/src/main/java/org/apache/streampipes/dataexplorer/api/IDataExplorerManager.java
+++
b/streampipes-data-explorer-api/src/main/java/org/apache/streampipes/dataexplorer/api/IDataExplorerManager.java
@@ -35,7 +35,8 @@ public interface IDataExplorerManager {
*/
IDataLakeMeasurementCounter getMeasurementCounter(
List<DataLakeMeasure> allMeasurements,
- List<String> measurementsToCount
+ List<String> measurementsToCount,
+ int daysBack
);
IDataExplorerQueryManagement
getQueryManagement(IDataExplorerSchemaManagement dataExplorerSchemaManagement);
diff --git
a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerManagerInflux.java
b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerManagerInflux.java
index 869f314b1d..f88cf6c585 100644
---
a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerManagerInflux.java
+++
b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerManagerInflux.java
@@ -39,8 +39,9 @@ public class DataExplorerManagerInflux implements
IDataExplorerManager {
@Override
public IDataLakeMeasurementCounter getMeasurementCounter(
List<DataLakeMeasure> allMeasurements,
- List<String> measurementsToCount) {
- return new DataLakeMeasurementCounterInflux(allMeasurements,
measurementsToCount);
+ List<String> measurementsToCount,
+ int daysBack) {
+ return new DataLakeMeasurementCounterInflux(allMeasurements,
measurementsToCount, daysBack);
}
@Override
diff --git
a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataLakeMeasurementCounterInflux.java
b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataLakeMeasurementCounterInflux.java
index 0a58b8b29a..a54a3db9e0 100644
---
a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataLakeMeasurementCounterInflux.java
+++
b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataLakeMeasurementCounterInflux.java
@@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
public class DataLakeMeasurementCounterInflux extends
DataLakeMeasurementCounter {
@@ -37,9 +38,10 @@ public class DataLakeMeasurementCounterInflux extends
DataLakeMeasurementCounter
public DataLakeMeasurementCounterInflux(
List<DataLakeMeasure> allMeasurements,
- List<String> measurementNames
+ List<String> measurementNames,
+ int daysBack
) {
- super(allMeasurements, measurementNames);
+ super(allMeasurements, measurementNames, daysBack);
}
@Override
@@ -54,10 +56,16 @@ public class DataLakeMeasurementCounterInflux extends
DataLakeMeasurementCounter
return 0;
}
+ var endTime = System.currentTimeMillis();
+ long startTime = endTime - TimeUnit.DAYS.toMillis(daysBack);
var builder = DataLakeInfluxQueryBuilder
.create(measure.getMeasureName())
- .withEndTime(System.currentTimeMillis())
+ .withEndTime(endTime)
.withAggregatedColumn(firstColumn, AggregationFunction.COUNT);
+
+ if (daysBack > -1) {
+ builder.withStartTime(startTime);
+ }
var queryResult = new
DataExplorerInfluxQueryExecutor().executeQuery(builder.build(),
Optional.empty(), true);
return queryResult.getTotal() > 0 ? extractResult(queryResult,
COUNT_FIELD) : 0;
diff --git
a/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataExplorerManagerIotDb.java
b/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataExplorerManagerIotDb.java
index 612c2dee6c..e931403809 100644
---
a/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataExplorerManagerIotDb.java
+++
b/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataExplorerManagerIotDb.java
@@ -36,8 +36,10 @@ import java.util.List;
public class DataExplorerManagerIotDb implements IDataExplorerManager {
@Override
- public IDataLakeMeasurementCounter
getMeasurementCounter(List<DataLakeMeasure> allMeasurements, List<String>
measurementsToCount) {
- return new DataLakeMeasurementCounterIotDb(allMeasurements,
measurementsToCount);
+ public IDataLakeMeasurementCounter
getMeasurementCounter(List<DataLakeMeasure> allMeasurements,
+ List<String>
measurementsToCount,
+ int daysBack) {
+ return new DataLakeMeasurementCounterIotDb(allMeasurements,
measurementsToCount, daysBack);
}
@Override
diff --git
a/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataLakeMeasurementCounterIotDb.java
b/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataLakeMeasurementCounterIotDb.java
index 14cbf5aaf7..83470d4b78 100644
---
a/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataLakeMeasurementCounterIotDb.java
+++
b/streampipes-data-explorer-iotdb/src/main/java/org/apache/streampipes/dataexplorer/iotdb/DataLakeMeasurementCounterIotDb.java
@@ -18,12 +18,12 @@
package org.apache.streampipes.dataexplorer.iotdb;
-import org.apache.iotdb.rpc.IoTDBConnectionException;
-import org.apache.iotdb.rpc.StatementExecutionException;
import org.apache.streampipes.commons.environment.Environments;
import org.apache.streampipes.dataexplorer.query.DataLakeMeasurementCounter;
import org.apache.streampipes.model.datalake.DataLakeMeasure;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,8 +35,9 @@ public class DataLakeMeasurementCounterIotDb extends
DataLakeMeasurementCounter
private static final Logger LOG =
LoggerFactory.getLogger(DataLakeMeasurementCounterIotDb.class);
public DataLakeMeasurementCounterIotDb(List<DataLakeMeasure> allMeasurements,
- List<String> measurementNames) {
- super(allMeasurements, measurementNames);
+ List<String> measurementNames,
+ int daysBack) {
+ super(allMeasurements, measurementNames, daysBack);
}
/**
diff --git
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataLakeMeasurementCounter.java
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataLakeMeasurementCounter.java
index bc3a551ed7..2263c06192 100644
---
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataLakeMeasurementCounter.java
+++
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataLakeMeasurementCounter.java
@@ -41,13 +41,16 @@ public abstract class DataLakeMeasurementCounter implements
IDataLakeMeasurement
protected final List<DataLakeMeasure> allMeasurements;
protected final List<String> measurementNames;
+ protected final int daysBack;
public DataLakeMeasurementCounter(
List<DataLakeMeasure> allMeasurements,
- List<String> measurementNames
+ List<String> measurementNames,
+ int daysBack
) {
this.allMeasurements = allMeasurements;
this.measurementNames = measurementNames;
+ this.daysBack = daysBack;
}
@Override
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 32d6a26293..4c36c5a06c 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
@@ -69,13 +69,15 @@ public class DataLakeMeasureResource extends
AbstractAuthGuardedRestResource {
@Operation(summary = "Retrieve measurement counts", description = "Retrieves
the entry counts for the specified measurements from the data lake.")
@GetMapping(path = "/count", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Integer>> getEntryCountsOfMeasurments(
- @Parameter(description = "A list of measurement names to return the
count.") @RequestParam(value = "measurementNames") List<String>
measurementNames) {
+ @Parameter(description = "A list of measurement names to return the
count.") @RequestParam(value = "measurementNames") List<String>
measurementNames,
+ @Parameter(description = "The number of days from today where the count
should start") @RequestParam(value = "daysBack", defaultValue = "-1") int
daysBack) {
var allMeasurements = this.dataLakeMeasureManagement.getAllMeasurements();
var result = new DataExplorerDispatcher()
.getDataExplorerManager()
.getMeasurementCounter(
allMeasurements,
- measurementNames)
+ measurementNames,
+ daysBack)
.countMeasurementSizes();
return ok(result);
}
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 bade947937..b119cd6296 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
@@ -50,10 +50,14 @@ export class DatalakeRestService {
getMeasurementEntryCounts(
measurementNames: string[],
+ daysBack = -1,
): Observable<Record<string, number>> {
return this.http
.get(`${this.dataLakeMeasureUrl}/count`, {
- params: { measurementNames: measurementNames },
+ params: {
+ measurementNames,
+ daysBack,
+ },
})
.pipe(map(r => r as Record<string, number>));
}
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 a56a29e6e5..8e814381f8 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
@@ -21,7 +21,10 @@ import { RetentionConfig } from
'../../dialog/data-retention-dialog/model/retent
export class DataLakeConfigurationEntry {
public name: string;
public pipelines: string[] = [];
- public events = 0;
+ public eventsTotal = 0;
+ public eventsLatest = 0;
+ public eventsTotalLoading = false;
+ public eventsLatestLoading = false;
public remove = true;
public elementId: string;
public retention: RetentionTimeConfig;
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 18cbb3b042..bb00bd2b1e 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
@@ -38,7 +38,15 @@
<mat-icon>refresh</mat-icon>
</button>
</div>
- <div fxLayout="column" class="w-100">
+ <div fxLayout="column" class="w-100" fxLayoutGap="10px">
+ <sp-alert-banner
+ type="info"
+ [title]="'Caution when loading total count' | translate"
+ [description]="
+ 'For large datasets, computing the total number of events
can take a long time.'
+ "
+ >
+ </sp-alert-banner>
<sp-table
[dataSource]="dataSource"
[columns]="displayedColumns"
@@ -64,141 +72,169 @@
</td>
</ng-container>
- <ng-container matColumnDef="events">
+ <ng-container matColumnDef="eventsLatest">
<th mat-header-cell mat-sort-header *matHeaderCellDef>
- {{ '# Events' | translate }}
+ {{ '# Events (7d)' | translate }}
</th>
<td
mat-cell
data-cy="datalake-number-of-events"
*matCellDef="let configurationEntry"
>
- @if (configurationEntry.events < 0) {
+ @if (configurationEntry.eventsLatestLoading) {
<mat-spinner
[diameter]="20"
fxLayoutAlign="center"
- style="margin: 10px 0 5px 0"
color="accent"
data-cy="datalake-number-of-events-spinner"
>{{ 'Loading' | translate }}
</mat-spinner>
} @else {
- <span>
- {{ configurationEntry.events | number }}
- </span>
+ <sp-label
+ tone="neutral"
+ minWidth="100px"
+ [labelText]="
+ configurationEntry.eventsLatest | number
+ "
+ size="small"
+ >
+ </sp-label>
}
</td>
</ng-container>
- <ng-container matColumnDef="retention">
- <th mat-header-cell *matHeaderCellDef>
- {{ 'Retention Rate' | translate }}
+ <ng-container matColumnDef="eventsTotal">
+ <th mat-header-cell mat-sort-header *matHeaderCellDef>
+ {{ '# Events (total)' | translate }}
</th>
- <td mat-cell *matCellDef="let configurationEntry">
- <div fxLayout="row">
- <span
- fxFlex
- fxFlexOrder="3"
- fxLayout="row"
- fxLayoutAlign="start center"
- >
- <button
+ <td
+ mat-cell
+ data-cy="datalake-number-of-events"
+ *matCellDef="let configurationEntry"
+ >
+ <div fxLayout="row" fxLayoutAlign="start center">
+ @if (configurationEntry.eventsTotalLoading) {
+ <mat-spinner
+ [diameter]="20"
+ fxLayoutAlign="center"
color="accent"
- mat-icon-button
- [matTooltip]="
- 'Set retention rate' | translate
- "
- data-cy="datalake-retention-btn"
- matTooltipPosition="above"
- (click)="
- openRetentionDialog(
- configurationEntry.elementId
- )
- "
- >
- <i
- class="material-icons"
- [ngStyle]="{
- color:
configurationEntry?.retention
- ? 'var(--color-success)'
- : 'var(--color-neutral'
- }"
- >history</i
+ data-cy="datalake-number-of-events-spinner"
+ >{{ 'Loading' | translate }}
+ </mat-spinner>
+ } @else {
+ @if (configurationEntry.eventsTotal > -1) {
+ <sp-label
+ tone="neutral"
+ class="cursor-pointer"
+ minWidth="100px"
+ [labelText]="
+ configurationEntry.eventsTotal
+ | number
+ "
+ size="small"
+ (click)="
+ receiveTotalMeasurementSize(
+ configurationEntry
+ )
+ "
>
- </button>
- </span>
+ </sp-label>
+ } @else {
+ <sp-label
+ tone="neutral"
+ class="cursor-pointer"
+ minWidth="100px"
+ [labelText]="
+ 'Click to load' | translate
+ "
+ size="small"
+ (click)="
+ receiveTotalMeasurementSize(
+ configurationEntry
+ )
+ "
+ >
+ </sp-label>
+ }
+ }
</div>
</td>
</ng-container>
- <ng-container matColumnDef="retentionlog">
+ <ng-container matColumnDef="retention">
<th mat-header-cell *matHeaderCellDef>
- {{ 'Retention Log' | translate }}
+ {{ 'Retention' | translate }}
</th>
<td mat-cell *matCellDef="let configurationEntry">
- <div fxLayout="row">
- <span
- fxFlex
- fxFlexOrder="3"
- fxLayout="row"
- fxLayoutAlign="start center"
+ <button
+ color="accent"
+ mat-icon-button
+ [matTooltip]="'Set retention rate' | translate"
+ data-cy="datalake-retention-btn"
+ matTooltipPosition="above"
+ (click)="
+ openRetentionDialog(
+ configurationEntry.elementId
+ )
+ "
+ >
+ <i
+ class="material-icons"
+ [ngStyle]="{
+ color: configurationEntry?.retention
+ ? 'var(--color-success)'
+ : 'var(--color-neutral'
+ }"
+ >history</i
+ >
+ </button>
+ @if (
+
configurationEntry?.retention?.retentionExportConfig
+ ?.retentionLog?.length > 0
+ ) {
+ <button
+ color="accent"
+ mat-icon-button
+ [matTooltip]="
+ ('Open Retention Log' | translate) +
+ (configurationEntry?.retention
+ ?.retentionExportConfig?.lastExport
+ ? ' • ' +
+ (configurationEntry.retention
+ .retentionExportConfig.lastExport
+ | date: 'yyyy-MM-dd HH:mm:ss')
+ : '')
+ "
+ data-cy="datalake-retention-log-btn"
+ matTooltipPosition="above"
+ (click)="
+ openRetentionLog(
+ configurationEntry?.retention
+ .retentionExportConfig.retentionLog
+ )
+ "
>
- @if (configurationEntry?.retention) {
- <button
- color="accent"
- mat-icon-button
- [matTooltip]="
- ('Open Retention Log' | translate)
+
- (configurationEntry?.retention
+ <i
+ class="material-icons"
+ [ngStyle]="{
+ color:
+ configurationEntry?.retention
?.retentionExportConfig
- ?.lastExport
- ? ' • ' +
- (configurationEntry.retention
- .retentionExportConfig
- .lastExport
- | date
- : 'yyyy-MM-dd
HH:mm:ss')
- : '')
- "
- data-cy="datalake-retention-log-btn"
- matTooltipPosition="above"
- (click)="
- openRetentionLog(
- configurationEntry?.retention
+ ?.retentionLog?.length &&
+ configurationEntry.retention
+ .retentionExportConfig
+ .retentionLog[
+ configurationEntry.retention
.retentionExportConfig
- .retentionLog
- )
- "
- >
- <i
- class="material-icons"
- [ngStyle]="{
- color:
- configurationEntry
- ?.retention
- ?.retentionExportConfig
- ?.retentionLog
- ?.length &&
-
configurationEntry.retention
- .retentionExportConfig
- .retentionLog[
- configurationEntry
- .retention
-
.retentionExportConfig
- .retentionLog
- .length - 1
- ].status
- ? 'green'
- : 'red'
- }"
- >list_alt</i
- >
- </button>
- } @else {
- <p>-</p>
- }
- </span>
- </div>
+ .retentionLog.length - 1
+ ].status
+ ? 'var(--color-success)'
+ : 'var(--color-error)'
+ }"
+ >list_alt</i
+ >
+ </button>
+ }
</td>
</ng-container>
diff --git
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.scss
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.scss
index 13cbc4aacb..b93bc4701c 100644
---
a/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.scss
+++
b/ui/src/app/dataset/components/datalake-configuration/datalake-configuration.component.scss
@@ -15,3 +15,7 @@
* limitations under the License.
*
*/
+
+.cursor-pointer {
+ cursor: pointer;
+}
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 6779808799..80a3d7841f 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
@@ -51,6 +51,7 @@ import { DeleteExportProviderComponent } from
'../../dialog/delete-export-provid
import { TranslateService } from '@ngx-translate/core';
import { ExportProviderConnectionTestComponent } from
'../../dialog/export-provider-connection-test/export-provider-connection-test.component';
import { DataRetentionLogDialogComponent } from
'../../dialog/data-retention-log-dialog/data-retention-log-dialog.component';
+import { LocalStorageService } from
'../../../../../projects/streampipes/shared-ui/src/lib/services/local-storage-settings.service';
@Component({
selector: 'sp-datalake-configuration',
@@ -82,9 +83,9 @@ export class DatalakeConfigurationComponent implements
OnInit, AfterViewInit {
displayedColumns: string[] = [
'name',
'pipeline',
- 'events',
+ 'eventsLatest',
+ 'eventsTotal',
'retention',
- 'retentionlog',
'actions',
];
@@ -97,7 +98,9 @@ export class DatalakeConfigurationComponent implements
OnInit, AfterViewInit {
'test',
];
- pageSize = 10;
+ private localStorageService = inject(LocalStorageService);
+
+ pageSize = this.localStorageService.get('paginator-page-size', 10);
pageIndex = 0;
ngOnInit(): void {
@@ -144,7 +147,8 @@ export class DatalakeConfigurationComponent implements
OnInit, AfterViewInit {
const entry = new DataLakeConfigurationEntry();
entry.elementId = measurement.elementId;
entry.name = measurement.measureName;
- entry.events = -1;
+ entry.eventsLatest = -1;
+ entry.eventsTotal = -1;
if (measurement?.retentionTime != null) {
entry.retention = measurement.retentionTime;
}
@@ -327,7 +331,11 @@ export class DatalakeConfigurationComponent implements
OnInit, AfterViewInit {
onPageChange(event: any) {
this.pageIndex = event.pageIndex;
this.pageSize = event.pageSize;
- this.receiveMeasurementSizes(this.pageIndex);
+ //this.receiveMeasurementSizes(this.pageIndex);
+ }
+
+ receiveTotalMeasurementSize(entry: DataLakeConfigurationEntry) {
+ this.queryEntryCounts([entry.name], 'eventsTotal');
}
receiveMeasurementSizes(pageIndex: number) {
@@ -335,18 +343,41 @@ export class DatalakeConfigurationComponent implements
OnInit, AfterViewInit {
const end = start + this.pageSize;
const measurements = this.availableMeasurements
.slice(start, end)
- .filter(m => m.events === -1)
+ .filter(m => m.eventsLatest === -1)
.map(m => m.name);
if (measurements.length > 0) {
- this.datalakeRestService
- .getMeasurementEntryCounts(measurements)
- .subscribe(res => {
- this.availableMeasurements.forEach(m => {
- if (res[m.name] !== undefined) {
- m.events = res[m.name];
- }
- });
- });
+ this.queryEntryCounts(measurements, 'eventsLatest', 7);
}
}
+
+ queryEntryCounts(
+ measurements: string[],
+ targetField: string,
+ daysBack = -1,
+ ): void {
+ this.applyLoadingStatus(measurements, targetField, true);
+ this.datalakeRestService
+ .getMeasurementEntryCounts(measurements, daysBack)
+ .subscribe(res => {
+ this.applyLoadingStatus(measurements, targetField, false);
+ this.availableMeasurements.forEach(m => {
+ if (res[m.name] !== undefined) {
+ m[targetField] = res[m.name];
+ }
+ });
+ });
+ }
+
+ applyLoadingStatus(
+ measurements: string[],
+ targetField: string,
+ status: boolean,
+ ): void {
+ const loadingField = targetField + 'Loading';
+ this.availableMeasurements.forEach(m => {
+ if (measurements.includes(m.name)) {
+ m[loadingField] = status;
+ }
+ });
+ }
}