From 1adb36cd477d673e02359941eba5068efe3ee8c5 Mon Sep 17 00:00:00 2001 From: viktorbasanets Date: Mon, 10 Sep 2018 17:15:11 +0300 Subject: [PATCH 1/7] Was added the filds of start-time and end-time --- .../server/service/telemetry/sub/Subscription.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 811c055372..90f606760c 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 @@ -30,9 +30,11 @@ public class Subscription { private final SubscriptionState sub; private final boolean local; private ServerAddress server; + private long startTime; + private long endTime; public Subscription(SubscriptionState sub, boolean local) { - this(sub, local, null); + this(sub, local, null, 0L, 0L); } public String getWsSessionId() { From 4e39ed53fe3b2ed6a21cebdb0f2da67007a09850 Mon Sep 17 00:00:00 2001 From: viktorbasanets Date: Mon, 10 Sep 2018 19:09:12 +0300 Subject: [PATCH 2/7] Minor changes --- .../DefaultTelemetrySubscriptionService.java | 23 +++++++++++++++++-- .../service/telemetry/sub/Subscription.java | 4 ++++ .../server/dao/model/ModelConstants.java | 2 ++ 3 files changed, 27 insertions(+), 2 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 263b4849fa..ed9e5bc641 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 @@ -27,9 +27,11 @@ import org.springframework.util.StringUtils; import org.thingsboard.rule.engine.api.util.DonAsynchron; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.EntityType; +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; +import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.kv.AttributeKvEntry; import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; import org.thingsboard.server.common.data.kv.BaseTsKvQuery; @@ -44,6 +46,8 @@ import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.kv.TsKvQuery; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.dao.attributes.AttributesService; +import org.thingsboard.server.dao.entityview.EntityViewService; +import org.thingsboard.server.dao.model.ModelConstants; import org.thingsboard.server.dao.timeseries.TimeseriesService; import org.thingsboard.server.gen.cluster.ClusterAPIProtos; import org.thingsboard.server.service.cluster.routing.ClusterRoutingService; @@ -97,6 +101,9 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio @Autowired private ClusterRpcService rpcService; + /*@Autowired + private EntityViewService entityViewService;*/ + @Autowired @Lazy private DeviceStateService stateService; @@ -125,17 +132,29 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio @Override public void addLocalWsSubscription(String sessionId, EntityId entityId, SubscriptionState sub) { + String familyName = ModelConstants.DEVICE_FAMILY_NAME; + + //To do + if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { + familyName = ModelConstants.ENTITY_VIEW_FAMILY_NAME; + //EntityView entityView = entityViewService.findEntityViewById((EntityViewId) entityId) + } + Optional server = routingService.resolveById(entityId); Subscription subscription; if (server.isPresent()) { ServerAddress address = server.get(); - log.trace("[{}] Forwarding subscription [{}] for device [{}] to [{}]", sessionId, sub.getSubscriptionId(), entityId, address); + log.trace("[{}] Forwarding subscription [{}] for " + familyName + " [{}] to [{}]", sessionId, sub.getSubscriptionId(), entityId, address); subscription = new Subscription(sub, true, address); tellNewSubscription(address, sessionId, subscription); } else { - log.trace("[{}] Registering local subscription [{}] for device [{}]", sessionId, sub.getSubscriptionId(), entityId); + log.trace("[{}] Registering local subscription [{}] for " + familyName + " [{}]", sessionId, sub.getSubscriptionId(), entityId); subscription = new Subscription(sub, true); } + + /*if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { + registerSubscription(sessionId, entityId, subscription); + }*/ 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 90f606760c..08440e4bbb 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 @@ -37,6 +37,10 @@ public class Subscription { this(sub, local, null, 0L, 0L); } + public Subscription(SubscriptionState sub, boolean local, ServerAddress server) { + this(sub, local, server, 0L, 0L); + } + public String getWsSessionId() { return getSub().getWsSessionId(); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java index a96f258043..7e9662ebe2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java @@ -131,6 +131,7 @@ public class ModelConstants { * Cassandra device constants. */ public static final String DEVICE_COLUMN_FAMILY_NAME = "device"; + public static final String DEVICE_FAMILY_NAME = "device"; public static final String DEVICE_TENANT_ID_PROPERTY = TENANT_ID_PROPERTY; public static final String DEVICE_CUSTOMER_ID_PROPERTY = CUSTOMER_ID_PROPERTY; public static final String DEVICE_NAME_PROPERTY = "name"; @@ -147,6 +148,7 @@ public class ModelConstants { * Cassandra entityView constants. */ public static final String ENTITY_VIEW_TABLE_FAMILY_NAME = "entity_views"; + public static final String ENTITY_VIEW_FAMILY_NAME = "entity-view"; public static final String ENTITY_VIEW_ENTITY_ID_PROPERTY = ENTITY_ID_COLUMN; public static final String ENTITY_VIEW_TENANT_ID_PROPERTY = TENANT_ID_PROPERTY; public static final String ENTITY_VIEW_CUSTOMER_ID_PROPERTY = CUSTOMER_ID_PROPERTY; From 0501e9d4b4b4e3a3ec15bf1241ac50550481fff8 Mon Sep 17 00:00:00 2001 From: viktorbasanets Date: Mon, 10 Sep 2018 19:53:29 +0300 Subject: [PATCH 3/7] Was modified addLocalWsSubscription(...) --- .../DefaultTelemetrySubscriptionService.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 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 ed9e5bc641..9551f9fe9f 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 @@ -132,14 +132,8 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio @Override public void addLocalWsSubscription(String sessionId, EntityId entityId, SubscriptionState sub) { - String familyName = ModelConstants.DEVICE_FAMILY_NAME; - - //To do - if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { - familyName = ModelConstants.ENTITY_VIEW_FAMILY_NAME; - //EntityView entityView = entityViewService.findEntityViewById((EntityViewId) entityId) - } - + 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()) { @@ -151,10 +145,6 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio log.trace("[{}] Registering local subscription [{}] for " + familyName + " [{}]", sessionId, sub.getSubscriptionId(), entityId); subscription = new Subscription(sub, true); } - - /*if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { - registerSubscription(sessionId, entityId, subscription); - }*/ registerSubscription(sessionId, entityId, subscription); } From 1e1beaaeac53284994781e85867cc6288413661c Mon Sep 17 00:00:00 2001 From: viktorbasanets Date: Tue, 11 Sep 2018 15:13:45 +0300 Subject: [PATCH 4/7] Was modified findLatest(...) method & BaseTimeseriesService(...) constructor for set limit and order by values --- .../thingsboard/server/common/data/kv/BaseReadTsKvQuery.java | 4 ++++ .../server/dao/timeseries/BaseTimeseriesService.java | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) 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 3c48adfc18..739586e3e0 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 @@ -42,4 +42,8 @@ public class BaseReadTsKvQuery extends BaseTsKvQuery implements ReadTsKvQuery { this(key, startTs, endTs, endTs - startTs, 1, Aggregation.AVG, "DESC"); } + public BaseReadTsKvQuery(String key, long startTs, long endTs, int limit, String orderBy) { + this(key, startTs, endTs, endTs - startTs, limit, Aggregation.AVG, orderBy); + } + } 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 605c9410f6..3829df6904 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 @@ -75,7 +75,10 @@ public class BaseTimeseriesService implements TimeseriesService { 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()))); + + matchingKeys.forEach(key -> queries.add( + new BaseReadTsKvQuery(key, entityView.getStartTs(), entityView.getEndTs(), 1, "ASC"))); + return timeseriesDao.findAllAsync(entityView.getEntityId(), updateQueriesForEntityView(entityView, queries)); } keys.forEach(key -> futures.add(timeseriesDao.findLatest(entityId, key))); From 770253a32ce950225d8da9836814cc71eb2a3de6 Mon Sep 17 00:00:00 2001 From: viktorbasanets Date: Tue, 11 Sep 2018 15:59:00 +0300 Subject: [PATCH 5/7] Was fixed the type of startTs & endTs fields of EntityViewEntity class and queries of schemas db tables --- .../main/data/upgrade/2.1.1/schema_update.cql | 20 +++++++++---------- .../main/data/upgrade/2.1.1/schema_update.sql | 4 ++-- .../server/dao/model/ModelConstants.java | 4 ++-- .../dao/model/nosql/EntityViewEntity.java | 16 +++++++-------- .../dao/model/sql/EntityViewEntity.java | 16 +++++++-------- dao/src/main/resources/cassandra/schema.cql | 12 +++++------ dao/src/main/resources/sql/schema.sql | 4 ++-- 7 files changed, 38 insertions(+), 38 deletions(-) diff --git a/application/src/main/data/upgrade/2.1.1/schema_update.cql b/application/src/main/data/upgrade/2.1.1/schema_update.cql index 1329a0b546..e0cff4108f 100644 --- a/application/src/main/data/upgrade/2.1.1/schema_update.cql +++ b/application/src/main/data/upgrade/2.1.1/schema_update.cql @@ -29,8 +29,8 @@ CREATE TABLE IF NOT EXISTS thingsboard.entity_views ( customer_id timeuuid, name text, keys text, - ts_begin bigint, - ts_end bigint, + start_ts bigint, + end_ts bigint, search_text text, additional_info text, PRIMARY KEY (id, entity_id, tenant_id, customer_id) @@ -43,8 +43,8 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_na AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL - AND ts_begin IS NOT NULL - AND ts_end IS NOT NULL + AND start_ts IS NOT NULL + AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, name, id, entity_id, customer_id) @@ -57,8 +57,8 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_en AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL - AND ts_begin IS NOT NULL - AND ts_end IS NOT NULL + AND start_ts IS NOT NULL + AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, entity_id, id, customer_id, name) @@ -71,8 +71,8 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_cu AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL - AND ts_begin IS NOT NULL - AND ts_end IS NOT NULL + AND start_ts IS NOT NULL + AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, customer_id, id, entity_id, name) @@ -85,8 +85,8 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_cu AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL - AND ts_begin IS NOT NULL - AND ts_end IS NOT NULL + AND start_ts IS NOT NULL + AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, customer_id, entity_id, id, name) diff --git a/application/src/main/data/upgrade/2.1.1/schema_update.sql b/application/src/main/data/upgrade/2.1.1/schema_update.sql index 3670aad035..bd2c341e7f 100644 --- a/application/src/main/data/upgrade/2.1.1/schema_update.sql +++ b/application/src/main/data/upgrade/2.1.1/schema_update.sql @@ -24,8 +24,8 @@ CREATE TABLE IF NOT EXISTS entity_views ( customer_id varchar(31), name varchar(255), keys varchar(255), - ts_begin varchar(255), - ts_end varchar(255), + start_ts bigint, + end_ts bigint, search_text varchar(255), additional_info varchar ); diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java index 7e9662ebe2..a6787d0520 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java @@ -156,8 +156,8 @@ public class ModelConstants { public static final String ENTITY_VIEW_TYPE_PROPERTY = DEVICE_TYPE_PROPERTY; public static final String ENTITY_VIEW_TENANT_AND_NAME_VIEW_NAME = "entity_view_by_tenant_and_name"; public static final String ENTITY_VIEW_KEYS_PROPERTY = "keys"; - public static final String ENTITY_VIEW_TS_BEGIN_PROPERTY = "ts_begin"; - public static final String ENTITY_VIEW_TS_END_PROPERTY = "ts_end"; + public static final String ENTITY_VIEW_START_TS_PROPERTY = "start_ts"; + public static final String ENTITY_VIEW_END_TS_PROPERTY = "end_ts"; public static final String ENTITY_VIEW_ADDITIONAL_INFO_PROPERTY = ADDITIONAL_INFO_PROPERTY; public static final String ENTITY_VIEW_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME = "entity_view_by_tenant_and_search_text"; 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 3f7571363a..91cd2ea563 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 @@ -75,11 +75,11 @@ public class EntityViewEntity implements SearchTextEntity { @Column(name = ModelConstants.ENTITY_VIEW_KEYS_PROPERTY) private String keys; - @Column(name = ModelConstants.ENTITY_VIEW_TS_BEGIN_PROPERTY) - private String tsBegin; + @Column(name = ModelConstants.ENTITY_VIEW_START_TS_PROPERTY) + private long startTs; - @Column(name = ModelConstants.ENTITY_VIEW_TS_END_PROPERTY) - private String tsEnd; + @Column(name = ModelConstants.ENTITY_VIEW_END_TS_PROPERTY) + private long endTs; @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; @@ -114,8 +114,8 @@ public class EntityViewEntity implements SearchTextEntity { } catch (IOException e) { e.printStackTrace(); } - this.tsBegin = entityView.getStartTs() != 0L ? String.valueOf(entityView.getStartTs()) : "0"; - this.tsEnd = entityView.getEndTs() != 0L ? String.valueOf(entityView.getEndTs()) : "0"; + this.startTs = entityView.getStartTs() != 0L ? entityView.getStartTs() : 0L; + this.endTs = entityView.getEndTs() != 0L ? entityView.getEndTs() : 0L; this.searchText = entityView.getSearchText(); this.additionalInfo = entityView.getAdditionalInfo(); } @@ -144,8 +144,8 @@ public class EntityViewEntity implements SearchTextEntity { } catch (IOException e) { e.printStackTrace(); } - entityView.setStartTs(Long.parseLong(tsBegin)); - entityView.setEndTs(Long.parseLong(tsEnd)); + entityView.setStartTs(startTs); + entityView.setEndTs(endTs); entityView.setAdditionalInfo(additionalInfo); return entityView; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java index a89d3dec84..9492f191db 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityViewEntity.java @@ -66,11 +66,11 @@ public class EntityViewEntity extends BaseSqlEntity implements Searc @Column(name = ModelConstants.ENTITY_VIEW_KEYS_PROPERTY) private String keys; - @Column(name = ModelConstants.ENTITY_VIEW_TS_BEGIN_PROPERTY) - private String tsBegin; + @Column(name = ModelConstants.ENTITY_VIEW_START_TS_PROPERTY) + private long startTs; - @Column(name = ModelConstants.ENTITY_VIEW_TS_END_PROPERTY) - private String tsEnd; + @Column(name = ModelConstants.ENTITY_VIEW_END_TS_PROPERTY) + private long endTs; @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) private String searchText; @@ -105,8 +105,8 @@ public class EntityViewEntity extends BaseSqlEntity implements Searc } catch (IOException e) { e.printStackTrace(); } - this.tsBegin = entityView.getStartTs() != 0L ? String.valueOf(entityView.getStartTs()) : "0"; - this.tsEnd = entityView.getEndTs() != 0L ? String.valueOf(entityView.getEndTs()) : "0"; + this.startTs = entityView.getStartTs() != 0L ? entityView.getStartTs() : 0L; + this.endTs = entityView.getEndTs() != 0L ? entityView.getEndTs() : 0L; this.searchText = entityView.getSearchText(); this.additionalInfo = entityView.getAdditionalInfo(); } @@ -141,8 +141,8 @@ public class EntityViewEntity extends BaseSqlEntity implements Searc } catch (IOException e) { e.printStackTrace(); } - entityView.setStartTs(Long.parseLong(tsBegin)); - entityView.setEndTs(Long.parseLong(tsEnd)); + entityView.setStartTs(startTs); + entityView.setEndTs(endTs); entityView.setAdditionalInfo(additionalInfo); return entityView; } diff --git a/dao/src/main/resources/cassandra/schema.cql b/dao/src/main/resources/cassandra/schema.cql index 89df266d75..3cefacb970 100644 --- a/dao/src/main/resources/cassandra/schema.cql +++ b/dao/src/main/resources/cassandra/schema.cql @@ -647,8 +647,8 @@ CREATE TABLE IF NOT EXISTS thingsboard.entity_views ( customer_id timeuuid, name text, keys text, - ts_begin bigint, - ts_end bigint, + start_ts bigint, + end_ts bigint, search_text text, additional_info text, PRIMARY KEY (id, tenant_id, customer_id) @@ -657,27 +657,27 @@ CREATE TABLE IF NOT EXISTS thingsboard.entity_views ( CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_name AS SELECT * from thingsboard.entity_views - WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND ts_begin IS NOT NULL AND ts_end IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL + WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND start_ts IS NOT NULL AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, name, id, entity_id, customer_id) WITH CLUSTERING ORDER BY (name ASC, id DESC, entity_id DESC, customer_id DESC); CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_entity AS SELECT * from thingsboard.entity_views - WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND ts_begin IS NOT NULL AND ts_end IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL + WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND start_ts IS NOT NULL AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, entity_id, id, customer_id, name) WITH CLUSTERING ORDER BY (entity_id ASC, customer_id ASC, id DESC, name DESC); CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_customer AS SELECT * from thingsboard.entity_views - WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND ts_begin IS NOT NULL AND ts_end IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL + WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND start_ts IS NOT NULL AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, customer_id, id, entity_id, name) WITH CLUSTERING ORDER BY (customer_id ASC, id DESC, entity_id DESC, name DESC); CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.entity_views_by_tenant_and_customer_and_entity AS SELECT * from thingsboard.entity_views - WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND ts_begin IS NOT NULL AND ts_end IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL + WHERE entity_id IS NOT NULL AND tenant_id IS NOT NULL AND customer_id IS NOT NULL AND keys IS NOT NULL AND start_ts IS NOT NULL AND end_ts IS NOT NULL AND name IS NOT NULL AND id IS NOT NULL PRIMARY KEY (tenant_id, customer_id, entity_id, id, name) WITH CLUSTERING ORDER BY (customer_id ASC, entity_id DESC, id DESC, name DESC); diff --git a/dao/src/main/resources/sql/schema.sql b/dao/src/main/resources/sql/schema.sql index ed3583cef3..a3197b7e2f 100644 --- a/dao/src/main/resources/sql/schema.sql +++ b/dao/src/main/resources/sql/schema.sql @@ -260,8 +260,8 @@ CREATE TABLE IF NOT EXISTS entity_views ( customer_id varchar(31), name varchar(255), keys varchar(255), - ts_begin varchar(255), - ts_end varchar(255), + start_ts bigint, + end_ts bigint, search_text varchar(255), additional_info varchar ); From cb087d0b53ff3d35b8954c0c73e6ee0bfc8734ad Mon Sep 17 00:00:00 2001 From: viktorbasanets Date: Tue, 11 Sep 2018 17:18:51 +0300 Subject: [PATCH 6/7] For testing of entiti-view controller --- .../thingsboard/server/controller/ControllerSqlTestSuite.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c8a5da8151..a9e94e9184 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.*Test", + "org.thingsboard.server.controller.sql.EntityViewControllerSqlTest", }) public class ControllerSqlTestSuite { From 20e3dc254b9b5a9302a6c8ba4a41b8af7033da3b Mon Sep 17 00:00:00 2001 From: viktorbasanets Date: Tue, 11 Sep 2018 17:21:11 +0300 Subject: [PATCH 7/7] To repair the cache --- .../server/dao/entityview/EntityViewServiceImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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 e90767695d..5646ac9f53 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 @@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.thingsboard.server.common.data.Customer; @@ -88,7 +89,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti @Autowired private CacheManager cacheManager; -// @Cacheable(cacheNames = ENTITY_VIEW_CACHE, key = "{#entityViewId}") + @Cacheable(cacheNames = ENTITY_VIEW_CACHE) @Override public EntityView findEntityViewById(EntityViewId entityViewId) { log.trace("Executing findEntityViewById [{}]", entityViewId); @@ -104,7 +105,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti .orElse(null); } -// @CacheEvict(cacheNames = ENTITY_VIEW_CACHE, key = "{#entityView.id}") + @CachePut(cacheNames = ENTITY_VIEW_CACHE) @Override public EntityView saveEntityView(EntityView entityView) { log.trace("Executing save entity view [{}]", entityView); @@ -136,7 +137,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti List list = new ArrayList<>(); list.add(entityView.getTenantId()); list.add(entityView.getName()); -// cache.evict(list); + cache.evict(list); entityViewDao.removeById(entityViewId.getId()); } @@ -149,7 +150,7 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti return new TextPageData<>(entityViews, pageLink); } -// @Cacheable(cacheNames = ENTITY_VIEW_CACHE, key = "{#tenantId, #entityId, #pageLink}") + @Cacheable(cacheNames = ENTITY_VIEW_CACHE) @Override public TextPageData findEntityViewByTenantIdAndEntityId(TenantId tenantId, EntityId entityId, TextPageLink pageLink) { @@ -189,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,