Search in sources :

Example 26 with TbMsg

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

the class TenantActor method onQueueToRuleEngineMsg.

private void onQueueToRuleEngineMsg(QueueToRuleEngineMsg msg) {
    if (!isRuleEngine) {
        log.warn("RECEIVED INVALID MESSAGE: {}", msg);
        return;
    }
    TbMsg tbMsg = msg.getMsg();
    if (getApiUsageState().isReExecEnabled()) {
        if (tbMsg.getRuleChainId() == null) {
            if (getRootChainActor() != null) {
                getRootChainActor().tell(msg);
            } else {
                tbMsg.getCallback().onFailure(new RuleEngineException("No Root Rule Chain available!"));
                log.info("[{}] No Root Chain: {}", tenantId, msg);
            }
        } else {
            try {
                ctx.tell(new TbEntityActorId(tbMsg.getRuleChainId()), msg);
            } catch (TbActorNotRegisteredException ex) {
                log.trace("Received message for non-existing rule chain: [{}]", tbMsg.getRuleChainId());
                // TODO: 3.1 Log it to dead letters queue;
                tbMsg.getCallback().onSuccess();
            }
        }
    } else {
        log.trace("[{}] Ack message because Rule Engine is disabled", tenantId);
        tbMsg.getCallback().onSuccess();
    }
}
Also used : TbActorNotRegisteredException(org.thingsboard.server.actors.TbActorNotRegisteredException) TbEntityActorId(org.thingsboard.server.actors.TbEntityActorId) RuleEngineException(org.thingsboard.server.common.msg.queue.RuleEngineException) TbMsg(org.thingsboard.server.common.msg.TbMsg)

Example 27 with TbMsg

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

the class RuleNodeActorMessageProcessor method onRuleChainToRuleNodeMsg.

void onRuleChainToRuleNodeMsg(RuleChainToRuleNodeMsg msg) throws Exception {
    msg.getMsg().getCallback().onProcessingStart(info);
    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(), msg.getFromRelationType());
        }
        try {
            tbNode.onMsg(msg.getCtx(), msg.getMsg());
        } catch (Exception e) {
            msg.getCtx().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 28 with TbMsg

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

the class RuleNodeActor method onRuleChainToRuleNodeMsg.

private void onRuleChainToRuleNodeMsg(RuleChainToRuleNodeMsg envelope) {
    TbMsg msg = envelope.getMsg();
    if (!msg.isValid()) {
        if (log.isTraceEnabled()) {
            log.trace("Skip processing of message: {} because it is no longer valid!", msg);
        }
        return;
    }
    if (log.isDebugEnabled()) {
        log.debug("[{}][{}][{}] Going to process rule engine msg: {}", ruleChainId, id, processor.getComponentName(), msg);
    }
    try {
        processor.onRuleChainToRuleNodeMsg(envelope);
        increaseMessagesProcessedCount();
    } catch (Exception e) {
        logAndPersist("onRuleMsg", e);
    }
}
Also used : TbMsg(org.thingsboard.server.common.msg.TbMsg)

Example 29 with TbMsg

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

the class TelemetryEdgeProcessor method processPostAttributes.

private ListenableFuture<Void> processPostAttributes(TenantId tenantId, CustomerId customerId, EntityId entityId, TransportProtos.PostAttributeMsg msg, TbMsgMetaData metaData) {
    SettableFuture<Void> futureToSet = SettableFuture.create();
    JsonObject json = JsonUtils.getJsonObject(msg.getKvList());
    Pair<String, RuleChainId> defaultQueueAndRuleChain = getDefaultQueueNameAndRuleChainId(tenantId, entityId);
    String queueName = defaultQueueAndRuleChain.getKey();
    RuleChainId ruleChainId = defaultQueueAndRuleChain.getValue();
    TbMsg tbMsg = TbMsg.newMsg(queueName, SessionMsgType.POST_ATTRIBUTES_REQUEST.name(), entityId, customerId, metaData, gson.toJson(json), ruleChainId, null);
    tbClusterService.pushMsgToRuleEngine(tenantId, tbMsg.getOriginator(), tbMsg, new TbQueueCallback() {

        @Override
        public void onSuccess(TbQueueMsgMetadata metadata) {
            futureToSet.set(null);
        }

        @Override
        public void onFailure(Throwable t) {
            log.error("Can't process post attributes [{}]", msg, t);
            futureToSet.setException(t);
        }
    });
    return futureToSet;
}
Also used : TbQueueCallback(org.thingsboard.server.queue.TbQueueCallback) JsonObject(com.google.gson.JsonObject) RuleChainId(org.thingsboard.server.common.data.id.RuleChainId) TbQueueMsgMetadata(org.thingsboard.server.queue.TbQueueMsgMetadata) TbMsg(org.thingsboard.server.common.msg.TbMsg)

Example 30 with TbMsg

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

the class TelemetryEdgeProcessor method processAttributesUpdate.

private ListenableFuture<Void> processAttributesUpdate(TenantId tenantId, CustomerId customerId, EntityId entityId, TransportProtos.PostAttributeMsg msg, TbMsgMetaData metaData) {
    SettableFuture<Void> futureToSet = SettableFuture.create();
    JsonObject json = JsonUtils.getJsonObject(msg.getKvList());
    Set<AttributeKvEntry> attributes = JsonConverter.convertToAttributes(json);
    ListenableFuture<List<Void>> future = attributesService.save(tenantId, entityId, metaData.getValue("scope"), new ArrayList<>(attributes));
    Futures.addCallback(future, new FutureCallback<List<Void>>() {

        @Override
        public void onSuccess(@Nullable List<Void> voids) {
            Pair<String, RuleChainId> defaultQueueAndRuleChain = getDefaultQueueNameAndRuleChainId(tenantId, entityId);
            String queueName = defaultQueueAndRuleChain.getKey();
            RuleChainId ruleChainId = defaultQueueAndRuleChain.getValue();
            TbMsg tbMsg = TbMsg.newMsg(queueName, DataConstants.ATTRIBUTES_UPDATED, entityId, customerId, metaData, gson.toJson(json), ruleChainId, null);
            tbClusterService.pushMsgToRuleEngine(tenantId, tbMsg.getOriginator(), tbMsg, new TbQueueCallback() {

                @Override
                public void onSuccess(TbQueueMsgMetadata metadata) {
                    futureToSet.set(null);
                }

                @Override
                public void onFailure(Throwable t) {
                    log.error("Can't process attributes update [{}]", msg, t);
                    futureToSet.setException(t);
                }
            });
        }

        @Override
        public void onFailure(Throwable t) {
            log.error("Can't process attributes update [{}]", msg, t);
            futureToSet.setException(t);
        }
    }, dbCallbackExecutorService);
    return futureToSet;
}
Also used : AttributeKvEntry(org.thingsboard.server.common.data.kv.AttributeKvEntry) TbQueueCallback(org.thingsboard.server.queue.TbQueueCallback) JsonObject(com.google.gson.JsonObject) RuleChainId(org.thingsboard.server.common.data.id.RuleChainId) TbQueueMsgMetadata(org.thingsboard.server.queue.TbQueueMsgMetadata) List(java.util.List) ArrayList(java.util.ArrayList) TbMsg(org.thingsboard.server.common.msg.TbMsg) Pair(org.apache.commons.lang3.tuple.Pair) ImmutablePair(org.apache.commons.lang3.tuple.ImmutablePair)

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