@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
83 lines • 11.7 kB
JavaScript
import { Injectable } from '@angular/core';
import { aggregationType } from '@c8y/client';
import { AGGREGATION_LIMITS } from '@c8y/ngx-components';
import { INTERVALS, TimeSpanInMs } from '@c8y/ngx-components/interval-picker';
import * as i0 from "@angular/core";
export class DatapointExplorerService {
constructor() {
this.DEFAULT_INTERVAL = 'days';
}
// Create generic? Based on packages/ngx-components/core/dashboard/wiget-time-context/widget-time-context.component.html
getDefaultContext() {
return {
date: this.getDateTimeContextByInterval(this.DEFAULT_INTERVAL),
interval: this.DEFAULT_INTERVAL,
realtime: false,
aggregation: aggregationType.MINUTELY
};
}
calculateAggregation([dateFrom, dateTo], requestedAggregation) {
const timeRangeValidations = this.validateTimeRanges([dateFrom, dateTo]);
const disabledAggregations = this.getDisabledAggregations(timeRangeValidations);
const timeRangeInMs = this.getTimeRangeInMs(dateFrom, dateTo);
const isRequestedAggregationValid = requestedAggregation === null || !disabledAggregations[requestedAggregation];
const selectedAggregation = isRequestedAggregationValid
? requestedAggregation
: this.determineAggregation(timeRangeInMs);
return {
selectedAggregation,
disabledAggregations
};
}
getDateTimeContextByInterval(intervalId) {
const interval = INTERVALS.find(({ id }) => id === intervalId);
const dateTo = new Date();
const dateFrom = new Date(dateTo.valueOf() - interval.timespanInMs);
return [dateFrom, dateTo];
}
getTimeRangeInMs(dateFrom, dateTo) {
return dateTo.valueOf() - dateFrom.valueOf();
}
validateTimeRanges([dateFrom, dateTo]) {
const timeRangeInMs = this.getTimeRangeInMs(dateFrom, dateTo);
return [
{
aggregationType: aggregationType.DAILY,
isDisabled: timeRangeInMs <= TimeSpanInMs.DAY
},
{
aggregationType: aggregationType.HOURLY,
isDisabled: timeRangeInMs <= TimeSpanInMs.HOUR
},
{
aggregationType: aggregationType.MINUTELY,
isDisabled: timeRangeInMs <= TimeSpanInMs.MINUTE
}
];
}
getDisabledAggregations(timeRangeValidations) {
return timeRangeValidations.reduce((acc, { aggregationType, isDisabled }) => ({
...acc,
[aggregationType]: isDisabled
}), {});
}
determineAggregation(timeRangeInMs) {
if (timeRangeInMs >= AGGREGATION_LIMITS.DAILY_LIMIT) {
return aggregationType.DAILY;
}
else if (timeRangeInMs >= AGGREGATION_LIMITS.HOURLY_LIMIT) {
return aggregationType.HOURLY;
}
else if (timeRangeInMs >= AGGREGATION_LIMITS.MINUTELY_LIMIT) {
return aggregationType.MINUTELY;
}
return null;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointExplorerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointExplorerService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointExplorerService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90aW1lLWNvbnRleHQvdGltZS1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQVksU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQVF4RixNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBRVcscUJBQWdCLEdBQW1CLE1BQU0sQ0FBQztLQXlGcEQ7SUF2RkMsd0hBQXdIO0lBQ3hILGlCQUFpQjtRQUNmLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5RCxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixRQUFRLEVBQUUsS0FBSztZQUNmLFdBQVcsRUFBRSxlQUFlLENBQUMsUUFBUTtTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUNsQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQWtCLEVBQ25DLG9CQUE0QztRQUs1QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5RCxNQUFNLDJCQUEyQixHQUMvQixvQkFBb0IsS0FBSyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRS9FLE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCO1lBQ3JELENBQUMsQ0FBQyxvQkFBb0I7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU3QyxPQUFPO1lBQ0wsbUJBQW1CO1lBQ25CLG9CQUFvQjtTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVELDRCQUE0QixDQUFDLFVBQTBCO1FBQ3JELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQWMsRUFBRSxNQUFZO1FBQ25ELE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFrQjtRQUM1RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlELE9BQU87WUFDTDtnQkFDRSxlQUFlLEVBQUUsZUFBZSxDQUFDLEtBQUs7Z0JBQ3RDLFVBQVUsRUFBRSxhQUFhLElBQUksWUFBWSxDQUFDLEdBQUc7YUFDOUM7WUFDRDtnQkFDRSxlQUFlLEVBQUUsZUFBZSxDQUFDLE1BQU07Z0JBQ3ZDLFVBQVUsRUFBRSxhQUFhLElBQUksWUFBWSxDQUFDLElBQUk7YUFDL0M7WUFDRDtnQkFDRSxlQUFlLEVBQUUsZUFBZSxDQUFDLFFBQVE7Z0JBQ3pDLFVBQVUsRUFBRSxhQUFhLElBQUksWUFBWSxDQUFDLE1BQU07YUFDakQ7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLHVCQUF1QixDQUM3QixvQkFBMkM7UUFFM0MsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQ2hDLENBQUMsR0FBRyxFQUFFLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLEdBQUcsR0FBRztZQUNOLENBQUMsZUFBZSxDQUFDLEVBQUUsVUFBVTtTQUM5QixDQUFDLEVBQ0YsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQUMsYUFBcUI7UUFDaEQsSUFBSSxhQUFhLElBQUksa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEQsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLGFBQWEsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1RCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDaEMsQ0FBQzthQUFNLElBQUksYUFBYSxJQUFJLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzlELE9BQU8sZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQXpGVSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQURYLE1BQU07OzRGQUNuQix3QkFBd0I7a0JBRHBDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWdncmVnYXRpb25UeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQUdHUkVHQVRJT05fTElNSVRTLCBEYXRlVGltZUNvbnRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEludGVydmFsLCBJTlRFUlZBTFMsIFRpbWVTcGFuSW5NcyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcblxuaW50ZXJmYWNlIFRpbWVSYW5nZVZhbGlkYXRpb24ge1xuICBhZ2dyZWdhdGlvblR5cGU6IGFnZ3JlZ2F0aW9uVHlwZTtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRFeHBsb3JlclNlcnZpY2Uge1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMOiBJbnRlcnZhbFsnaWQnXSA9ICdkYXlzJztcblxuICAvLyBDcmVhdGUgZ2VuZXJpYz8gQmFzZWQgb24gcGFja2FnZXMvbmd4LWNvbXBvbmVudHMvY29yZS9kYXNoYm9hcmQvd2lnZXQtdGltZS1jb250ZXh0L3dpZGdldC10aW1lLWNvbnRleHQuY29tcG9uZW50Lmh0bWxcbiAgZ2V0RGVmYXVsdENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGU6IHRoaXMuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbCh0aGlzLkRFRkFVTFRfSU5URVJWQUwpLFxuICAgICAgaW50ZXJ2YWw6IHRoaXMuREVGQVVMVF9JTlRFUlZBTCxcbiAgICAgIHJlYWx0aW1lOiBmYWxzZSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblR5cGUuTUlOVVRFTFlcbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlQWdncmVnYXRpb24oXG4gICAgW2RhdGVGcm9tLCBkYXRlVG9dOiBEYXRlVGltZUNvbnRleHQsXG4gICAgcmVxdWVzdGVkQWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uVHlwZSB8IG51bGxcbiAgKToge1xuICAgIHNlbGVjdGVkQWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uVHlwZSB8IG51bGw7XG4gICAgZGlzYWJsZWRBZ2dyZWdhdGlvbnM6IFBhcnRpYWw8UmVjb3JkPGFnZ3JlZ2F0aW9uVHlwZSwgYm9vbGVhbj4+O1xuICB9IHtcbiAgICBjb25zdCB0aW1lUmFuZ2VWYWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGVUaW1lUmFuZ2VzKFtkYXRlRnJvbSwgZGF0ZVRvXSk7XG4gICAgY29uc3QgZGlzYWJsZWRBZ2dyZWdhdGlvbnMgPSB0aGlzLmdldERpc2FibGVkQWdncmVnYXRpb25zKHRpbWVSYW5nZVZhbGlkYXRpb25zKTtcblxuICAgIGNvbnN0IHRpbWVSYW5nZUluTXMgPSB0aGlzLmdldFRpbWVSYW5nZUluTXMoZGF0ZUZyb20sIGRhdGVUbyk7XG5cbiAgICBjb25zdCBpc1JlcXVlc3RlZEFnZ3JlZ2F0aW9uVmFsaWQgPVxuICAgICAgcmVxdWVzdGVkQWdncmVnYXRpb24gPT09IG51bGwgfHwgIWRpc2FibGVkQWdncmVnYXRpb25zW3JlcXVlc3RlZEFnZ3JlZ2F0aW9uXTtcblxuICAgIGNvbnN0IHNlbGVjdGVkQWdncmVnYXRpb24gPSBpc1JlcXVlc3RlZEFnZ3JlZ2F0aW9uVmFsaWRcbiAgICAgID8gcmVxdWVzdGVkQWdncmVnYXRpb25cbiAgICAgIDogdGhpcy5kZXRlcm1pbmVBZ2dyZWdhdGlvbih0aW1lUmFuZ2VJbk1zKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3RlZEFnZ3JlZ2F0aW9uLFxuICAgICAgZGlzYWJsZWRBZ2dyZWdhdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbChpbnRlcnZhbElkOiBJbnRlcnZhbFsnaWQnXSk6IERhdGVUaW1lQ29udGV4dCB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBJTlRFUlZBTFMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gaW50ZXJ2YWxJZCk7XG4gICAgY29uc3QgZGF0ZVRvID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBkYXRlRnJvbSA9IG5ldyBEYXRlKGRhdGVUby52YWx1ZU9mKCkgLSBpbnRlcnZhbC50aW1lc3BhbkluTXMpO1xuICAgIHJldHVybiBbZGF0ZUZyb20sIGRhdGVUb107XG4gIH1cblxuICBwcml2YXRlIGdldFRpbWVSYW5nZUluTXMoZGF0ZUZyb206IERhdGUsIGRhdGVUbzogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGVUby52YWx1ZU9mKCkgLSBkYXRlRnJvbS52YWx1ZU9mKCk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVGltZVJhbmdlcyhbZGF0ZUZyb20sIGRhdGVUb106IERhdGVUaW1lQ29udGV4dCk6IFRpbWVSYW5nZVZhbGlkYXRpb25bXSB7XG4gICAgY29uc3QgdGltZVJhbmdlSW5NcyA9IHRoaXMuZ2V0VGltZVJhbmdlSW5NcyhkYXRlRnJvbSwgZGF0ZVRvKTtcblxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogYWdncmVnYXRpb25UeXBlLkRBSUxZLFxuICAgICAgICBpc0Rpc2FibGVkOiB0aW1lUmFuZ2VJbk1zIDw9IFRpbWVTcGFuSW5Ncy5EQVlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogYWdncmVnYXRpb25UeXBlLkhPVVJMWSxcbiAgICAgICAgaXNEaXNhYmxlZDogdGltZVJhbmdlSW5NcyA8PSBUaW1lU3BhbkluTXMuSE9VUlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWdncmVnYXRpb25UeXBlOiBhZ2dyZWdhdGlvblR5cGUuTUlOVVRFTFksXG4gICAgICAgIGlzRGlzYWJsZWQ6IHRpbWVSYW5nZUluTXMgPD0gVGltZVNwYW5Jbk1zLk1JTlVURVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldERpc2FibGVkQWdncmVnYXRpb25zKFxuICAgIHRpbWVSYW5nZVZhbGlkYXRpb25zOiBUaW1lUmFuZ2VWYWxpZGF0aW9uW11cbiAgKTogUGFydGlhbDxSZWNvcmQ8YWdncmVnYXRpb25UeXBlLCBib29sZWFuPj4ge1xuICAgIHJldHVybiB0aW1lUmFuZ2VWYWxpZGF0aW9ucy5yZWR1Y2UoXG4gICAgICAoYWNjLCB7IGFnZ3JlZ2F0aW9uVHlwZSwgaXNEaXNhYmxlZCB9KSA9PiAoe1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIFthZ2dyZWdhdGlvblR5cGVdOiBpc0Rpc2FibGVkXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lQWdncmVnYXRpb24odGltZVJhbmdlSW5NczogbnVtYmVyKTogYWdncmVnYXRpb25UeXBlIHwgbnVsbCB7XG4gICAgaWYgKHRpbWVSYW5nZUluTXMgPj0gQUdHUkVHQVRJT05fTElNSVRTLkRBSUxZX0xJTUlUKSB7XG4gICAgICByZXR1cm4gYWdncmVnYXRpb25UeXBlLkRBSUxZO1xuICAgIH0gZWxzZSBpZiAodGltZVJhbmdlSW5NcyA+PSBBR0dSRUdBVElPTl9MSU1JVFMuSE9VUkxZX0xJTUlUKSB7XG4gICAgICByZXR1cm4gYWdncmVnYXRpb25UeXBlLkhPVVJMWTtcbiAgICB9IGVsc2UgaWYgKHRpbWVSYW5nZUluTXMgPj0gQUdHUkVHQVRJT05fTElNSVRTLk1JTlVURUxZX0xJTUlUKSB7XG4gICAgICByZXR1cm4gYWdncmVnYXRpb25UeXBlLk1JTlVURUxZO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19