Details
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java
index 35455b9..bdf8e74 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java
@@ -33,11 +33,8 @@ import org.thingsboard.server.common.data.EntityView;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EntityIdFactory;
-//<<<<<<< HEAD
import org.thingsboard.server.common.data.id.EntityViewId;
-//=======
import org.thingsboard.server.common.data.id.TenantId;
-//>>>>>>> d909192071880b7af2137333142bc62ece369ec1
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
import org.thingsboard.server.common.data.kv.BaseReadTsKvQuery;
@@ -108,9 +105,6 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
@Autowired
private ClusterRpcService rpcService;
- /*@Autowired
- private EntityViewService entityViewService;*/
-
@Autowired
@Lazy
private DeviceStateService stateService;
@@ -143,17 +137,15 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
@Override
public void addLocalWsSubscription(String sessionId, EntityId entityId, SubscriptionState sub) {
- String familyName = entityId.getEntityType().equals(EntityType.ENTITY_VIEW)
- ? ModelConstants.ENTITY_VIEW_FAMILY_NAME : ModelConstants.DEVICE_FAMILY_NAME;
Optional<ServerAddress> server = routingService.resolveById(entityId);
Subscription subscription;
if (server.isPresent()) {
ServerAddress address = server.get();
- log.trace("[{}] Forwarding subscription [{}] for " + familyName + " [{}] to [{}]", sessionId, sub.getSubscriptionId(), entityId, address);
+ log.trace("[{}] Forwarding subscription [{}] for [{}] entity [{}] to [{}]", sessionId, sub.getSubscriptionId(), entityId.getEntityType().name(), entityId, address);
subscription = new Subscription(sub, true, address);
tellNewSubscription(address, sessionId, subscription);
} else {
- log.trace("[{}] Registering local subscription [{}] for " + familyName + " [{}]", sessionId, sub.getSubscriptionId(), entityId);
+ log.trace("[{}] Registering local subscription [{}] for [{}] entity [{}]", sessionId, sub.getSubscriptionId(), entityId.getEntityType().name(), entityId);
subscription = new Subscription(sub, true);
}
registerSubscription(sessionId, entityId, subscription);
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/sub/Subscription.java b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/Subscription.java
index 08440e4..47c80e9 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/sub/Subscription.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/Subscription.java
@@ -34,7 +34,7 @@ public class Subscription {
private long endTime;
public Subscription(SubscriptionState sub, boolean local) {
- this(sub, local, null, 0L, 0L);
+ this(sub, local, null);
}
public Subscription(SubscriptionState sub, boolean local, ServerAddress server) {
diff --git a/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java b/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java
index a9e94e9..c8a5da8 100644
--- a/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java
+++ b/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java
@@ -24,7 +24,7 @@ import java.util.Arrays;
@RunWith(ClasspathSuite.class)
@ClasspathSuite.ClassnameFilters({
- "org.thingsboard.server.controller.sql.EntityViewControllerSqlTest",
+ "org.thingsboard.server.controller.sql.*Test",
})
public class ControllerSqlTestSuite {
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java b/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java
index d7ab6e3..49dd209 100644
--- a/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java
+++ b/common/data/src/main/java/org/thingsboard/server/common/data/EntityView.java
@@ -1,4 +1,4 @@
- /**
+/**
* Copyright © 2016-2018 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java
index 739586e..3e4e8ef 100644
--- a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java
+++ b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java
@@ -43,7 +43,7 @@ public class BaseReadTsKvQuery extends BaseTsKvQuery implements ReadTsKvQuery {
}
public BaseReadTsKvQuery(String key, long startTs, long endTs, int limit, String orderBy) {
- this(key, startTs, endTs, endTs - startTs, limit, Aggregation.AVG, orderBy);
+ this(key, startTs, endTs, endTs - startTs, limit, Aggregation.NONE, orderBy);
}
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java
index 5646ac9..d2a902b 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java
@@ -89,7 +89,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
@Autowired
private CacheManager cacheManager;
- @Cacheable(cacheNames = ENTITY_VIEW_CACHE)
+// @Cacheable(cacheNames = ENTITY_VIEW_CACHE)
@Override
public EntityView findEntityViewById(EntityViewId entityViewId) {
log.trace("Executing findEntityViewById [{}]", entityViewId);
@@ -105,7 +105,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
.orElse(null);
}
- @CachePut(cacheNames = ENTITY_VIEW_CACHE)
+// @CachePut(cacheNames = ENTITY_VIEW_CACHE)
@Override
public EntityView saveEntityView(EntityView entityView) {
log.trace("Executing save entity view [{}]", entityView);
@@ -130,14 +130,14 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
@Override
public void deleteEntityView(EntityViewId entityViewId) {
log.trace("Executing deleteEntityView [{}]", entityViewId);
- Cache cache = cacheManager.getCache(ENTITY_VIEW_CACHE);
+// Cache cache = cacheManager.getCache(ENTITY_VIEW_CACHE);
validateId(entityViewId, INCORRECT_ENTITY_VIEW_ID + entityViewId);
deleteEntityRelations(entityViewId);
EntityView entityView = entityViewDao.findById(entityViewId.getId());
- List<Object> list = new ArrayList<>();
- list.add(entityView.getTenantId());
- list.add(entityView.getName());
- cache.evict(list);
+// List<Object> list = new ArrayList<>();
+// list.add(entityView.getTenantId());
+// list.add(entityView.getName());
+// cache.evict(list);
entityViewDao.removeById(entityViewId.getId());
}
@@ -150,7 +150,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
return new TextPageData<>(entityViews, pageLink);
}
- @Cacheable(cacheNames = ENTITY_VIEW_CACHE)
+// @Cacheable(cacheNames = ENTITY_VIEW_CACHE)
@Override
public TextPageData<EntityView> findEntityViewByTenantIdAndEntityId(TenantId tenantId, EntityId entityId,
TextPageLink pageLink) {
@@ -190,7 +190,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
return new TextPageData<>(entityViews, pageLink);
}
- @Cacheable(cacheNames = ENTITY_VIEW_CACHE, key = "{#tenantId, #customerId, #entityId, #pageLink}")
+// @Cacheable(cacheNames = ENTITY_VIEW_CACHE, key = "{#tenantId, #customerId, #entityId, #pageLink}")
@Override
public TextPageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndEntityId(TenantId tenantId,
CustomerId customerId,
diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java
index 3829df6..3a1e8db 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java
@@ -36,6 +36,7 @@ import org.thingsboard.server.dao.service.Validator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.stream.Collectors;
import static org.apache.commons.lang3.StringUtils.isBlank;
@@ -61,7 +62,11 @@ public class BaseTimeseriesService implements TimeseriesService {
queries.forEach(BaseTimeseriesService::validate);
if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) {
EntityView entityView = entityViewService.findEntityViewById((EntityViewId) entityId);
- return timeseriesDao.findAllAsync(entityView.getEntityId(), updateQueriesForEntityView(entityView, queries));
+ List<ReadTsKvQuery> filteredQueries =
+ queries.stream()
+ .filter(query -> entityView.getKeys().getTimeseries().contains(query.getKey()))
+ .collect(Collectors.toList());
+ return timeseriesDao.findAllAsync(entityView.getEntityId(), updateQueriesForEntityView(entityView, filteredQueries));
}
return timeseriesDao.findAllAsync(entityId, queries);
}
@@ -73,11 +78,12 @@ public class BaseTimeseriesService implements TimeseriesService {
keys.forEach(key -> Validator.validateString(key, "Incorrect key " + key));
if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) {
EntityView entityView = entityViewService.findEntityViewById((EntityViewId) entityId);
- Collection<String> matchingKeys = chooseKeysForEntityView(entityView, keys);
- List<ReadTsKvQuery> queries = new ArrayList<>();
-
- matchingKeys.forEach(key -> queries.add(
- new BaseReadTsKvQuery(key, entityView.getStartTs(), entityView.getEndTs(), 1, "ASC")));
+ List<String> filteredKeys = new ArrayList<>(keys);
+ filteredKeys.retainAll(entityView.getKeys().getTimeseries());
+ List<ReadTsKvQuery> queries =
+ filteredKeys.stream()
+ .map(key -> new BaseReadTsKvQuery(key, entityView.getStartTs(), entityView.getEndTs(), 1, "ASC"))
+ .collect(Collectors.toList());
return timeseriesDao.findAllAsync(entityView.getEntityId(), updateQueriesForEntityView(entityView, queries));
}
@@ -136,34 +142,11 @@ public class BaseTimeseriesService implements TimeseriesService {
}
private List<ReadTsKvQuery> updateQueriesForEntityView(EntityView entityView, List<ReadTsKvQuery> queries) {
- List<ReadTsKvQuery> newQueries = new ArrayList<>();
- entityView.getKeys().getTimeseries()
- .forEach(viewKey -> queries
- .forEach(query -> {
- if (query.getKey().equals(viewKey)) {
- if (entityView.getStartTs() == 0 && entityView.getEndTs() == 0) {
- newQueries.add(updateQuery(query.getStartTs(), query.getEndTs(), viewKey, query));
- } else if (entityView.getStartTs() == 0 && entityView.getEndTs() != 0) {
- newQueries.add(updateQuery(query.getStartTs(), entityView.getEndTs(), viewKey, query));
- } else if (entityView.getStartTs() != 0 && entityView.getEndTs() == 0) {
- newQueries.add(updateQuery(entityView.getStartTs(), query.getEndTs(), viewKey, query));
- } else {
- newQueries.add(updateQuery(entityView.getStartTs(), entityView.getEndTs(), viewKey, query));
- }
- }}));
- return newQueries;
- }
-
- private Collection<String> chooseKeysForEntityView(EntityView entityView, Collection<String> keys) {
- Collection<String> newKeys = new ArrayList<>();
- entityView.getKeys().getTimeseries()
- .forEach(viewKey -> keys
- .forEach(key -> {
- if (key.equals(viewKey)) {
- newKeys.add(key);
- }
- }));
- return newKeys;
+ return queries.stream().map(query -> {
+ long startTs = entityView.getStartTs() == 0 ? query.getStartTs() : entityView.getStartTs();
+ long endTs = entityView.getEndTs() == 0 ? query.getEndTs() : entityView.getEndTs();
+ return updateQuery(startTs, endTs, query);
+ }).collect(Collectors.toList());
}
@Override
@@ -205,9 +188,9 @@ public class BaseTimeseriesService implements TimeseriesService {
}
}
- private static ReadTsKvQuery updateQuery(Long startTs, Long endTs, String viewKey, ReadTsKvQuery query) {
+ private ReadTsKvQuery updateQuery(Long startTs, Long endTs, ReadTsKvQuery query) {
return startTs <= query.getStartTs() && endTs >= query.getEndTs() ? query :
- new BaseReadTsKvQuery(viewKey, startTs, endTs, query.getInterval(), query.getLimit(), query.getAggregation());
+ new BaseReadTsKvQuery(query.getKey(), startTs, endTs, query.getInterval(), query.getLimit(), query.getAggregation());
}
private static void checkForNonEntityView(EntityId entityId) throws Exception {