Use IDs instead of names

This commit is contained in:
Volodymyr Babak 2020-06-10 15:34:10 +03:00
parent c677b1bdc3
commit 1a83dbc8e3
8 changed files with 72 additions and 64 deletions

View File

@ -224,6 +224,7 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
if (targetCtx != null) { if (targetCtx != null) {
log.trace("[{}][{}] Pushing message to target rule node", entityId, targetId); log.trace("[{}][{}] Pushing message to target rule node", entityId, targetId);
pushMsgToNode(targetCtx, msg, ""); pushMsgToNode(targetCtx, msg, "");
pushUpdatesToEdges(msg);
} else { } else {
log.trace("[{}][{}] Rule node does not exist. Probably old message", entityId, targetId); log.trace("[{}][{}] Rule node does not exist. Probably old message", entityId, targetId);
msg.getCallback().onSuccess(); msg.getCallback().onSuccess();
@ -346,7 +347,6 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
private void pushMsgToNode(RuleNodeCtx nodeCtx, TbMsg msg, String fromRelationType) { private void pushMsgToNode(RuleNodeCtx nodeCtx, TbMsg msg, String fromRelationType) {
if (nodeCtx != null) { if (nodeCtx != null) {
pushUpdatesToEdges(msg);
nodeCtx.getSelfActor().tell(new RuleChainToRuleNodeMsg(new DefaultTbContext(systemContext, nodeCtx), msg, fromRelationType), self); nodeCtx.getSelfActor().tell(new RuleChainToRuleNodeMsg(new DefaultTbContext(systemContext, nodeCtx), msg, fromRelationType), self);
} else { } else {
log.error("[{}][{}] RuleNodeCtx is empty", entityId, ruleChainName); log.error("[{}][{}] RuleNodeCtx is empty", entityId, ruleChainName);

View File

@ -274,7 +274,7 @@ public final class EdgeGrpcSession implements Closeable {
, objectMapper.writeValueAsString(entityNode)); , objectMapper.writeValueAsString(entityNode));
log.debug("Sending donwlink entity data msg, entityName [{}], tbMsg [{}]", finalEntityName, tbMsg); log.debug("Sending donwlink entity data msg, entityName [{}], tbMsg [{}]", finalEntityName, tbMsg);
outputStream.onNext(ResponseMsg.newBuilder() outputStream.onNext(ResponseMsg.newBuilder()
.setDownlinkMsg(constructDownlinkEntityDataMsg(finalEntityName, tbMsg)) .setDownlinkMsg(constructDownlinkEntityDataMsg(finalEntityName, finalEntityId, tbMsg))
.build()); .build());
} catch (Exception e) { } catch (Exception e) {
log.error("[{}] Failed to send attribute updates to the edge", edge.getName(), e); log.error("[{}] Failed to send attribute updates to the edge", edge.getName(), e);
@ -291,25 +291,29 @@ public final class EdgeGrpcSession implements Closeable {
log.trace("Executing processCustomDownlinkMessage, entry [{}]", entry); log.trace("Executing processCustomDownlinkMessage, entry [{}]", entry);
TbMsg tbMsg = TbMsg.fromBytes(Base64.decodeBase64(entry.getData()), TbMsgCallback.EMPTY); TbMsg tbMsg = TbMsg.fromBytes(Base64.decodeBase64(entry.getData()), TbMsgCallback.EMPTY);
String entityName = null; String entityName = null;
EntityId entityId = null;
switch (entry.getEntityType()) { switch (entry.getEntityType()) {
case DEVICE: case DEVICE:
Device device = ctx.getDeviceService().findDeviceById(edge.getTenantId(), new DeviceId(tbMsg.getOriginator().getId())); Device device = ctx.getDeviceService().findDeviceById(edge.getTenantId(), new DeviceId(tbMsg.getOriginator().getId()));
entityName = device.getName(); entityName = device.getName();
entityId = device.getId();
break; break;
case ASSET: case ASSET:
Asset asset = ctx.getAssetService().findAssetById(edge.getTenantId(), new AssetId(tbMsg.getOriginator().getId())); Asset asset = ctx.getAssetService().findAssetById(edge.getTenantId(), new AssetId(tbMsg.getOriginator().getId()));
entityName = asset.getName(); entityName = asset.getName();
entityId = asset.getId();
break; break;
case ENTITY_VIEW: case ENTITY_VIEW:
EntityView entityView = ctx.getEntityViewService().findEntityViewById(edge.getTenantId(), new EntityViewId(tbMsg.getOriginator().getId())); EntityView entityView = ctx.getEntityViewService().findEntityViewById(edge.getTenantId(), new EntityViewId(tbMsg.getOriginator().getId()));
entityName = entityView.getName(); entityName = entityView.getName();
entityId = entityView.getId();
break; break;
} }
if (entityName != null) { if (entityName != null && entityId != null) {
log.debug("Sending donwlink entity data msg, entityName [{}], tbMsg [{}]", entityName, tbMsg); log.debug("Sending downlink entity data msg, entityName [{}], tbMsg [{}]", entityName, tbMsg);
outputStream.onNext(ResponseMsg.newBuilder() outputStream.onNext(ResponseMsg.newBuilder()
.setDownlinkMsg(constructDownlinkEntityDataMsg(entityName, tbMsg)) .setDownlinkMsg(constructDownlinkEntityDataMsg(entityName, entityId, tbMsg))
.build()); .build());
} }
} }
@ -482,10 +486,13 @@ public final class EdgeGrpcSession implements Closeable {
} }
} }
private DownlinkMsg constructDownlinkEntityDataMsg(String entityName, TbMsg tbMsg) { private DownlinkMsg constructDownlinkEntityDataMsg(String entityName, EntityId entityId, TbMsg tbMsg) {
EntityDataProto entityData = EntityDataProto.newBuilder() EntityDataProto entityData = EntityDataProto.newBuilder()
.setEntityName(entityName) .setEntityName(entityName)
.setTbMsg(ByteString.copyFrom(TbMsg.toByteArray(tbMsg))).build(); .setTbMsg(ByteString.copyFrom(TbMsg.toByteArray(tbMsg)))
.setEntityIdMSB(entityId.getId().getMostSignificantBits())
.setEntityIdLSB(entityId.getId().getLeastSignificantBits())
.build();
DownlinkMsg.Builder builder = DownlinkMsg.newBuilder() DownlinkMsg.Builder builder = DownlinkMsg.newBuilder()
.addAllEntityData(Collections.singletonList(entityData)); .addAllEntityData(Collections.singletonList(entityData));

View File

@ -28,6 +28,8 @@ public class AssetUpdateMsgConstructor {
public AssetUpdateMsg constructAssetUpdatedMsg(UpdateMsgType msgType, Asset asset) { public AssetUpdateMsg constructAssetUpdatedMsg(UpdateMsgType msgType, Asset asset) {
AssetUpdateMsg.Builder builder = AssetUpdateMsg.newBuilder() AssetUpdateMsg.Builder builder = AssetUpdateMsg.newBuilder()
.setMsgType(msgType) .setMsgType(msgType)
.setIdMSB(asset.getId().getId().getMostSignificantBits())
.setIdLSB(asset.getId().getId().getLeastSignificantBits())
.setName(asset.getName()) .setName(asset.getName())
.setType(asset.getType()); .setType(asset.getType());
if (asset.getLabel() != null) { if (asset.getLabel() != null) {

View File

@ -34,6 +34,8 @@ public class DeviceUpdateMsgConstructor {
public DeviceUpdateMsg constructDeviceUpdatedMsg(UpdateMsgType msgType, Device device) { public DeviceUpdateMsg constructDeviceUpdatedMsg(UpdateMsgType msgType, Device device) {
DeviceUpdateMsg.Builder builder = DeviceUpdateMsg.newBuilder() DeviceUpdateMsg.Builder builder = DeviceUpdateMsg.newBuilder()
.setMsgType(msgType) .setMsgType(msgType)
.setIdMSB(device.getId().getId().getMostSignificantBits())
.setIdLSB(device.getId().getId().getLeastSignificantBits())
.setName(device.getName()) .setName(device.getName())
.setType(device.getType()); .setType(device.getType());
if (device.getLabel() != null) { if (device.getLabel() != null) {

View File

@ -16,16 +16,8 @@
package org.thingsboard.server.service.edge.rpc.constructor; package org.thingsboard.server.service.edge.rpc.constructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.EntityView; import org.thingsboard.server.common.data.EntityView;
import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.id.AssetId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.gen.edge.EdgeEntityType; import org.thingsboard.server.gen.edge.EdgeEntityType;
import org.thingsboard.server.gen.edge.EntityViewUpdateMsg; import org.thingsboard.server.gen.edge.EntityViewUpdateMsg;
import org.thingsboard.server.gen.edge.UpdateMsgType; import org.thingsboard.server.gen.edge.UpdateMsgType;
@ -34,34 +26,27 @@ import org.thingsboard.server.gen.edge.UpdateMsgType;
@Slf4j @Slf4j
public class EntityViewUpdateMsgConstructor { public class EntityViewUpdateMsgConstructor {
@Autowired
private DeviceService deviceService;
@Autowired
private AssetService assetService;
public EntityViewUpdateMsg constructEntityViewUpdatedMsg(UpdateMsgType msgType, EntityView entityView) { public EntityViewUpdateMsg constructEntityViewUpdatedMsg(UpdateMsgType msgType, EntityView entityView) {
String relatedName; EdgeEntityType entityType;
String relatedType; switch (entityView.getEntityId().getEntityType()) {
EdgeEntityType relatedEntityType; case DEVICE:
if (entityView.getEntityId().getEntityType().equals(EntityType.DEVICE)) { entityType = EdgeEntityType.DEVICE;
Device device = deviceService.findDeviceById(entityView.getTenantId(), new DeviceId(entityView.getEntityId().getId())); break;
relatedName = device.getName(); case ASSET:
relatedType = device.getType(); entityType = EdgeEntityType.ASSET;
relatedEntityType = EdgeEntityType.DEVICE; break;
} else { default:
Asset asset = assetService.findAssetById(entityView.getTenantId(), new AssetId(entityView.getEntityId().getId())); throw new RuntimeException("Unsupported entity type [" + entityView.getEntityId().getEntityType() + "]");
relatedName = asset.getName();
relatedType = asset.getType();
relatedEntityType = EdgeEntityType.ASSET;
} }
EntityViewUpdateMsg.Builder builder = EntityViewUpdateMsg.newBuilder() EntityViewUpdateMsg.Builder builder = EntityViewUpdateMsg.newBuilder()
.setMsgType(msgType) .setMsgType(msgType)
.setIdMSB(entityView.getId().getId().getMostSignificantBits())
.setIdLSB(entityView.getId().getId().getLeastSignificantBits())
.setName(entityView.getName()) .setName(entityView.getName())
.setType(entityView.getType()) .setType(entityView.getType())
.setRelatedName(relatedName) .setIdMSB(entityView.getEntityId().getId().getMostSignificantBits())
.setRelatedType(relatedType) .setIdLSB(entityView.getEntityId().getId().getLeastSignificantBits())
.setRelatedEntityType(relatedEntityType); .setEntityType(entityType);
return builder.build(); return builder.build();
} }

View File

@ -35,6 +35,8 @@ public class UserUpdateMsgConstructor {
public UserUpdateMsg constructUserUpdatedMsg(UpdateMsgType msgType, User user) { public UserUpdateMsg constructUserUpdatedMsg(UpdateMsgType msgType, User user) {
UserUpdateMsg.Builder builder = UserUpdateMsg.newBuilder() UserUpdateMsg.Builder builder = UserUpdateMsg.newBuilder()
.setMsgType(msgType) .setMsgType(msgType)
.setIdMSB(user.getId().getId().getMostSignificantBits())
.setIdLSB(user.getId().getId().getLeastSignificantBits())
.setEmail(user.getEmail()) .setEmail(user.getEmail())
.setAuthority(user.getAuthority().name()) .setAuthority(user.getAuthority().name())
.setEnabled(false); .setEnabled(false);

View File

@ -141,7 +141,7 @@ public class EdgeGrpcClient implements EdgeRpcClient {
log.debug("[{}] Entity update message received {}", edgeKey, responseMsg.getEntityUpdateMsg()); log.debug("[{}] Entity update message received {}", edgeKey, responseMsg.getEntityUpdateMsg());
onEntityUpdate.accept(responseMsg.getEntityUpdateMsg()); onEntityUpdate.accept(responseMsg.getEntityUpdateMsg());
} else if (responseMsg.hasDownlinkMsg()) { } else if (responseMsg.hasDownlinkMsg()) {
log.debug("[{}] Downlink message received for rule chain {}", edgeKey, responseMsg.getDownlinkMsg()); log.debug("[{}] Downlink message received {}", edgeKey, responseMsg.getDownlinkMsg());
onDownlink.accept(responseMsg.getDownlinkMsg()); onDownlink.accept(responseMsg.getDownlinkMsg());
} }
} }

View File

@ -99,7 +99,9 @@ enum UpdateMsgType {
message EntityDataProto { message EntityDataProto {
string entityName = 1; string entityName = 1;
string entityType = 2; string entityType = 2;
bytes tbMsg = 3; int64 entityIdMSB = 3;
int64 entityIdLSB = 4;
bytes tbMsg = 5;
} }
message RuleChainUpdateMsg { message RuleChainUpdateMsg {
@ -159,31 +161,37 @@ message DashboardUpdateMsg {
message DeviceUpdateMsg { message DeviceUpdateMsg {
UpdateMsgType msgType = 1; UpdateMsgType msgType = 1;
string name = 2; int64 idMSB = 2;
string type = 3; int64 idLSB = 3;
string label = 4; string name = 4;
string credentialsType = 5; string type = 5;
string credentialsId = 6; string label = 6;
string credentialsValue = 7; string credentialsType = 7;
string groupName = 8; string credentialsId = 8;
string credentialsValue = 9;
string groupName = 10;
} }
message AssetUpdateMsg { message AssetUpdateMsg {
UpdateMsgType msgType = 1; UpdateMsgType msgType = 1;
string name = 2; int64 idMSB = 2;
string type = 3; int64 idLSB = 3;
string label = 4; string name = 4;
string groupName = 5; string type = 5;
string label = 6;
string groupName = 7;
} }
message EntityViewUpdateMsg { message EntityViewUpdateMsg {
UpdateMsgType msgType = 1; UpdateMsgType msgType = 1;
string name = 2; int64 idMSB = 2;
string type = 3; int64 idLSB = 3;
string relatedName = 4; string name = 4;
string relatedType = 5; string type = 5;
EdgeEntityType relatedEntityType = 6; int64 entityIdMSB = 6;
string groupName = 7; int64 entityIdLSB = 7;
EdgeEntityType entityType = 8;
string groupName = 9;
} }
message AlarmUpdateMsg { message AlarmUpdateMsg {
@ -220,14 +228,16 @@ message CustomerUpdateMsg {
message UserUpdateMsg { message UserUpdateMsg {
UpdateMsgType msgType = 1; UpdateMsgType msgType = 1;
string email = 2; int64 idMSB = 2;
string authority = 3; int64 idLSB = 3;
string firstName = 4; string email = 4;
string lastName = 5; string authority = 5;
string additionalInfo = 6; string firstName = 6;
bool enabled = 7; string lastName = 7;
string password = 8; string additionalInfo = 8;
string groupName = 9; bool enabled = 9;
string password = 10;
string groupName = 11;
} }
message RuleChainMetadataRequestMsg { message RuleChainMetadataRequestMsg {