Merge pull request #12458 from AndriiLandiak/edge-alarm-improvement
Edge - alarm ack & alarm clear sent by 'Push to Edge' node only
This commit is contained in:
		
						commit
						25d8580890
					
				@ -135,6 +135,9 @@ public class EdgeEventSourcingListener {
 | 
			
		||||
        if (EntityType.DEVICE.equals(event.getEntityId().getEntityType()) && ActionType.ASSIGNED_TO_TENANT.equals(event.getActionType())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (EntityType.ALARM.equals(event.getEntityId().getEntityType())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            if (event.getEntityId().getEntityType().equals(EntityType.RULE_CHAIN) && event.getEdgeId() != null && event.getActionType().equals(ActionType.ASSIGNED_TO_EDGE)) {
 | 
			
		||||
                try {
 | 
			
		||||
 | 
			
		||||
@ -169,7 +169,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        foundAlarm = doGet("/api/alarm/info/" + updatedAlarm.getId(), AlarmInfo.class);
 | 
			
		||||
 | 
			
		||||
        testNotifyManyEntityManyTimeMsgToEdgeServiceEntityEqAny(foundAlarm, customerDevice, tenantId,
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ACK, 1, 1, 1);
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ACK, 1, 0, 1);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        alarm = updatedAlarm;
 | 
			
		||||
@ -183,7 +183,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        foundAlarm = doGet("/api/alarm/info/" + updatedAlarm.getId(), AlarmInfo.class);
 | 
			
		||||
 | 
			
		||||
        testNotifyManyEntityManyTimeMsgToEdgeServiceEntityEqAny(foundAlarm, customerDevice, tenantId,
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_CLEAR, 1, 1, 1);
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_CLEAR, 1, 0, 1);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        alarm = updatedAlarm;
 | 
			
		||||
@ -197,7 +197,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        foundAlarm = doGet("/api/alarm/info/" + updatedAlarm.getId(), AlarmInfo.class);
 | 
			
		||||
 | 
			
		||||
        testNotifyManyEntityManyTimeMsgToEdgeServiceEntityEqAny(foundAlarm, customerDevice, tenantId,
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ASSIGNED, 1, 1, 1);
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ASSIGNED, 1, 0, 1);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        alarm = updatedAlarm;
 | 
			
		||||
@ -211,7 +211,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        foundAlarm = doGet("/api/alarm/info/" + updatedAlarm.getId(), AlarmInfo.class);
 | 
			
		||||
 | 
			
		||||
        testNotifyManyEntityManyTimeMsgToEdgeServiceEntityEqAny(foundAlarm, customerDevice, tenantId,
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_UNASSIGNED, 1, 1, 1);
 | 
			
		||||
                customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_UNASSIGNED, 1, 0, 1);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
@ -321,7 +321,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertNotNull(foundAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.CLEARED_UNACK, foundAlarm.getStatus());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.ALARM_CLEAR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -337,7 +337,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertNotNull(foundAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.CLEARED_UNACK, foundAlarm.getStatus());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_CLEAR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -354,7 +354,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertNotNull(foundAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.ACTIVE_ACK, foundAlarm.getStatus());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.ALARM_ACK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -434,7 +434,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertEquals(tenantAdminUserId, foundAlarm.getAssigneeId());
 | 
			
		||||
        Assert.assertTrue(foundAlarm.getAssignTs() > beforeAssignmentTs && foundAlarm.getAssignTs() < System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ASSIGNED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -465,7 +465,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertEquals(tenantAdminUserId, foundAlarm.getAssigneeId());
 | 
			
		||||
        Assert.assertTrue(foundAlarm.getAssignTs() > beforeAssignmentTs && foundAlarm.getAssignTs() < System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ASSIGNED);
 | 
			
		||||
 | 
			
		||||
        logout();
 | 
			
		||||
@ -482,7 +482,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertEquals(customerUserId, foundAlarm.getAssigneeId());
 | 
			
		||||
        Assert.assertTrue(foundAlarm.getAssignTs() > beforeAssignmentTs && foundAlarm.getAssignTs() < System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.ALARM_ASSIGNED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -500,7 +500,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertEquals(tenantAdminUserId, foundAlarm.getAssigneeId());
 | 
			
		||||
        Assert.assertTrue(foundAlarm.getAssignTs() > beforeAssignmentTs && foundAlarm.getAssignTs() < System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ASSIGNED);
 | 
			
		||||
 | 
			
		||||
        beforeAssignmentTs = System.currentTimeMillis();
 | 
			
		||||
@ -511,7 +511,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertNull(foundAlarm.getAssigneeId());
 | 
			
		||||
        Assert.assertTrue(foundAlarm.getAssignTs() > beforeAssignmentTs && foundAlarm.getAssignTs() < System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_UNASSIGNED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -529,7 +529,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertEquals(tenantAdminUserId, foundAlarm.getAssigneeId());
 | 
			
		||||
        Assert.assertTrue(foundAlarm.getAssignTs() > beforeAssignmentTs && foundAlarm.getAssignTs() < System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_ASSIGNED);
 | 
			
		||||
 | 
			
		||||
        logout();
 | 
			
		||||
@ -545,7 +545,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertNull(foundAlarm.getAssigneeId());
 | 
			
		||||
        Assert.assertTrue(foundAlarm.getAssignTs() > beforeAssignmentTs && foundAlarm.getAssignTs() < System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.ALARM_UNASSIGNED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -94,44 +94,26 @@ public class AlarmEdgeTest extends AbstractEdgeTest {
 | 
			
		||||
        Alarm savedAlarm = doPost("/api/alarm", alarm, Alarm.class);
 | 
			
		||||
        edgeImitator.ignoreType(AlarmCommentUpdateMsg.class);
 | 
			
		||||
 | 
			
		||||
        // ack alarm
 | 
			
		||||
        // ack alarm - send only by using push to edge node
 | 
			
		||||
        edgeImitator.expectMessageAmount(1);
 | 
			
		||||
        doPost("/api/alarm/" + savedAlarm.getUuidId() + "/ack");
 | 
			
		||||
        Assert.assertTrue(edgeImitator.waitForMessages());
 | 
			
		||||
        AbstractMessage latestMessage = edgeImitator.getLatestMessage();
 | 
			
		||||
        Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg);
 | 
			
		||||
        AlarmUpdateMsg alarmUpdateMsg = (AlarmUpdateMsg) latestMessage;
 | 
			
		||||
        Assert.assertEquals(UpdateMsgType.ALARM_ACK_RPC_MESSAGE, alarmUpdateMsg.getMsgType());
 | 
			
		||||
        Alarm alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true);
 | 
			
		||||
        Assert.assertNotNull(alarmMsg);
 | 
			
		||||
        Assert.assertEquals(savedAlarm.getType(), alarmMsg.getType());
 | 
			
		||||
        Assert.assertEquals(savedAlarm.getName(), alarmMsg.getName());
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.ACTIVE_ACK, alarmMsg.getStatus());
 | 
			
		||||
        Assert.assertFalse(edgeImitator.waitForMessages(5));
 | 
			
		||||
 | 
			
		||||
        // clear alarm
 | 
			
		||||
        // clear alarm - send only by using push to edge node
 | 
			
		||||
        edgeImitator.expectMessageAmount(1);
 | 
			
		||||
        doPost("/api/alarm/" + savedAlarm.getUuidId() + "/clear");
 | 
			
		||||
        Assert.assertTrue(edgeImitator.waitForMessages());
 | 
			
		||||
        latestMessage = edgeImitator.getLatestMessage();
 | 
			
		||||
        Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg);
 | 
			
		||||
        alarmUpdateMsg = (AlarmUpdateMsg) latestMessage;
 | 
			
		||||
        Assert.assertEquals(UpdateMsgType.ALARM_CLEAR_RPC_MESSAGE, alarmUpdateMsg.getMsgType());
 | 
			
		||||
        alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true);
 | 
			
		||||
        Assert.assertNotNull(alarmMsg);
 | 
			
		||||
        Assert.assertEquals(savedAlarm.getType(), alarmMsg.getType());
 | 
			
		||||
        Assert.assertEquals(savedAlarm.getName(), alarmMsg.getName());
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.CLEARED_ACK, alarmMsg.getStatus());
 | 
			
		||||
        Assert.assertFalse(edgeImitator.waitForMessages(5));
 | 
			
		||||
 | 
			
		||||
        // delete alarm
 | 
			
		||||
        edgeImitator.expectMessageAmount(1);
 | 
			
		||||
        doDelete("/api/alarm/" + savedAlarm.getUuidId())
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
        Assert.assertTrue(edgeImitator.waitForMessages());
 | 
			
		||||
        latestMessage = edgeImitator.getLatestMessage();
 | 
			
		||||
        AbstractMessage latestMessage = edgeImitator.getLatestMessage();
 | 
			
		||||
        Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg);
 | 
			
		||||
        alarmUpdateMsg = (AlarmUpdateMsg) latestMessage;
 | 
			
		||||
        AlarmUpdateMsg alarmUpdateMsg = (AlarmUpdateMsg) latestMessage;
 | 
			
		||||
        Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, alarmUpdateMsg.getMsgType());
 | 
			
		||||
        alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true);
 | 
			
		||||
        Alarm alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true);
 | 
			
		||||
        Assert.assertNotNull(alarmMsg);
 | 
			
		||||
        Assert.assertEquals(savedAlarm.getType(), alarmMsg.getType());
 | 
			
		||||
        Assert.assertEquals(savedAlarm.getName(), alarmMsg.getName());
 | 
			
		||||
