Search in sources :

Example 46 with TbMsg

use of org.thingsboard.server.common.msg.TbMsg in project thingsboard by thingsboard.

the class TbCreateRelationNodeTest method testCreateNewRelationAndChangeOriginator.

@Test
public void testCreateNewRelationAndChangeOriginator() throws TbNodeException {
    init(createRelationNodeConfigWithChangeOriginator());
    DeviceId deviceId = new DeviceId(Uuids.timeBased());
    AssetId assetId = new AssetId(Uuids.timeBased());
    Asset asset = new Asset();
    asset.setId(assetId);
    when(assetService.findAssetByTenantIdAndName(any(), eq("AssetName"))).thenReturn(asset);
    when(assetService.findAssetByIdAsync(any(), eq(assetId))).thenReturn(Futures.immediateFuture(asset));
    TbMsgMetaData metaData = new TbMsgMetaData();
    metaData.putValue("name", "AssetName");
    metaData.putValue("type", "AssetType");
    msg = TbMsg.newMsg(DataConstants.ENTITY_CREATED, deviceId, metaData, TbMsgDataType.JSON, "{}", ruleChainId, ruleNodeId);
    when(ctx.getRelationService().checkRelation(any(), eq(assetId), eq(deviceId), eq(RELATION_TYPE_CONTAINS), eq(RelationTypeGroup.COMMON))).thenReturn(Futures.immediateFuture(false));
    when(ctx.getRelationService().saveRelationAsync(any(), eq(new EntityRelation(assetId, deviceId, RELATION_TYPE_CONTAINS, RelationTypeGroup.COMMON)))).thenReturn(Futures.immediateFuture(true));
    node.onMsg(ctx, msg);
    ArgumentCaptor<TbMsg> msgCaptor = ArgumentCaptor.forClass(TbMsg.class);
    ArgumentCaptor<String> typeCaptor = ArgumentCaptor.forClass(String.class);
    ArgumentCaptor<EntityId> originatorCaptor = ArgumentCaptor.forClass(EntityId.class);
    ArgumentCaptor<TbMsgMetaData> metadataCaptor = ArgumentCaptor.forClass(TbMsgMetaData.class);
    ArgumentCaptor<String> dataCaptor = ArgumentCaptor.forClass(String.class);
    verify(ctx).transformMsg(msgCaptor.capture(), typeCaptor.capture(), originatorCaptor.capture(), metadataCaptor.capture(), dataCaptor.capture());
    assertEquals(assetId, originatorCaptor.getValue());
}
Also used : EntityId(org.thingsboard.server.common.data.id.EntityId) EntityRelation(org.thingsboard.server.common.data.relation.EntityRelation) DeviceId(org.thingsboard.server.common.data.id.DeviceId) Asset(org.thingsboard.server.common.data.asset.Asset) TbMsgMetaData(org.thingsboard.server.common.msg.TbMsgMetaData) AssetId(org.thingsboard.server.common.data.id.AssetId) TbMsg(org.thingsboard.server.common.msg.TbMsg) Test(org.junit.Test)

Example 47 with TbMsg

use of org.thingsboard.server.common.msg.TbMsg in project thingsboard by thingsboard.

the class TbJsSwitchNodeTest method multipleRoutesAreAllowed.

@Test
public void multipleRoutesAreAllowed() throws TbNodeException {
    initWithScript();
    TbMsgMetaData metaData = new TbMsgMetaData();
    metaData.putValue("temp", "10");
    metaData.putValue("humidity", "99");
    String rawJson = "{\"name\": \"Vit\", \"passed\": 5}";
    TbMsg msg = TbMsg.newMsg("USER", null, metaData, TbMsgDataType.JSON, rawJson, ruleChainId, ruleNodeId);
    when(scriptEngine.executeSwitchAsync(msg)).thenReturn(Futures.immediateFuture(Sets.newHashSet("one", "three")));
    node.onMsg(ctx, msg);
    verify(ctx).tellNext(msg, Sets.newHashSet("one", "three"));
}
Also used : TbMsgMetaData(org.thingsboard.server.common.msg.TbMsgMetaData) TbMsg(org.thingsboard.server.common.msg.TbMsg) Test(org.junit.Test)

Example 48 with TbMsg

use of org.thingsboard.server.common.msg.TbMsg in project thingsboard by thingsboard.

