Commit 45479a79f9a9d17895c930e36553f372aeb4110b

Authored by Andrii Shvaika
1 parent accd9867

Basic Structures

Showing 25 changed files with 249 additions and 37 deletions
... ... @@ -55,12 +55,12 @@ import org.thingsboard.server.service.subscription.TbLocalSubscriptionService;
55 55 import org.thingsboard.server.service.subscription.TbAttributeSubscriptionScope;
56 56 import org.thingsboard.server.service.subscription.TbAttributeSubscription;
57 57 import org.thingsboard.server.service.subscription.TbTimeseriesSubscription;
58   -import org.thingsboard.server.service.telemetry.cmd.AttributesSubscriptionCmd;
59   -import org.thingsboard.server.service.telemetry.cmd.GetHistoryCmd;
60   -import org.thingsboard.server.service.telemetry.cmd.SubscriptionCmd;
61   -import org.thingsboard.server.service.telemetry.cmd.TelemetryPluginCmd;
  58 +import org.thingsboard.server.service.telemetry.cmd.v1.AttributesSubscriptionCmd;
  59 +import org.thingsboard.server.service.telemetry.cmd.v1.GetHistoryCmd;
  60 +import org.thingsboard.server.service.telemetry.cmd.v1.SubscriptionCmd;
  61 +import org.thingsboard.server.service.telemetry.cmd.v1.TelemetryPluginCmd;
62 62 import org.thingsboard.server.service.telemetry.cmd.TelemetryPluginCmdsWrapper;
63   -import org.thingsboard.server.service.telemetry.cmd.TimeseriesSubscriptionCmd;
  63 +import org.thingsboard.server.service.telemetry.cmd.v1.TimeseriesSubscriptionCmd;
64 64 import org.thingsboard.server.service.telemetry.exception.UnauthorizedException;
65 65 import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode;
66 66 import org.thingsboard.server.service.telemetry.sub.SubscriptionUpdate;
... ...
... ... @@ -5,7 +5,7 @@
5 5 * you may not use this file except in compliance with the License.
6 6 * You may obtain a copy of the License at
7 7 *
8   - * http://www.apache.org/licenses/LICENSE-2.0
  8 + * http://www.apache.org/licenses/LICENSE-2.0
9 9 *
10 10 * Unless required by applicable law or agreed to in writing, software
11 11 * distributed under the License is distributed on an "AS IS" BASIS,
... ... @@ -15,11 +15,19 @@
15 15 */
16 16 package org.thingsboard.server.service.telemetry.cmd;
17 17
  18 +import lombok.Data;
  19 +import org.thingsboard.server.service.telemetry.cmd.v1.AttributesSubscriptionCmd;
  20 +import org.thingsboard.server.service.telemetry.cmd.v1.GetHistoryCmd;
  21 +import org.thingsboard.server.service.telemetry.cmd.v1.TimeseriesSubscriptionCmd;
  22 +import org.thingsboard.server.service.telemetry.cmd.v2.EntityDataCmd;
  23 +import org.thingsboard.server.service.telemetry.cmd.v2.EntityDataUnsubscribeCmd;
  24 +
18 25 import java.util.List;
19 26
20 27 /**
21 28 * @author Andrew Shvayka
22 29 */
  30 +@Data
