added rewrite param to delete latest timeseries, enabled single selection deletion (#8933)

This commit is contained in:
Ruslan Vasylkiv 2023-07-14 12:37:40 +03:00 committed by GitHub
parent 2f1290e7e1
commit 32c2d44b0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 11 deletions

View File

@ -50,7 +50,7 @@ export class AttributeService {
}
public deleteEntityTimeseries(entityId: EntityId, timeseries: Array<AttributeData>, deleteAllDataForKeys = false,
startTs?: number, endTs?: number, rewriteLatestIfDeleted = false, deleteLatest = false,
startTs?: number, endTs?: number, rewriteLatestIfDeleted = false, deleteLatest = true,
config?: RequestConfig): Observable<any> {
const keys = timeseries.map(attribute => encodeURIComponent(attribute.key)).join(',');
let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/timeseries/delete` +
@ -64,9 +64,11 @@ export class AttributeService {
return this.http.delete(url, defaultHttpOptionsFromConfig(config));
}
public deleteEntityLatestTimeseries(entityId: EntityId, timeseries: Array<AttributeData>, config?: RequestConfig): Observable<any> {
public deleteEntityLatestTimeseries(entityId: EntityId, timeseries: Array<AttributeData>, rewrite = true,
config?: RequestConfig): Observable<any> {
const keys = timeseries.map(attribute => encodeURIComponent(attribute.key)).join(',');
let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/timeseries/latest/delete?keys=${keys}`;
let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/timeseries/latest/delete?keys=${keys}` +
`$rewrite=${rewrite}`;
return this.http.delete(url, defaultHttpOptionsFromConfig(config));
}
@ -111,7 +113,7 @@ export class AttributeService {
let deleteEntityTimeseriesObservable: Observable<any>;
if (deleteTimeseries.length) {
deleteEntityTimeseriesObservable = this.deleteEntityTimeseries(entityId, deleteTimeseries, true,
null, null, false, false, config);
null, null, false, true, config);
} else {
deleteEntityTimeseriesObservable = of(null);
}

View File

@ -93,7 +93,7 @@
(click)="deleteAttributes($event)">
<mat-icon>delete</mat-icon>
</button>
<button [fxShow]="attributeScope === latestTelemetryTypes.LATEST_TELEMETRY && dataSource.selection.selected.length > 1"
<button [fxShow]="attributeScope === latestTelemetryTypes.LATEST_TELEMETRY"
class="button-widget-action"
mat-icon-button [disabled]="isLoading$ | async"
matTooltip="{{ 'action.delete' | translate }}"

View File

@ -386,7 +386,7 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
if ($event) {
$event.stopPropagation();
}
const isMultipleDeletion = isUndefinedOrNull(attribute);
const isMultipleDeletion = isUndefinedOrNull(attribute) && this.dataSource.selection.selected.length > 1;
const target = $event.target || $event.srcElement || $event.currentTarget;
const config = new OverlayConfig();
config.backdropClass = 'cdk-overlay-transparent-backdrop';
@ -424,22 +424,23 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
componentRef.onDestroy(() => {
if (componentRef.instance.result !== null) {
const strategy = componentRef.instance.result;
const timeseries = isMultipleDeletion ? this.dataSource.selection.selected : [attribute];
const timeseries = attribute ? [attribute]: this.dataSource.selection.selected;
let deleteAllDataForKeys = false;
let rewriteLatestIfDeleted = false;
let startTs = null;
let endTs = null;
let deleteLatest = false;
let deleteLatest = true;
let task: Observable<any>;
if (strategy === TimeseriesDeleteStrategy.DELETE_ALL_DATA_INCLUDING_KEY) {
deleteAllDataForKeys = true;
deleteLatest = true;
}
if (strategy === TimeseriesDeleteStrategy.DELETE_OLD_DATA_EXCEPT_LATEST_VALUE) {
deleteAllDataForKeys = true;
deleteLatest = false;
}
if (strategy === TimeseriesDeleteStrategy.DELETE_LATEST_VALUE) {
task = this.attributeService.deleteEntityLatestTimeseries(this.entityIdValue, timeseries);
rewriteLatestIfDeleted = componentRef.instance.rewriteLatestIfDeleted;
task = this.attributeService.deleteEntityLatestTimeseries(this.entityIdValue, timeseries, rewriteLatestIfDeleted);
}
if (strategy === TimeseriesDeleteStrategy.DELETE_DATA_FOR_TIME_PERIOD) {
startTs = componentRef.instance.startDateTime.getTime();

View File

@ -52,6 +52,8 @@
(ngModelChange)="onEndDateTimeChange($event)">
</mat-form-field>
</div>
</div>
<div *ngIf="isPeriodStrategy() || isDeleteLatestStrategy()">
<mat-slide-toggle [(ngModel)]="rewriteLatestIfDeleted">
{{ "attribute.delete-timeseries.rewrite-latest-value-if-deleted" | translate }}
</mat-slide-toggle>

View File

@ -43,7 +43,7 @@ export class DeleteTimeseriesPanelComponent implements OnInit {
endDateTime: Date;
rewriteLatestIfDeleted: boolean = false;
rewriteLatestIfDeleted: boolean = true;
strategiesTranslationsMap = timeseriesDeleteStrategyTranslations;
@ -80,6 +80,10 @@ export class DeleteTimeseriesPanelComponent implements OnInit {
return this.strategy === TimeseriesDeleteStrategy.DELETE_DATA_FOR_TIME_PERIOD;
}
isDeleteLatestStrategy(): boolean {
return this.strategy === TimeseriesDeleteStrategy.DELETE_LATEST_VALUE;
}
onStartDateTimeChange(newStartDateTime: Date) {
const endDateTimeTs = this.endDateTime.getTime();
if (newStartDateTime.getTime() >= endDateTimeTs) {