Browse Source

Merge pull request #10528 from rusikv/bug/entities-table-widget-aggregation

Fix for aggregation in entities table widget
pull/10743/head
Igor Kulikov 2 years ago
committed by GitHub
parent
commit
ff64210cab
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 11
      ui-ngx/src/app/core/api/data-aggregator.ts
  2. 4
      ui-ngx/src/app/shared/models/time/time.models.ts

11
ui-ngx/src/app/core/api/data-aggregator.ts

@ -48,7 +48,8 @@ class AggDataMap {
constructor( constructor(
private subsTw: SubscriptionTimewindow, private subsTw: SubscriptionTimewindow,
private endTs: number private endTs: number,
private aggType: AggregationType
){}; ){};
set(ts: number, data: AggData) { set(ts: number, data: AggData) {
@ -78,7 +79,7 @@ class AggDataMap {
} }
calculateAggInterval(timestamp: number): [number, number] { calculateAggInterval(timestamp: number): [number, number] {
return calculateAggIntervalWithSubscriptionTimeWindow(this.subsTw, this.endTs, timestamp); return calculateAggIntervalWithSubscriptionTimeWindow(this.subsTw, this.endTs, timestamp, this.aggType);
} }
updateLastInterval(endTs: number) { updateLastInterval(endTs: number) {
@ -87,7 +88,7 @@ class AggDataMap {
const lastTs = this.map.maxKey(); const lastTs = this.map.maxKey();
if (lastTs) { if (lastTs) {
const data = this.map.get(lastTs); const data = this.map.get(lastTs);
const interval = calculateAggIntervalWithSubscriptionTimeWindow(this.subsTw, endTs, data.ts); const interval = calculateAggIntervalWithSubscriptionTimeWindow(this.subsTw, endTs, data.ts, this.aggType);
data.interval = interval; data.interval = interval;
data.ts = interval[0] + Math.floor((interval[1] - interval[0]) / 2); data.ts = interval[0] + Math.floor((interval[1] - interval[0]) / 2);
} }
@ -415,7 +416,7 @@ export class DataAggregator {
const noAggregation = aggType === AggregationType.NONE; const noAggregation = aggType === AggregationType.NONE;
let aggKeyData = aggregationMap.aggMap[id]; let aggKeyData = aggregationMap.aggMap[id];
if (!aggKeyData) { if (!aggKeyData) {
aggKeyData = new AggDataMap(this.subsTw, this.endTs); aggKeyData = new AggDataMap(this.subsTw, this.endTs, aggType);
aggregationMap.aggMap[id] = aggKeyData; aggregationMap.aggMap[id] = aggKeyData;
} }
const keyData = data[id]; const keyData = data[id];
@ -449,7 +450,7 @@ export class DataAggregator {
const noAggregation = aggType === AggregationType.NONE; const noAggregation = aggType === AggregationType.NONE;
let aggKeyData = this.aggregationMap.aggMap[id]; let aggKeyData = this.aggregationMap.aggMap[id];
if (!aggKeyData) { if (!aggKeyData) {
aggKeyData = new AggDataMap(this.subsTw, this.endTs); aggKeyData = new AggDataMap(this.subsTw, this.endTs, aggType);
this.aggregationMap.aggMap[id] = aggKeyData; this.aggregationMap.aggMap[id] = aggKeyData;
} }
const keyData = data[id]; const keyData = data[id];

4
ui-ngx/src/app/shared/models/time/time.models.ts

@ -1116,8 +1116,8 @@ export const endIntervalDate = (current: moment_.Moment, interval: IntervalType)
}; };
export const calculateAggIntervalWithSubscriptionTimeWindow export const calculateAggIntervalWithSubscriptionTimeWindow
= (subsTw: SubscriptionTimewindow, endTs: number, timestamp: number): [number, number] => { = (subsTw: SubscriptionTimewindow, endTs: number, timestamp: number, aggType?: AggregationType): [number, number] => {
if (subsTw.aggregation.type === AggregationType.NONE) { if ((aggType || subsTw.aggregation.type) === AggregationType.NONE) {
return [timestamp, timestamp]; return [timestamp, timestamp];
} else { } else {
return calculateInterval(subsTw.startTs, endTs, subsTw.aggregation.interval, subsTw.tsOffset, subsTw.timezone, timestamp); return calculateInterval(subsTw.startTs, endTs, subsTw.aggregation.interval, subsTw.tsOffset, subsTw.timezone, timestamp);

Loading…
Cancel
Save