From d40f5823ff1c7d996f7deea208826f17b4284346 Mon Sep 17 00:00:00 2001 From: Chantsova Ekaterina Date: Mon, 9 Nov 2020 15:18:37 +0200 Subject: [PATCH 1/3] Add getEntityTimeseries method to Attributes Service --- ui-ngx/src/app/core/http/attribute.service.ts | 30 ++++++++++++++++++- .../models/telemetry/telemetry.models.ts | 14 +++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/ui-ngx/src/app/core/http/attribute.service.ts b/ui-ngx/src/app/core/http/attribute.service.ts index 044b9314ba..775360be5c 100644 --- a/ui-ngx/src/app/core/http/attribute.service.ts +++ b/ui-ngx/src/app/core/http/attribute.service.ts @@ -19,8 +19,9 @@ import { defaultHttpOptionsFromConfig, RequestConfig } from './http-utils'; import { forkJoin, Observable, of } from 'rxjs'; import { HttpClient } from '@angular/common/http'; import { EntityId } from '@shared/models/id/entity-id'; -import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; +import { AttributeData, AttributeScope, DataSortOrder, TimeseriesData } from '@shared/models/telemetry/telemetry.models'; import { isDefinedAndNotNull } from '@core/utils'; +import { AggregationType } from '@shared/models/time/time.models'; @Injectable({ providedIn: 'root' @@ -110,4 +111,31 @@ export class AttributeService { } return forkJoin([saveEntityTimeseriesObservable, deleteEntityTimeseriesObservable]); } + + public getEntityTimeseries(entityId: EntityId, keys: Array, startTs: number, endTs: number, + limit: number = 100, agg: AggregationType = AggregationType.NONE, interval?: number, + orderBy: DataSortOrder = DataOrder.DESC, useStrictDataTypes: boolean = false, + config?: RequestConfig): Observable { + let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/timeseries`; + url += `?keys=${keys.join(',')}`; + url += `&startTs=${startTs}`; + url += `&endTs=${endTs}`; + if (isDefinedAndNotNull(limit)) { + url += `&limit=${limit}`; + } + if (isDefinedAndNotNull(agg)) { + url += `&agg=${agg}`; + } + if (isDefinedAndNotNull(interval)) { + url += `&interval=${interval}`; + } + if (isDefinedAndNotNull(orderBy)) { + url += `&orderBy=${orderBy}`; + } + if (isDefinedAndNotNull(useStrictDataTypes)) { + url += `&useStrictDataTypes=${useStrictDataTypes}`; + } + + return this.http.get(url, defaultHttpOptionsFromConfig(config)); + } } diff --git a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts index 18858bdbf7..28a887fe9b 100644 --- a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts +++ b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts @@ -81,6 +81,20 @@ export interface AttributeData { value: any; } +export interface TimeseriesData { + [key: string]: Array; +} + +export interface TimeseriesKeyData { + value: any; + ts: number; +} + +export enum DataSortOrder { + ASC = 'ASC', + DESC = 'DESC' +} + export interface WebsocketCmd { cmdId: number; } From 9f5d3a6c9533b146ca6fe3f0a455f531ff671a5e Mon Sep 17 00:00:00 2001 From: Chantsova Ekaterina Date: Mon, 9 Nov 2020 15:32:19 +0200 Subject: [PATCH 2/3] Type correction --- ui-ngx/src/app/core/http/attribute.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/core/http/attribute.service.ts b/ui-ngx/src/app/core/http/attribute.service.ts index 775360be5c..1fce00290d 100644 --- a/ui-ngx/src/app/core/http/attribute.service.ts +++ b/ui-ngx/src/app/core/http/attribute.service.ts @@ -114,7 +114,7 @@ export class AttributeService { public getEntityTimeseries(entityId: EntityId, keys: Array, startTs: number, endTs: number, limit: number = 100, agg: AggregationType = AggregationType.NONE, interval?: number, - orderBy: DataSortOrder = DataOrder.DESC, useStrictDataTypes: boolean = false, + orderBy: DataSortOrder = DataSortOrder.DESC, useStrictDataTypes: boolean = false, config?: RequestConfig): Observable { let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/timeseries`; url += `?keys=${keys.join(',')}`; From ae8686605f4dfe6d8a34dd877be124dbb7213021 Mon Sep 17 00:00:00 2001 From: Chantsova Ekaterina Date: Mon, 9 Nov 2020 15:54:05 +0200 Subject: [PATCH 3/3] Refactoring --- ui-ngx/src/app/core/http/attribute.service.ts | 7 ++----- .../shared/models/telemetry/telemetry.models.ts | 16 +++++++++------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/ui-ngx/src/app/core/http/attribute.service.ts b/ui-ngx/src/app/core/http/attribute.service.ts index 1fce00290d..c9e4246d86 100644 --- a/ui-ngx/src/app/core/http/attribute.service.ts +++ b/ui-ngx/src/app/core/http/attribute.service.ts @@ -116,10 +116,7 @@ export class AttributeService { limit: number = 100, agg: AggregationType = AggregationType.NONE, interval?: number, orderBy: DataSortOrder = DataSortOrder.DESC, useStrictDataTypes: boolean = false, config?: RequestConfig): Observable { - let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/timeseries`; - url += `?keys=${keys.join(',')}`; - url += `&startTs=${startTs}`; - url += `&endTs=${endTs}`; + let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/timeseries?keys=${keys.join(',')}&startTs=${startTs}&endTs=${endTs}`; if (isDefinedAndNotNull(limit)) { url += `&limit=${limit}`; } @@ -136,6 +133,6 @@ export class AttributeService { url += `&useStrictDataTypes=${useStrictDataTypes}`; } - return this.http.get(url, defaultHttpOptionsFromConfig(config)); + return this.http.get(url, defaultHttpOptionsFromConfig(config)); } } diff --git a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts index 28a887fe9b..aa4fb51fd1 100644 --- a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts +++ b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts @@ -21,7 +21,14 @@ import { Observable, ReplaySubject, Subject } from 'rxjs'; import { EntityId } from '@shared/models/id/entity-id'; import { map } from 'rxjs/operators'; import { NgZone } from '@angular/core'; -import { AlarmData, AlarmDataQuery, EntityData, EntityDataQuery, EntityKey } from '@shared/models/query/query.models'; +import { + AlarmData, + AlarmDataQuery, + EntityData, + EntityDataQuery, + EntityKey, + TsValue +} from '@shared/models/query/query.models'; import { PageData } from '@shared/models/page/page-data'; export enum DataKeyType { @@ -82,12 +89,7 @@ export interface AttributeData { } export interface TimeseriesData { - [key: string]: Array; -} - -export interface TimeseriesKeyData { - value: any; - ts: number; + [key: string]: Array; } export enum DataSortOrder {