From 09e90b30898575853c020bd4bc55b94f9695a51c Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Wed, 12 Sep 2018 09:08:30 +0300 Subject: [PATCH] Code review fixes --- .../DefaultTelemetrySubscriptionService.java | 12 +--- .../service/telemetry/sub/Subscription.java | 2 +- .../controller/ControllerSqlTestSuite.java | 2 +- .../server/common/data/EntityView.java | 2 +- .../common/data/kv/BaseReadTsKvQuery.java | 2 +- .../dao/entityview/EntityViewServiceImpl.java | 18 +++--- .../dao/timeseries/BaseTimeseriesService.java | 55 +++++++------------ 7 files changed, 34 insertions(+), 59 deletions(-) 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 35455b9f2e..bdf8e747d4 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 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 08440e4bbb..47c80e9aa6 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 a9e94e9184..c8a5da8151 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 d7ab6e3d54..49dd20959f 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 739586e3e0..3e4e8ef7a5 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 5646ac9f53..d2a902b1b2 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 list = new ArrayList<>(); - list.add(entityView.getTenantId()); - list.add(entityView.getName()); - cache.evict(list); +// List 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 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 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 3829df6904..3a1e8db02f 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 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 matchingKeys = chooseKeysForEntityView(entityView, keys); - List queries = new ArrayList<>(); - - matchingKeys.forEach(key -> queries.add( - new BaseReadTsKvQuery(key, entityView.getStartTs(), entityView.getEndTs(), 1, "ASC"))); + List filteredKeys = new ArrayList<>(keys); + filteredKeys.retainAll(entityView.getKeys().getTimeseries()); + List 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 updateQueriesForEntityView(EntityView entityView, List queries) { - List 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 chooseKeysForEntityView(EntityView entityView, Collection keys) { - Collection 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 {