the class DeviceProvisionServiceImpl method pushProvisionEventToRuleEngine.

private void pushProvisionEventToRuleEngine(ProvisionRequest request, Device device, String type) {
    try {
        JsonNode entityNode = JacksonUtil.valueToTree(request);
        TbMsg msg = TbMsg.newMsg(type, device.getId(), device.getCustomerId(), createTbMsgMetaData(device), JacksonUtil.toString(entityNode));
        sendToRuleEngine(device.getTenantId(), msg, null);
    } catch (IllegalArgumentException e) {
        log.warn("[{}] Failed to push device action to rule engine: {}", device.getId(), type, e);
    }
}
Also used : JsonNode(com.fasterxml.jackson.databind.JsonNode) TbMsg(org.thingsboard.server.common.msg.TbMsg)

Example 49 with TbMsg

use of org.thingsboard.server.common.msg.TbMsg in project thingsboard by thingsboard.

the class EntityActionService method pushEntityActionToRuleEngine.

public void pushEntityActionToRuleEngine(EntityId entityId, HasName entity, TenantId tenantId, CustomerId customerId, ActionType actionType, User user, Object... additionalInfo) {
    String msgType = null;
    switch(actionType) {
        case ADDED:
            msgType = DataConstants.ENTITY_CREATED;
            break;
        case DELETED:
            msgType = DataConstants.ENTITY_DELETED;
            break;
        case UPDATED:
            msgType = DataConstants.ENTITY_UPDATED;
            break;
        case ASSIGNED_TO_CUSTOMER:
            msgType = DataConstants.ENTITY_ASSIGNED;
            break;
        case UNASSIGNED_FROM_CUSTOMER:
            msgType = DataConstants.ENTITY_UNASSIGNED;
            break;
        case ATTRIBUTES_UPDATED:
            msgType = DataConstants.ATTRIBUTES_UPDATED;
            break;
        case ATTRIBUTES_DELETED:
            msgType = DataConstants.ATTRIBUTES_DELETED;
            break;
        case ALARM_ACK:
            msgType = DataConstants.ALARM_ACK;
            break;
        case ALARM_CLEAR:
            msgType = DataConstants.ALARM_CLEAR;
            break;
        case ALARM_DELETE:
            msgType = DataConstants.ALARM_DELETE;
            break;
        case ASSIGNED_FROM_TENANT:
            msgType = DataConstants.ENTITY_ASSIGNED_FROM_TENANT;
            break;
        case ASSIGNED_TO_TENANT:
            msgType = DataConstants.ENTITY_ASSIGNED_TO_TENANT;
            break;
        case PROVISION_SUCCESS:
            msgType = DataConstants.PROVISION_SUCCESS;
            break;
        case PROVISION_FAILURE:
            msgType = DataConstants.PROVISION_FAILURE;
            break;
        case TIMESERIES_UPDATED:
            msgType = DataConstants.TIMESERIES_UPDATED;
            break;
        case TIMESERIES_DELETED:
            msgType = DataConstants.TIMESERIES_DELETED;
            break;
        case ASSIGNED_TO_EDGE:
            msgType = DataConstants.ENTITY_ASSIGNED_TO_EDGE;
            break;
        case UNASSIGNED_FROM_EDGE:
            msgType = DataConstants.ENTITY_UNASSIGNED_FROM_EDGE;
            break;
    }
    if (!StringUtils.isEmpty(msgType)) {
        try {
            TbMsgMetaData metaData = new TbMsgMetaData();
            if (user != null) {
                metaData.putValue("userId", user.getId().toString());
                metaData.putValue("userName", user.getName());
            }
            if (customerId != null && !customerId.isNullUid()) {
                metaData.putValue("customerId", customerId.toString());
            }
            if (actionType == ActionType.ASSIGNED_TO_CUSTOMER) {
                String strCustomerId = extractParameter(String.class, 1, additionalInfo);
                String strCustomerName = extractParameter(String.class, 2, additionalInfo);
                metaData.putValue("assignedCustomerId", strCustomerId);
                metaData.putValue("assignedCustomerName", strCustomerName);
            } else if (actionType == ActionType.UNASSIGNED_FROM_CUSTOMER) {
                String strCustomerId = extractParameter(String.class, 1, additionalInfo);
                String strCustomerName = extractParameter(String.class, 2, additionalInfo);
                metaData.putValue("unassignedCustomerId", strCustomerId);
                metaData.putValue("unassignedCustomerName", strCustomerName);
            } else if (actionType == ActionType.ASSIGNED_FROM_TENANT) {
                String strTenantId = extractParameter(String.class, 0, additionalInfo);
                String strTenantName = extractParameter(String.class, 1, additionalInfo);
                metaData.putValue("assignedFromTenantId", strTenantId);
                metaData.putValue("assignedFromTenantName", strTenantName);
            } else if (actionType == ActionType.ASSIGNED_TO_TENANT) {
                String strTenantId = extractParameter(String.class, 0, additionalInfo);
                String strTenantName = extractParameter(String.class, 1, additionalInfo);
                metaData.putValue("assignedToTenantId", strTenantId);
                metaData.putValue("assignedToTenantName", strTenantName);
            } else if (actionType == ActionType.ASSIGNED_TO_EDGE) {
                String strEdgeId = extractParameter(String.class, 1, additionalInfo);
                String strEdgeName = extractParameter(String.class, 2, additionalInfo);
                metaData.putValue("assignedEdgeId", strEdgeId);
                metaData.putValue("assignedEdgeName", strEdgeName);
            } else if (actionType == ActionType.UNASSIGNED_FROM_EDGE) {
                String strEdgeId = extractParameter(String.class, 1, additionalInfo);
                String strEdgeName = extractParameter(String.class, 2, additionalInfo);
                metaData.putValue("unassignedEdgeId", strEdgeId);
                metaData.putValue("unassignedEdgeName", strEdgeName);
            }
            ObjectNode entityNode;
            if (entity != null) {
                entityNode = json.valueToTree(entity);
                if (entityId.getEntityType() == EntityType.DASHBOARD) {
                    entityNode.put("configuration", "");
                }
            } else {
                entityNode = json.createObjectNode();
                if (actionType == ActionType.ATTRIBUTES_UPDATED) {
                    String scope = extractParameter(String.class, 0, additionalInfo);
                    @SuppressWarnings("unchecked") List<AttributeKvEntry> attributes = extractParameter(List.class, 1, additionalInfo);
                    metaData.putValue(DataConstants.SCOPE, scope);
                    if (attributes != null) {
                        for (AttributeKvEntry attr : attributes) {
                            addKvEntry(entityNode, attr);
                        }
                    }
                } else if (actionType == ActionType.ATTRIBUTES_DELETED) {
                    String scope = extractParameter(String.class, 0, additionalInfo);
                    @SuppressWarnings("unchecked") List<String> keys = extractParameter(List.class, 1, additionalInfo);
                    metaData.putValue(DataConstants.SCOPE, scope);
                    ArrayNode attrsArrayNode = entityNode.putArray("attributes");
                    if (keys != null) {
                        keys.forEach(attrsArrayNode::add);
                    }
                } else if (actionType == ActionType.TIMESERIES_UPDATED) {
                    @SuppressWarnings("unchecked") List<TsKvEntry> timeseries = extractParameter(List.class, 0, additionalInfo);
                    addTimeseries(entityNode, timeseries);
                } else if (actionType == ActionType.TIMESERIES_DELETED) {
                    @SuppressWarnings("unchecked") List<String> keys = extractParameter(List.class, 0, additionalInfo);
                    if (keys != null) {
                        ArrayNode timeseriesArrayNode = entityNode.putArray("timeseries");
                        keys.forEach(timeseriesArrayNode::add);
                    }
                    entityNode.put("startTs", extractParameter(Long.class, 1, additionalInfo));
                    entityNode.put("endTs", extractParameter(Long.class, 2, additionalInfo));
                }
            }
            TbMsg tbMsg = TbMsg.newMsg(msgType, entityId, customerId, metaData, TbMsgDataType.JSON, json.writeValueAsString(entityNode));
            if (tenantId.isNullUid()) {
                if (entity instanceof HasTenantId) {
                    tenantId = ((HasTenantId) entity).getTenantId();
                }
            }
            tbClusterService.pushMsgToRuleEngine(tenantId, entityId, tbMsg, null);
        } catch (Exception e) {
            log.warn("[{}] Failed to push entity action to rule engine: {}", entityId, actionType, e);
        }
    }
}
Also used : TsKvEntry(org.thingsboard.server.common.data.kv.TsKvEntry) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) AttributeKvEntry(org.thingsboard.server.common.data.kv.AttributeKvEntry) HasTenantId(org.thingsboard.server.common.data.HasTenantId) TbMsgMetaData(org.thingsboard.server.common.msg.TbMsgMetaData) ThingsboardException(org.thingsboard.server.common.data.exception.ThingsboardException) List(java.util.List) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) TbMsg(org.thingsboard.server.common.msg.TbMsg)