@ -252,4 +234,5 @@ public class AlarmEdgeTest extends AbstractEdgeTest {
 | 
			
		||||
        alarmComment.setCreatedTime(Uuids.unixTimestamp(uuid));
 | 
			
		||||
        return alarmComment;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -39,6 +39,8 @@ import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import static org.thingsboard.server.common.data.msg.TbMsgType.ACTIVITY_EVENT;
 | 
			
		||||
import static org.thingsboard.server.common.data.msg.TbMsgType.ALARM;
 | 
			
		||||
import static org.thingsboard.server.common.data.msg.TbMsgType.ALARM_ACK;
 | 
			
		||||
import static org.thingsboard.server.common.data.msg.TbMsgType.ALARM_CLEAR;
 | 
			
		||||
import static org.thingsboard.server.common.data.msg.TbMsgType.ATTRIBUTES_DELETED;
 | 
			
		||||
import static org.thingsboard.server.common.data.msg.TbMsgType.ATTRIBUTES_UPDATED;
 | 
			
		||||
import static org.thingsboard.server.common.data.msg.TbMsgType.CONNECT_EVENT;
 | 
			
		||||
@ -79,6 +81,9 @@ public abstract class AbstractTbMsgPushNode<T extends BaseTbMsgPushNodeConfigura
 | 
			
		||||
        if (msg.isTypeOf(ALARM)) {
 | 
			
		||||
            EdgeEventActionType actionType = getAlarmActionType(msg);
 | 
			
		||||
            return buildEvent(ctx.getTenantId(), actionType, getUUIDFromMsgData(msg), getAlarmEventType(), null);
 | 
			
		||||
        } else if (msg.isTypeOneOf(ALARM_ACK, ALARM_CLEAR)) {
 | 
			
		||||
            EdgeEventActionType actionType = EdgeEventActionType.valueOf(msg.getType());
 | 
			
		||||
            return buildEvent(ctx.getTenantId(), actionType, getUUIDFromMsgData(msg), getAlarmEventType(), null);
 | 
			
		||||
        } else {
 | 
			
		||||
            Map<String, String> metadata = msg.getMetaData().getData();
 | 
			
		||||
            EdgeEventActionType actionType = getEdgeEventActionTypeByMsgType(msg);
 | 
			
		||||
@ -165,6 +170,8 @@ public abstract class AbstractTbMsgPushNode<T extends BaseTbMsgPushNodeConfigura
 | 
			
		||||
            String scope = msg.getMetaData().getValue(DataConstants.SCOPE);
 | 
			
		||||
            actionType = StringUtils.isEmpty(scope) ?
 | 
			
		||||
                    EdgeEventActionType.TIMESERIES_UPDATED : EdgeEventActionType.ATTRIBUTES_UPDATED;
 | 
			
		||||
        } else if (msg.isTypeOneOf(ALARM_ACK, ALARM_CLEAR)) {
 | 
			
		||||
            actionType = EdgeEventActionType.valueOf(msg.getType());
 | 
			
		||||
        } else {
 | 
			
		||||
            String type = msg.getType();
 | 
			
		||||
            log.warn("Unsupported msg type [{}]", type);
 | 
			
		||||
@ -175,7 +182,7 @@ public abstract class AbstractTbMsgPushNode<T extends BaseTbMsgPushNodeConfigura
 | 
			
		||||
 | 
			
		||||
    protected boolean isSupportedMsgType(TbMsg msg) {
 | 
			
		||||
        return msg.isTypeOneOf(POST_TELEMETRY_REQUEST, POST_ATTRIBUTES_REQUEST, ATTRIBUTES_UPDATED, ATTRIBUTES_DELETED, TIMESERIES_UPDATED,
 | 
			
		||||
                ALARM, CONNECT_EVENT, DISCONNECT_EVENT, ACTIVITY_EVENT, INACTIVITY_EVENT, TO_SERVER_RPC_REQUEST);
 | 
			
		||||
                ALARM, ALARM_ACK, ALARM_CLEAR, CONNECT_EVENT, DISCONNECT_EVENT, ACTIVITY_EVENT, INACTIVITY_EVENT, TO_SERVER_RPC_REQUEST);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user