Search in sources :

Example 51 with TbMsg

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

the class RuleChainActorMessageProcessor method onQueueToRuleEngineMsg.

void onQueueToRuleEngineMsg(QueueToRuleEngineMsg envelope) {
    TbMsg msg = envelope.getMsg();
    if (!checkMsgValid(msg)) {
        return;
    }
    log.trace("[{}][{}] Processing message [{}]: {}", entityId, firstId, msg.getId(), msg);
    if (envelope.getRelationTypes() == null || envelope.getRelationTypes().isEmpty()) {
        onTellNext(msg, true);
    } else {
        onTellNext(msg, envelope.getMsg().getRuleNodeId(), envelope.getRelationTypes(), envelope.getFailureMessage());
    }
}
Also used : TbMsg(org.thingsboard.server.common.msg.TbMsg)

Example 52 with TbMsg

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

the class DefaultTbContext method enqueueForTellNext.

private void enqueueForTellNext(TopicPartitionInfo tpi, String queueName, TbMsg source, Set<String> relationTypes, String failureMessage, Runnable onSuccess, Consumer<Throwable> onFailure) {
    if (!source.isValid()) {
        log.trace("[{}] Skip invalid message: {}", getTenantId(), source);
        onFailure.accept(new IllegalArgumentException("Source message is no longer valid!"));
        return;
    }
    RuleChainId ruleChainId = nodeCtx.getSelf().getRuleChainId();
    RuleNodeId ruleNodeId = nodeCtx.getSelf().getId();
    TbMsg tbMsg = TbMsg.newMsg(source, queueName, ruleChainId, ruleNodeId);
    TransportProtos.ToRuleEngineMsg.Builder msg = TransportProtos.ToRuleEngineMsg.newBuilder().setTenantIdMSB(getTenantId().getId().getMostSignificantBits()).setTenantIdLSB(getTenantId().getId().getLeastSignificantBits()).setTbMsg(TbMsg.toByteString(tbMsg)).addAllRelationTypes(relationTypes);
    if (failureMessage != null) {
        msg.setFailureMessage(failureMessage);
    }
    if (nodeCtx.getSelf().isDebugMode()) {
        relationTypes.forEach(relationType -> mainCtx.persistDebugOutput(nodeCtx.getTenantId(), nodeCtx.getSelf().getId(), tbMsg, relationType, null, failureMessage));
    }
    mainCtx.getClusterService().pushMsgToRuleEngine(tpi, tbMsg.getId(), msg.build(), new SimpleTbQueueCallback(onSuccess, onFailure));
}
Also used : RuleChainId(org.thingsboard.server.common.data.id.RuleChainId) TbMsg(org.thingsboard.server.common.msg.TbMsg) RuleNodeId(org.thingsboard.server.common.data.id.RuleNodeId)

Example 53 with TbMsg

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

the class RuleNodeActorMessageProcessor method onRuleToSelfMsg.

public void onRuleToSelfMsg(RuleNodeToSelfMsg msg) throws Exception {
    checkComponentStateActive(msg.getMsg());
    TbMsg tbMsg = msg.getMsg();
    int ruleNodeCount = tbMsg.getAndIncrementRuleNodeCounter();
    int maxRuleNodeExecutionsPerMessage = getTenantProfileConfiguration().getMaxRuleNodeExecsPerMessage();
    if (maxRuleNodeExecutionsPerMessage == 0 || ruleNodeCount < maxRuleNodeExecutionsPerMessage) {
        apiUsageClient.report(tenantId, tbMsg.getCustomerId(), ApiUsageRecordKey.RE_EXEC_COUNT);
        if (ruleNode.isDebugMode()) {
            systemContext.persistDebugInput(tenantId, entityId, msg.getMsg(), "Self");
        }
        try {
            tbNode.onMsg(defaultCtx, msg.getMsg());
        } catch (Exception e) {
            defaultCtx.tellFailure(msg.getMsg(), e);
        }
    } else {
        tbMsg.getCallback().onFailure(new RuleNodeException("Message is processed by more then " + maxRuleNodeExecutionsPerMessage + " rule nodes!", ruleChainName, ruleNode));
    }
}
Also used : RuleNodeException(org.thingsboard.server.common.msg.queue.RuleNodeException) TbMsg(org.thingsboard.server.common.msg.TbMsg) TbRuleNodeUpdateException(org.thingsboard.server.actors.TbRuleNodeUpdateException) RuleNodeException(org.thingsboard.server.common.msg.queue.RuleNodeException)

Example 54 with TbMsg

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

the class DefaultTbRuleEngineConsumerService method forwardToRuleEngineActor.

private void forwardToRuleEngineActor(String queueName, TenantId tenantId, ToRuleEngineMsg toRuleEngineMsg, TbMsgCallback callback) {
    TbMsg tbMsg = TbMsg.fromBytes(queueName, toRuleEngineMsg.getTbMsg().toByteArray(), callback);
    QueueToRuleEngineMsg msg;
    ProtocolStringList relationTypesList = toRuleEngineMsg.getRelationTypesList();
    Set<String> relationTypes = null;
    if (relationTypesList != null) {
        if (relationTypesList.size() == 1) {
            relationTypes = Collections.singleton(relationTypesList.get(0));
        } else {
            relationTypes = new HashSet<>(relationTypesList);
        }
    }
    msg = new QueueToRuleEngineMsg(tenantId, tbMsg, relationTypes, toRuleEngineMsg.getFailureMessage());
    actorContext.tell(msg);
}
Also used : QueueToRuleEngineMsg(org.thingsboard.server.common.msg.queue.QueueToRuleEngineMsg) TbMsg(org.thingsboard.server.common.msg.TbMsg) ProtocolStringList(com.google.protobuf.ProtocolStringList)

Example 55 with TbMsg

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

the class DefaultDeviceStateService method pushRuleEngineMessage.

private void pushRuleEngineMessage(DeviceStateData stateData, String msgType) {
    DeviceState state = stateData.getState();
    try {
        String data;
        if (msgType.equals(CONNECT_EVENT)) {
            ObjectNode stateNode = JacksonUtil.convertValue(state, ObjectNode.class);
            stateNode.remove(ACTIVITY_STATE);
            data = JacksonUtil.toString(stateNode);
        } else {
            data = JacksonUtil.toString(state);
        }
        TbMsgMetaData md = stateData.getMetaData().copy();
        if (!persistToTelemetry) {
            md.putValue(DataConstants.SCOPE, SERVER_SCOPE);
        }
        TbMsg tbMsg = TbMsg.newMsg(msgType, stateData.getDeviceId(), stateData.getCustomerId(), md, TbMsgDataType.JSON, data);
        clusterService.pushMsgToRuleEngine(stateData.getTenantId(), stateData.getDeviceId(), tbMsg, null);
    } catch (Exception e) {
        log.warn("[{}] Failed to push inactivity alarm: {}", stateData.getDeviceId(), state, e);
    }
}
Also used : ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) TbMsgMetaData(org.thingsboard.server.common.msg.TbMsgMetaData) TbMsg(org.thingsboard.server.common.msg.TbMsg) ExecutionException(java.util.concurrent.ExecutionException)

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