Example 50 with TbMsg

use of org.thingsboard.server.common.msg.TbMsg in project thingsboard by thingsboard.

the class RpcV2Controller method deleteRpc.

@ApiOperation(value = "Delete persistent RPC", notes = "Deletes the persistent RPC request." + TENANT_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
@RequestMapping(value = "/persistent/{rpcId}", method = RequestMethod.DELETE)
@ResponseBody
public void deleteRpc(@ApiParam(value = RPC_ID_PARAM_DESCRIPTION, required = true) @PathVariable(RPC_ID) String strRpc) throws ThingsboardException {
    checkParameter("RpcId", strRpc);
    try {
        RpcId rpcId = new RpcId(UUID.fromString(strRpc));
        Rpc rpc = checkRpcId(rpcId, Operation.DELETE);
        if (rpc != null) {
            if (rpc.getStatus().equals(RpcStatus.QUEUED)) {
                RemoveRpcActorMsg removeMsg = new RemoveRpcActorMsg(getTenantId(), rpc.getDeviceId(), rpc.getUuidId());
                log.trace("[{}] Forwarding msg {} to queue actor!", rpc.getDeviceId(), rpc);
                tbClusterService.pushMsgToCore(removeMsg, null);
            }
            rpcService.deleteRpc(getTenantId(), rpcId);
            rpc.setStatus(RpcStatus.DELETED);
            TbMsg msg = TbMsg.newMsg(RPC_DELETED, rpc.getDeviceId(), TbMsgMetaData.EMPTY, JacksonUtil.toString(rpc));
            tbClusterService.pushMsgToRuleEngine(getTenantId(), rpc.getDeviceId(), msg, null);
        }
    } catch (Exception e) {
        throw handleException(e);
    }
}
Also used : Rpc(org.thingsboard.server.common.data.rpc.Rpc) RemoveRpcActorMsg(org.thingsboard.server.service.rpc.RemoveRpcActorMsg) RpcId(org.thingsboard.server.common.data.id.RpcId) TbMsg(org.thingsboard.server.common.msg.TbMsg) ResponseStatusException(org.springframework.web.server.ResponseStatusException) ThingsboardException(org.thingsboard.server.common.data.exception.ThingsboardException) ApiOperation(io.swagger.annotations.ApiOperation) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Aggregations

TbMsg (org.thingsboard.server.common.msg.TbMsg)88 TbMsgMetaData (org.thingsboard.server.common.msg.TbMsgMetaData)57 Test (org.junit.Test)46 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)29 List (java.util.List)19 DeviceProfile (org.thingsboard.server.common.data.DeviceProfile)18 RuleChainId (org.thingsboard.server.common.data.id.RuleChainId)17 DeviceProfileData (org.thingsboard.server.common.data.device.profile.DeviceProfileData)16 EntityId (org.thingsboard.server.common.data.id.EntityId)16 AttributeKvEntry (org.thingsboard.server.common.data.kv.AttributeKvEntry)16 Device (org.thingsboard.server.common.data.Device)15 DeviceProfileAlarm (org.thingsboard.server.common.data.device.profile.DeviceProfileAlarm)15 JsonNode (com.fasterxml.jackson.databind.JsonNode)14 AlarmCondition (org.thingsboard.server.common.data.device.profile.AlarmCondition)14 AlarmConditionFilter (org.thingsboard.server.common.data.device.profile.AlarmConditionFilter)14 AlarmConditionFilterKey (org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey)14 AlarmRule (org.thingsboard.server.common.data.device.profile.AlarmRule)14 NumericFilterPredicate (org.thingsboard.server.common.data.query.NumericFilterPredicate)14 RuleNodeId (org.thingsboard.server.common.data.id.RuleNodeId)13 DynamicValue (org.thingsboard.server.common.data.query.DynamicValue)13