From 5dc541eabf3a19522cbb0a522468731d1650cd49 Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Wed, 12 Sep 2018 09:34:43 +0300 Subject: [PATCH] Misc fixes --- .../dao/model/nosql/EntityViewEntity.java | 4 +- .../dao/timeseries/BaseTimeseriesService.java | 37 +++++-------------- .../app/entity-view/entity-view.directive.js | 4 +- 3 files changed, 13 insertions(+), 32 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java index 91cd2ea563..0545448e55 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java @@ -114,8 +114,8 @@ public class EntityViewEntity implements SearchTextEntity { } catch (IOException e) { e.printStackTrace(); } - this.startTs = entityView.getStartTs() != 0L ? entityView.getStartTs() : 0L; - this.endTs = entityView.getEndTs() != 0L ? entityView.getEndTs() : 0L; + this.startTs = entityView.getStartTs(); + this.endTs = entityView.getEndTs(); this.searchText = entityView.getSearchText(); this.additionalInfo = entityView.getAdditionalInfo(); } 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 3a1e8db02f..629f93a19b 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 @@ -64,7 +64,7 @@ public class BaseTimeseriesService implements TimeseriesService { EntityView entityView = entityViewService.findEntityViewById((EntityViewId) entityId); List filteredQueries = queries.stream() - .filter(query -> entityView.getKeys().getTimeseries().contains(query.getKey())) + .filter(query -> entityView.getKeys().getTimeseries().isEmpty() || entityView.getKeys().getTimeseries().contains(query.getKey())) .collect(Collectors.toList()); return timeseriesDao.findAllAsync(entityView.getEntityId(), updateQueriesForEntityView(entityView, filteredQueries)); } @@ -79,7 +79,9 @@ public class BaseTimeseriesService implements TimeseriesService { if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { EntityView entityView = entityViewService.findEntityViewById((EntityViewId) entityId); List filteredKeys = new ArrayList<>(keys); - filteredKeys.retainAll(entityView.getKeys().getTimeseries()); + if (!entityView.getKeys().getTimeseries().isEmpty()) { + filteredKeys.retainAll(entityView.getKeys().getTimeseries()); + } List queries = filteredKeys.stream() .map(key -> new BaseReadTsKvQuery(key, entityView.getStartTs(), entityView.getEndTs(), 1, "ASC")) @@ -100,11 +102,6 @@ public class BaseTimeseriesService implements TimeseriesService { @Override public ListenableFuture> save(EntityId entityId, TsKvEntry tsKvEntry) { validate(entityId); - try { - checkForNonEntityView(entityId); - } catch (Exception e) { - e.printStackTrace(); - } if (tsKvEntry == null) { throw new IncorrectParameterException("Key value entry can't be null"); } @@ -115,11 +112,6 @@ public class BaseTimeseriesService implements TimeseriesService { @Override public ListenableFuture> save(EntityId entityId, List tsKvEntries, long ttl) { - try { - checkForNonEntityView(entityId); - } catch (Exception e) { - e.printStackTrace(); - } List> futures = Lists.newArrayListWithExpectedSize(tsKvEntries.size() * INSERTS_PER_ENTRY); for (TsKvEntry tsKvEntry : tsKvEntries) { if (tsKvEntry == null) { @@ -131,10 +123,8 @@ public class BaseTimeseriesService implements TimeseriesService { } private void saveAndRegisterFutures(List> futures, EntityId entityId, TsKvEntry tsKvEntry, long ttl) { - try { - checkForNonEntityView(entityId); - } catch (Exception e) { - e.printStackTrace(); + if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { + throw new IncorrectParameterException("Telemetry data can't be stored for entity view. Only read only"); } futures.add(timeseriesDao.savePartition(entityId, tsKvEntry.getTs(), tsKvEntry.getKey(), ttl)); futures.add(timeseriesDao.saveLatest(entityId, tsKvEntry)); @@ -145,7 +135,9 @@ public class BaseTimeseriesService implements TimeseriesService { 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); + + return startTs <= query.getStartTs() && endTs >= query.getEndTs() ? query : + new BaseReadTsKvQuery(query.getKey(), startTs, endTs, query.getInterval(), query.getLimit(), query.getAggregation()); }).collect(Collectors.toList()); } @@ -187,15 +179,4 @@ public class BaseTimeseriesService implements TimeseriesService { throw new IncorrectParameterException("Incorrect DeleteTsKvQuery. Key can't be empty"); } } - - private ReadTsKvQuery updateQuery(Long startTs, Long endTs, ReadTsKvQuery query) { - return startTs <= query.getStartTs() && endTs >= query.getEndTs() ? query : - new BaseReadTsKvQuery(query.getKey(), startTs, endTs, query.getInterval(), query.getLimit(), query.getAggregation()); - } - - private static void checkForNonEntityView(EntityId entityId) throws Exception { - if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { - throw new Exception("Entity-views were read only"); - } - } } diff --git a/ui/src/app/entity-view/entity-view.directive.js b/ui/src/app/entity-view/entity-view.directive.js index e31b0d4acc..c4a35d8cc5 100644 --- a/ui/src/app/entity-view/entity-view.directive.js +++ b/ui/src/app/entity-view/entity-view.directive.js @@ -85,11 +85,11 @@ export default function EntityViewDirective($compile, $templateCache, $filter, t function updateMinMaxDates() { if (scope.endTs) { - scope.maxStartTs = angular.copy(new Date(scope.endTs.getTime() - 1000)); + scope.maxStartTs = angular.copy(new Date(scope.endTs.getTime())); scope.entityView.endTs = scope.endTs.getTime(); } if (scope.startTs) { - scope.minEndTs = angular.copy(new Date(scope.startTs.getTime() + 1000)); + scope.minEndTs = angular.copy(new Date(scope.startTs.getTime())); scope.entityView.startTs = scope.startTs.getTime(); } }