Browse Source

Fix issue with delta calculation when previous interval has no telemetry

pull/7333/head
Andrii Shvaika 4 years ago
parent
commit
6674c457f6
  1. 4
      application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbEntityDataSubscriptionService.java
  2. 9
      common/data/src/main/java/org/thingsboard/server/common/data/kv/ReadTsKvQueryResult.java
  3. 6
      ui-ngx/src/app/core/api/entity-data-subscription.ts

4
application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbEntityDataSubscriptionService.java

@ -314,9 +314,9 @@ public class DefaultTbEntityDataSubscriptionService implements TbEntityDataSubsc
ReadTsKvQueryInfo queryInfo = queries.get(queryResult.getQueryId());
ComparisonTsValue comparisonTsValue = entityData.getAggLatest().computeIfAbsent(queryInfo.getKey().getId(), agg -> new ComparisonTsValue());
if (queryInfo.isPrevious()) {
comparisonTsValue.setPrevious(queryResult.toTsValue());
comparisonTsValue.setPrevious(queryResult.toTsValue(queryInfo.getQuery()));
} else {
comparisonTsValue.setCurrent(queryResult.toTsValue());
comparisonTsValue.setCurrent(queryResult.toTsValue(queryInfo.getQuery()));
lastTsMap.put(queryInfo.getQuery().getKey(), queryResult.getLastEntryTs());
}
}

9
common/data/src/main/java/org/thingsboard/server/common/data/kv/ReadTsKvQueryResult.java

@ -42,9 +42,14 @@ public class ReadTsKvQueryResult {
}
}
public TsValue toTsValue() {
public TsValue toTsValue(ReadTsKvQuery query) {
if (data == null || data.isEmpty()) {
return TsValue.EMPTY;
if (Aggregation.SUM.equals(query.getAggregation()) || Aggregation.COUNT.equals(query.getAggregation())) {
long ts = query.getStartTs() + (query.getEndTs() - query.getStartTs()) / 2;
return new TsValue(ts, "0");
} else {
return TsValue.EMPTY;
}
}
if (data.size() > 1) {
throw new RuntimeException("Query Result has multiple data points!");

6
ui-ngx/src/app/core/api/entity-data-subscription.ts

@ -165,7 +165,11 @@ export class EntityDataSubscription {
if (key.comparisonResultType === ComparisonResultType.DELTA_ABSOLUTE) {
value = currentVal - prevVal;
} else {
value = (currentVal - prevVal) / prevVal * 100;
if(prevVal === 0){
value = 100;
} else {
value = (currentVal - prevVal) / prevVal * 100;
}
}
} else {
value = '';

Loading…
Cancel
Save