This is an automated email from the ASF dual-hosted git repository. SvenO3 pushed a commit to branch improve-dataset-details-and-feature-card-views in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 7aaa10e4aa71a4e25152f06b8775841f8d5ff2cf Author: Sven Oehler <[email protected]> AuthorDate: Thu Jul 9 15:43:11 2026 +0200 Add total count to dataset feature card --- .../dataset-feature-card.component.html | 20 +++++++ .../dataset-feature-card.component.ts | 62 +++++++++++++--------- 2 files changed, 58 insertions(+), 24 deletions(-) diff --git a/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.html b/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.html index 9c46386282..f6ccb81b0d 100644 --- a/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.html +++ b/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.html @@ -54,6 +54,26 @@ </sp-label> </div> </div> + + <div + class="feature-card-meta-box" + fxLayout="row" + fxLayoutAlign="start center" + fxLayoutGap="0.75rem" + > + <mat-icon class="feature-card-meta-icon">numbers</mat-icon> + <div> + <div class="feature-card-meta-field-label"> + {{ 'Total events' | translate }} + </div> + <div + class="feature-card-meta-field-value mt-xs" + data-cy="dataset-feature-card-total-events" + > + {{ totalEventCount ?? '-' }} + </div> + </div> + </div> </sp-feature-card-meta-section> <div class="feature-card-meta-section__label"> diff --git a/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.ts b/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.ts index f14d2f9332..84adc59302 100644 --- a/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.ts +++ b/ui/src/app/dataset/components/dataset-feature-card/dataset-feature-card.component.ts @@ -35,7 +35,7 @@ import { GenericStorageService, SpQueryResult, } from '@streampipes/platform-services'; -import { forkJoin } from 'rxjs'; +import { catchError, forkJoin, Observable, of } from 'rxjs'; import { TranslatePipe } from '@ngx-translate/core'; import { MatIcon } from '@angular/material/icon'; import { @@ -72,6 +72,7 @@ export class DatasetFeatureCardComponent implements OnInit { assetLinkType: AssetLinkType; dataPreview: SpQueryResult; lastEventTs: number | undefined; + totalEventCount: number | undefined; previewRows: PreviewRow[] = []; private datalakeRestService = inject(DatalakeRestService); @@ -93,30 +94,43 @@ export class DatasetFeatureCardComponent implements OnInit { } loadSampleData(): void { - this.datalakeRestService - .getData(this.dataset.measureName, { - endDate: new Date().getTime(), - startDate: 0, - limit: 1, - order: 'DESC', - missingValueBehaviour: 'empty', - columns: this.dataset.eventSchema.eventProperties - .map(ep => ep.runtimeName) - .toString(), - }) - .subscribe(res => { - this.dataPreview = res; - if (res.total > 0) { - const previewRow = res.allDataSeries?.[0]?.rows?.[0] ?? []; - this.lastEventTs = Number(previewRow[0]); - this.previewRows = res.headers.map((header, index) => + forkJoin({ + dataPreview: this.datalakeRestService + .getData(this.dataset.measureName, { + endDate: new Date().getTime(), + startDate: 0, + limit: 1, + order: 'DESC', + missingValueBehaviour: 'empty', + columns: this.dataset.eventSchema.eventProperties + .map(ep => ep.runtimeName) + .toString(), + }) + .pipe(catchError(() => of(new SpQueryResult()))), + totalEventCount: this.loadTotalEventCount(), + }).subscribe(res => { + this.dataPreview = res.dataPreview; + this.totalEventCount = res.totalEventCount; + + if (res.dataPreview.total > 0) { + const previewRow = + res.dataPreview.allDataSeries?.[0]?.rows?.[0] ?? []; + this.lastEventTs = Number(previewRow[0]); + this.previewRows = res.dataPreview.headers.map( + (header, index) => this.toPreviewRow(header, previewRow[index]), - ); - } else { - this.previewRows = []; - this.lastEventTs = undefined; - } - }); + ); + } else { + this.previewRows = []; + this.lastEventTs = undefined; + } + }); + } + + private loadTotalEventCount(): Observable<number> { + return this.datalakeRestService + .getMeasurementEntryCount(this.dataset.elementId) + .pipe(catchError(() => of(0))); } formatDate(timestamp?: number): string {
