Fixed assign rule chain. Added sync of related rule chains
This commit is contained in:
		
							parent
							
								
									908bb8be7c
								
							
						
					
					
						commit
						d0db49a2cb
					
				@ -18,9 +18,11 @@ package org.thingsboard.server.service.edge;
 | 
			
		||||
import com.fasterxml.jackson.core.JsonProcessingException;
 | 
			
		||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
			
		||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
			
		||||
import com.google.common.util.concurrent.FutureCallback;
 | 
			
		||||
import com.google.common.util.concurrent.Futures;
 | 
			
		||||
import com.google.common.util.concurrent.ListenableFuture;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.checkerframework.checker.nullness.qual.Nullable;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
@ -46,12 +48,15 @@ import org.thingsboard.server.common.data.page.TimePageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.TimePageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
 | 
			
		||||
import org.thingsboard.server.common.data.rule.RuleChain;
 | 
			
		||||
import org.thingsboard.server.common.data.rule.RuleChainConnectionInfo;
 | 
			
		||||
import org.thingsboard.server.common.msg.queue.TbCallback;
 | 
			
		||||
import org.thingsboard.server.dao.alarm.AlarmService;
 | 
			
		||||
import org.thingsboard.server.dao.edge.EdgeEventService;
 | 
			
		||||
import org.thingsboard.server.dao.edge.EdgeService;
 | 
			
		||||
import org.thingsboard.server.dao.model.ModelConstants;
 | 
			
		||||
import org.thingsboard.server.dao.relation.RelationService;
 | 
			
		||||
import org.thingsboard.server.dao.rule.RuleChainService;
 | 
			
		||||
import org.thingsboard.server.dao.user.UserService;
 | 
			
		||||
import org.thingsboard.server.gen.transport.TransportProtos;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
@ -86,6 +91,9 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private UserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RuleChainService ruleChainService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RelationService relationService;
 | 
			
		||||
 | 
			
		||||
@ -223,6 +231,9 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService {
 | 
			
		||||
            case UNASSIGNED_FROM_EDGE:
 | 
			
		||||
                EdgeId edgeId = new EdgeId(new UUID(edgeNotificationMsg.getEdgeIdMSB(), edgeNotificationMsg.getEdgeIdLSB()));
 | 
			
		||||
                saveEdgeEvent(tenantId, edgeId, edgeEventType, edgeEventActionType, entityId, null);
 | 
			
		||||
                if (edgeEventType.equals(EdgeEventType.RULE_CHAIN)) {
 | 
			
		||||
                    updateDependentRuleChains(tenantId, new RuleChainId(entityId.getId()), edgeId);
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            case RELATIONS_DELETED:
 | 
			
		||||
                // TODO: voba - add support for relations deleted
 | 
			
		||||
@ -230,6 +241,40 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void updateDependentRuleChains(TenantId tenantId, RuleChainId processingRuleChainId, EdgeId edgeId) {
 | 
			
		||||
        ListenableFuture<TimePageData<RuleChain>> future = ruleChainService.findRuleChainsByTenantIdAndEdgeId(tenantId, edgeId, new TimePageLink(Integer.MAX_VALUE));
 | 
			
		||||
        Futures.addCallback(future, new FutureCallback<TimePageData<RuleChain>>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onSuccess(@Nullable TimePageData<RuleChain> pageData) {
 | 
			
		||||
                if (pageData != null && pageData.getData() != null && !pageData.getData().isEmpty()) {
 | 
			
		||||
                    for (RuleChain ruleChain : pageData.getData()) {
 | 
			
		||||
                        if (!ruleChain.getId().equals(processingRuleChainId)) {
 | 
			
		||||
                            List<RuleChainConnectionInfo> connectionInfos =
 | 
			
		||||
                                    ruleChainService.loadRuleChainMetaData(ruleChain.getTenantId(), ruleChain.getId()).getRuleChainConnections();
 | 
			
		||||
                            if (connectionInfos != null && !connectionInfos.isEmpty()) {
 | 
			
		||||
                                for (RuleChainConnectionInfo connectionInfo : connectionInfos) {
 | 
			
		||||
                                    if (connectionInfo.getTargetRuleChainId().equals(processingRuleChainId)) {
 | 
			
		||||
                                        saveEdgeEvent(tenantId,
 | 
			
		||||
                                                edgeId,
 | 
			
		||||
                                                EdgeEventType.RULE_CHAIN_METADATA,
 | 
			
		||||
                                                ActionType.UPDATED,
 | 
			
		||||
                                                ruleChain.getId(),
 | 
			
		||||
                                                null);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(Throwable t) {
 | 
			
		||||
                log.error("Exception during updating dependent rule chains on sync!", t);
 | 
			
		||||
            }
 | 
			
		||||
        }, dbCallbackExecutorService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void processAlarm(TenantId tenantId, TransportProtos.EdgeNotificationMsgProto edgeNotificationMsg) {
 | 
			
		||||
        AlarmId alarmId = new AlarmId(new UUID(edgeNotificationMsg.getEntityIdMSB(), edgeNotificationMsg.getEntityIdLSB()));
 | 
			
		||||
        ListenableFuture<Alarm> alarmFuture = alarmService.findAlarmByIdAsync(tenantId, alarmId);
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,8 @@ public final class EdgeUtils {
 | 
			
		||||
                return EdgeEventType.DASHBOARD;
 | 
			
		||||
            case USER:
 | 
			
		||||
                return EdgeEventType.USER;
 | 
			
		||||
            case RULE_CHAIN:
 | 
			
		||||
                return EdgeEventType.RULE_CHAIN;
 | 
			
		||||
            case ALARM:
 | 
			
		||||
                return EdgeEventType.ALARM;
 | 
			
		||||
            case TENANT:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user