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.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
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.Futures;
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.thingsboard.server.common.data.EntityType;
|
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.page.TimePageLink;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
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.common.msg.queue.TbCallback;
|
||||||
import org.thingsboard.server.dao.alarm.AlarmService;
|
import org.thingsboard.server.dao.alarm.AlarmService;
|
||||||
import org.thingsboard.server.dao.edge.EdgeEventService;
|
import org.thingsboard.server.dao.edge.EdgeEventService;
|
||||||
import org.thingsboard.server.dao.edge.EdgeService;
|
import org.thingsboard.server.dao.edge.EdgeService;
|
||||||
import org.thingsboard.server.dao.model.ModelConstants;
|
import org.thingsboard.server.dao.model.ModelConstants;
|
||||||
import org.thingsboard.server.dao.relation.RelationService;
|
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.dao.user.UserService;
|
||||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||||
@ -86,6 +91,9 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuleChainService ruleChainService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RelationService relationService;
|
private RelationService relationService;
|
||||||
|
|
||||||
@ -223,6 +231,9 @@ public class DefaultEdgeNotificationService implements EdgeNotificationService {
|
|||||||
case UNASSIGNED_FROM_EDGE:
|
case UNASSIGNED_FROM_EDGE:
|
||||||
EdgeId edgeId = new EdgeId(new UUID(edgeNotificationMsg.getEdgeIdMSB(), edgeNotificationMsg.getEdgeIdLSB()));
|
EdgeId edgeId = new EdgeId(new UUID(edgeNotificationMsg.getEdgeIdMSB(), edgeNotificationMsg.getEdgeIdLSB()));
|
||||||
saveEdgeEvent(tenantId, edgeId, edgeEventType, edgeEventActionType, entityId, null);
|
saveEdgeEvent(tenantId, edgeId, edgeEventType, edgeEventActionType, entityId, null);
|
||||||
|
if (edgeEventType.equals(EdgeEventType.RULE_CHAIN)) {
|
||||||
|
updateDependentRuleChains(tenantId, new RuleChainId(entityId.getId()), edgeId);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case RELATIONS_DELETED:
|
case RELATIONS_DELETED:
|
||||||
// TODO: voba - add support for 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) {
|
private void processAlarm(TenantId tenantId, TransportProtos.EdgeNotificationMsgProto edgeNotificationMsg) {
|
||||||
AlarmId alarmId = new AlarmId(new UUID(edgeNotificationMsg.getEntityIdMSB(), edgeNotificationMsg.getEntityIdLSB()));
|
AlarmId alarmId = new AlarmId(new UUID(edgeNotificationMsg.getEntityIdMSB(), edgeNotificationMsg.getEntityIdLSB()));
|
||||||
ListenableFuture<Alarm> alarmFuture = alarmService.findAlarmByIdAsync(tenantId, alarmId);
|
ListenableFuture<Alarm> alarmFuture = alarmService.findAlarmByIdAsync(tenantId, alarmId);
|
||||||
|
|||||||
@ -34,6 +34,8 @@ public final class EdgeUtils {
|
|||||||
return EdgeEventType.DASHBOARD;
|
return EdgeEventType.DASHBOARD;
|
||||||
case USER:
|
case USER:
|
||||||
return EdgeEventType.USER;
|
return EdgeEventType.USER;
|
||||||
|
case RULE_CHAIN:
|
||||||
|
return EdgeEventType.RULE_CHAIN;
|
||||||
case ALARM:
|
case ALARM:
|
||||||
return EdgeEventType.ALARM;
|
return EdgeEventType.ALARM;
|
||||||
case TENANT:
|
case TENANT:
|
||||||
|
|||||||
1
pom.xml
1
pom.xml
@ -725,6 +725,7 @@
|
|||||||
<exclude>**/*.proto.js</exclude>
|
<exclude>**/*.proto.js</exclude>
|
||||||
<exclude>docker/haproxy/**</exclude>
|
<exclude>docker/haproxy/**</exclude>
|
||||||
<exclude>docker/tb-node/**</exclude>
|
<exclude>docker/tb-node/**</exclude>
|
||||||
|
<exclude>.run/**</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
<mapping>
|
<mapping>
|
||||||
<proto>JAVADOC_STYLE</proto>
|
<proto>JAVADOC_STYLE</proto>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user