From c6e6a91cb4cae860ff4bd2a1302c9b3c5d41e666 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 10 Jan 2022 11:06:17 +0100 Subject: [PATCH] Feature/2084 - T10: Aggregation in time processing * Add option to choose between aggregation and average --- src/core/model/rtm/processing/Processing.type.ts | 1 + src/core/model/rtm/processing/TimeProcessing.ts | 15 +++++++++++++-- .../t10/components/hooks/useTimeProcessing.ts | 1 + .../processing/timeProcessingEditor.tsx | 13 ++++++++++++- src/services/api/index.ts | 4 ++-- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/core/model/rtm/processing/Processing.type.ts b/src/core/model/rtm/processing/Processing.type.ts index 88a05e3c..d5c12429 100644 --- a/src/core/model/rtm/processing/Processing.type.ts +++ b/src/core/model/rtm/processing/Processing.type.ts @@ -24,6 +24,7 @@ export interface ITimeProcessing extends IProcessing { type: 'time'; rule: string; method: string; + mode: string; cut: ECutRule; cutNumber?: number; } diff --git a/src/core/model/rtm/processing/TimeProcessing.ts b/src/core/model/rtm/processing/TimeProcessing.ts index f4ce7c38..51c0748e 100644 --- a/src/core/model/rtm/processing/TimeProcessing.ts +++ b/src/core/model/rtm/processing/TimeProcessing.ts @@ -14,6 +14,10 @@ export const methods = [ ['zero', 'These methods use the numerical values of the index'], ]; +export const modes = [ + 'aggregation', 'average' +]; + class TimeProcessing extends GenericObject { public static fromObject(obj: ITimeProcessing) { return new TimeProcessing(this.cloneDeep(obj)); @@ -75,6 +79,14 @@ class TimeProcessing extends GenericObject { this._props.rule = value; } + get mode(): string { + return this._props.mode; + } + + set mode(value: string) { + this._props.mode = value; + } + public async apply(input: IDateTimeValue[]) { let dataToProcess: IDateTimeValue[] = _.uniqBy(input, 'timeStamp'); if (!this.cut || this.cut === ECutRule.NONE || this.cut === ECutRule.PERIOD) { @@ -88,8 +100,7 @@ class TimeProcessing extends GenericObject { // eslint-disable-next-line no-useless-catch try { - const processedData = await makeTimeProcessingRequest(dataToProcess, this.rule, this.method); - + const processedData = await makeTimeProcessingRequest(dataToProcess, this.rule, this.method, this.mode); if (!this.cut || this.cut === ECutRule.NONE) { return input .filter((i) => !(i.timeStamp >= this.begin && ((this.end && i.timeStamp <= this.end) || !this.end))) diff --git a/src/scenes/t10/components/hooks/useTimeProcessing.ts b/src/scenes/t10/components/hooks/useTimeProcessing.ts index a4fa0873..816f7aee 100644 --- a/src/scenes/t10/components/hooks/useTimeProcessing.ts +++ b/src/scenes/t10/components/hooks/useTimeProcessing.ts @@ -37,6 +37,7 @@ export const useTimeProcessing = (tp: TimeProcessing | null, dsc: DataSourceColl end, rule: '1d', method: 'time', + mode: 'average', cut: ECutRule.NONE, }); process(cProcessing); diff --git a/src/scenes/t10/components/processing/timeProcessingEditor.tsx b/src/scenes/t10/components/processing/timeProcessingEditor.tsx index fef2b9d3..8b32d522 100644 --- a/src/scenes/t10/components/processing/timeProcessingEditor.tsx +++ b/src/scenes/t10/components/processing/timeProcessingEditor.tsx @@ -14,7 +14,7 @@ import { import { DataSourceCollection } from '../../../../core/model/rtm/monitoring'; import { ECutRule } from '../../../../core/model/rtm/processing/Processing.type'; import { TimeProcessing } from '../../../../core/model/rtm/processing'; -import { methods } from '../../../../core/model/rtm/processing/TimeProcessing'; +import { methods, modes } from '../../../../core/model/rtm/processing/TimeProcessing'; import { parseDate } from '../setup/dataSources/helpers'; import { useTimeProcessing } from '../hooks/useTimeProcessing'; import DataChart from '../shared/dataChart'; @@ -57,6 +57,9 @@ const TimeProcessingEditor = (props: IProps) => { if (d.name === 'cut' && typeof d.value === 'string') { cProcessing.cut = d.value as ECutRule; } + if (d.name === 'mode' && typeof d.value === 'string') { + cProcessing.mode = d.value; + } updateProcessing(TimeProcessing.fromObject(cProcessing)); }; @@ -199,6 +202,14 @@ const TimeProcessingEditor = (props: IProps) => { onBlur={handleBlurInput} /> + ({ key: m, value: m, text: m }))} + value={processing.mode} + onChange={handleChangeSelect} + /> diff --git a/src/services/api/index.ts b/src/services/api/index.ts index d4f842a7..7d7fadb8 100644 --- a/src/services/api/index.ts +++ b/src/services/api/index.ts @@ -157,11 +157,11 @@ export const fetchRasterMetaData = ( .catch(onError); }; -export const makeTimeProcessingRequest = (data: IDateTimeValue[], rule: string, method: string) => +export const makeTimeProcessingRequest = (data: IDateTimeValue[], rule: string, method: string, mode?: string) => axios .request({ method: 'POST', - url: `${TIMEPROCESSING_URL}?rule=${rule}&interpolation_method=${method}`, + url: `${TIMEPROCESSING_URL}?rule=${rule}&interpolation_method=${method}&aggregate=${mode === 'aggregation'}`, headers: { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json',