23 31 public class TelemetryPluginCmdsWrapper {
24 32
25 33 private List<AttributesSubscriptionCmd> attrSubCmds;
... ... @@ -28,31 +36,8 @@ public class TelemetryPluginCmdsWrapper {
28 36
29 37 private List<GetHistoryCmd> historyCmds;
30 38
31   - public TelemetryPluginCmdsWrapper() {
32   - super();
33   - }
34   -
35   - public List<AttributesSubscriptionCmd> getAttrSubCmds() {
36   - return attrSubCmds;
37   - }
38   -
39   - public void setAttrSubCmds(List<AttributesSubscriptionCmd> attrSubCmds) {
40   - this.attrSubCmds = attrSubCmds;
41   - }
42   -
43   - public List<TimeseriesSubscriptionCmd> getTsSubCmds() {
44   - return tsSubCmds;
45   - }
46   -
47   - public void setTsSubCmds(List<TimeseriesSubscriptionCmd> tsSubCmds) {
48   - this.tsSubCmds = tsSubCmds;
49   - }
  39 + private List<EntityDataCmd> entityDataCmds;
50 40
51   - public List<GetHistoryCmd> getHistoryCmds() {
52   - return historyCmds;
53   - }
  41 + private List<EntityDataUnsubscribeCmd> entityDataUnsubscribeCmds;
54 42
55   - public void setHistoryCmds(List<GetHistoryCmd> historyCmds) {
56   - this.historyCmds = historyCmds;
57   - }
58 43 }
... ...
application/src/main/java/org/thingsboard/server/service/telemetry/cmd/v1/AttributesSubscriptionCmd.java renamed from application/src/main/java/org/thingsboard/server/service/telemetry/cmd/AttributesSubscriptionCmd.java
... ... @@ -13,7 +13,7 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.server.service.telemetry.cmd;
  16 +package org.thingsboard.server.service.telemetry.cmd.v1;
17 17
18 18 import lombok.NoArgsConstructor;
19 19 import org.thingsboard.server.service.telemetry.TelemetryFeature;
... ...
application/src/main/java/org/thingsboard/server/service/telemetry/cmd/v1/GetHistoryCmd.java renamed from application/src/main/java/org/thingsboard/server/service/telemetry/cmd/GetHistoryCmd.java
... ... @@ -13,7 +13,7 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.server.service.telemetry.cmd;
  16 +package org.thingsboard.server.service.telemetry.cmd.v1;
17 17
18 18 import lombok.AllArgsConstructor;
19 19 import lombok.Data;
... ...
application/src/main/java/org/thingsboard/server/service/telemetry/cmd/v1/SubscriptionCmd.java renamed from application/src/main/java/org/thingsboard/server/service/telemetry/cmd/SubscriptionCmd.java
... ... @@ -13,7 +13,7 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.server.service.telemetry.cmd;
  16 +package org.thingsboard.server.service.telemetry.cmd.v1;
17 17
18 18 import lombok.AllArgsConstructor;
19 19 import lombok.Data;
... ...
application/src/main/java/org/thingsboard/server/service/telemetry/cmd/v1/TelemetryPluginCmd.java renamed from application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TelemetryPluginCmd.java
... ... @@ -13,7 +13,7 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.server.service.telemetry.cmd;
  16 +package org.thingsboard.server.service.telemetry.cmd.v1;
17 17
18 18 /**
19 19 * @author Andrew Shvayka
... ...
application/src/main/java/org/thingsboard/server/service/telemetry/cmd/v1/TimeseriesSubscriptionCmd.java renamed from application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TimeseriesSubscriptionCmd.java
... ... @@ -13,7 +13,7 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.server.service.telemetry.cmd;
  16 +package org.thingsboard.server.service.telemetry.cmd.v1;
17 17
18 18 import lombok.AllArgsConstructor;
19 19 import lombok.Data;
... ...
  1 +package org.thingsboard.server.service.telemetry.cmd.v2;
  2 +
  3 +import lombok.Data;
  4 +import org.thingsboard.server.common.data.query.EntityDataQuery;
  5 +
  6 +@Data
  7 +public class EntityDataCmd {
  8 +
  9 + private final int cmdId;
  10 + private final EntityDataQuery query;
  11 + private final EntityHistoryCmd historyCmd;
  12 + private final LatestValueCmd latestCmd;
  13 + private final TimeSeriesCmd tsCmd;
  14 +
  15 +}
... ...
  1 +package org.thingsboard.server.service.telemetry.cmd.v2;
  2 +
  3 +import lombok.Data;
  4 +
  5 +@Data
  6 +public class EntityDataUnsubscribeCmd {
  7 +
  8 + private final int cmdId;
  9 +
  10 +}
... ...
  1 +package org.thingsboard.server.service.telemetry.cmd.v2;
  2 +
  3 +import lombok.Data;
  4 +import org.thingsboard.server.common.data.page.PageData;
  5 +import org.thingsboard.server.common.data.query.EntityData;
  6 +
  7 +import java.util.List;
  8 +
  9 +@Data
  10 +public class EntityDataUpdate {
  11 +
  12 + private final int cmdId;
  13 + private final PageData<EntityData> data;
  14 + private final List<EntityData> update;
  15 + private int errorCode;
  16 + private String errorMsg;
  17 +}
... ...
  1 +package org.thingsboard.server.service.telemetry.cmd.v2;
  2 +
  3 +import org.thingsboard.server.common.data.kv.Aggregation;
  4 +
  5 +import java.util.List;
  6 +
  7 +public class EntityHistoryCmd {
  8 +
  9 + private List<String> keys;
  10 + private long startTs;
  11 + private long endTs;
  12 + private long interval;
  13 + private int limit;
  14 + private Aggregation agg;
  15 +
  16 +}
... ...
  1 +package org.thingsboard.server.service.telemetry.cmd.v2;
  2 +
  3 +import org.thingsboard.server.common.data.query.EntityKey;
  4 +
  5 +import java.util.List;
  6 +
  7 +public class LatestValueCmd {
  8 +
  9 + private List<EntityKey> keys;
  10 +
  11 +}
... ...
  1 +package org.thingsboard.server.service.telemetry.cmd.v2;
  2 +
  3 +import java.util.List;
  4 +
  5 +public class TimeSeriesCmd {
  6 +
  7 + private List<String> keys;
  8 + private long startTs;
  9 + private long timeWindow;
  10 + private long interval;
  11 + private int limit;
  12 + private String agg;
  13 +
  14 +}
... ...
... ... @@ -5,7 +5,7 @@
5 5 * you may not use this file except in compliance with the License.
6 6 * You may obtain a copy of the License at
7 7 *
8   - * http://www.apache.org/licenses/LICENSE-2.0
  8 + * http://www.apache.org/licenses/LICENSE-2.0
9 9 *
10 10 * Unless required by applicable law or agreed to in writing, software
11 11 * distributed under the License is distributed on an "AS IS" BASIS,
... ... @@ -18,6 +18,10 @@ package org.thingsboard.server.dao.entity;
18 18 import com.google.common.util.concurrent.ListenableFuture;
19 19 import org.thingsboard.server.common.data.id.EntityId;
20 20 import org.thingsboard.server.common.data.id.TenantId;
  21 +import org.thingsboard.server.common.data.page.PageData;
  22 +import org.thingsboard.server.common.data.query.EntityCountQuery;
  23 +import org.thingsboard.server.common.data.query.EntityData;
  24 +import org.thingsboard.server.common.data.query.EntityDataQuery;
21 25
22 26 public interface EntityService {
23 27
... ... @@ -25,4 +29,8 @@ public interface EntityService {
25 29
26 30 void deleteEntityRelations(TenantId tenantId, EntityId entityId);
27 31
  32 + long countEntitiesByQuery(TenantId tenantId, EntityCountQuery query);
  33 +
  34 + PageData<EntityData> findEntityDataByQuery(TenantId tenantId, EntityDataQuery query);
  35 +
28 36 }
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +import lombok.Getter;
  4 +
  5 +public class EntityCountQuery {
  6 +
  7 + @Getter
  8 + private final EntityFilter entityFilter;
  9 +
  10 + public EntityCountQuery(EntityFilter entityFilter) {
  11 + this.entityFilter = entityFilter;
  12 + }
  13 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +import lombok.Data;
  4 +import org.thingsboard.server.common.data.id.EntityId;
  5 +
  6 +import java.util.Map;
  7 +
  8 +@Data
  9 +public class EntityData {
  10 +
  11 + private final EntityId entityId;
  12 + private final Map<EntityKeyType, Map<String, TsValue>> latest;
  13 + private final Map<String, TsValue[]> timeseries;
  14 +
  15 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +import lombok.Data;
  4 +import org.thingsboard.server.common.data.page.SortOrder;
  5 +
  6 +@Data
  7 +public class EntityDataPageLink {
  8 +
  9 + private final int pageSize;
  10 + private final int page;
  11 + private final SortOrder sortOrder;
  12 +
  13 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +import lombok.Getter;
  4 +
  5 +import java.util.List;
  6 +
  7 +public class EntityDataQuery extends EntityCountQuery {
  8 +
  9 + @Getter
  10 + private final EntityDataPageLink pageLink;
  11 + @Getter
  12 + private final List<EntityKey> entityFields;
  13 + @Getter
  14 + private final List<EntityKey> latestValues;
  15 +
  16 + public EntityDataQuery(EntityFilter entityFilter, EntityDataPageLink pageLink, List<EntityKey> entityFields, List<EntityKey> latestValues) {
  17 + super(entityFilter);
  18 + this.pageLink = pageLink;
  19 + this.entityFields = entityFields;
  20 + this.latestValues = latestValues;
  21 + }
  22 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +public interface EntityFilter {
  4 +
  5 + EntityFilterType getType();
  6 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +public enum EntityFilterType {
  4 + SINGLE_ENTITY("singleEntity"),
  5 + ENTITY_LIST("entityList"),
  6 + ENTITY_NAME("entityName");
  7 +// stateEntity = 'stateEntity',
  8 +// assetType = 'assetType',
  9 +// deviceType = 'deviceType',
  10 +// entityViewType = 'entityViewType',
  11 +// relationsQuery = 'relationsQuery',
  12 +// assetSearchQuery = 'assetSearchQuery',
  13 +// deviceSearchQuery = 'deviceSearchQuery',
  14 +// entityViewSearchQuery = 'entityViewSearchQuery'
  15 +
  16 + private final String label;
  17 +
  18 + EntityFilterType(String label) {
  19 + this.label = label;
  20 + }
  21 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +public class EntityKey {
  4 + private EntityKeyType type;
  5 + private String key;
  6 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +public enum EntityKeyType {
  4 + CLIENT_ATTRIBUTE,
  5 + SHARED_ATTRIBUTE,
  6 + SERVER_ATTRIBUTE,
  7 + TIMESERIES,
  8 + ENTITY_FIELD;
  9 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +import lombok.Data;
  4 +import org.thingsboard.server.common.data.id.EntityId;
  5 +
  6 +@Data
  7 +public class SingleEntityFilter implements EntityFilter {
  8 + @Override
  9 + public EntityFilterType getType() {
  10 + return EntityFilterType.SINGLE_ENTITY;
  11 + }
  12 +
  13 + private EntityId singleEntity;
  14 +
  15 +}
... ...
  1 +package org.thingsboard.server.common.data.query;
  2 +
  3 +import lombok.Data;
  4 +
  5 +@Data
  6 +public class TsValue {
  7 +
  8 + private final long ts;
  9 + private final String value;
  10 +}
... ...
... ... @@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.id.EntityViewId;
33 33 import org.thingsboard.server.common.data.id.RuleChainId;
34 34 import org.thingsboard.server.common.data.id.TenantId;
35 35 import org.thingsboard.server.common.data.id.UserId;
  36 +import org.thingsboard.server.common.data.query.EntityDataQuery;
36 37 import org.thingsboard.server.dao.alarm.AlarmService;
37 38 import org.thingsboard.server.dao.asset.AssetService;
38 39 import org.thingsboard.server.dao.customer.CustomerService;
... ... @@ -83,6 +84,11 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
83 84 }
84 85
85 86 @Override
  87 + public long countEntitiesByQuery(TenantId tenantId, EntityDataQuery query) {
  88 + return 0;
  89 + }
  90 +
  91 + @Override
86 92 public ListenableFuture<String> fetchEntityNameAsync(TenantId tenantId, EntityId entityId) {
87 93 log.trace("Executing fetchEntityNameAsync [{}]", entityId);
88 94 ListenableFuture<String> entityName;
... ...