Check alarm status node: log severity DEBUG for "Failed to parse alarm" for known runtime exceptions. The ERROR severity will fire only on unexpected exception types. This will prevent flooding the error logger
This commit is contained in:
		
							parent
							
								
									01335e87ee
								
							
						
					
					
						commit
						2efd411a36
					
				@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.plugin.ComponentType;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsg;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
@Slf4j
 | 
			
		||||
@RuleNode(
 | 
			
		||||
@ -57,7 +58,7 @@ public class TbCheckAlarmStatusNode implements TbNode {
 | 
			
		||||
    public void onMsg(TbContext ctx, TbMsg msg) throws TbNodeException {
 | 
			
		||||
        try {
 | 
			
		||||
            Alarm alarm = JacksonUtil.fromString(msg.getData(), Alarm.class);
 | 
			
		||||
 | 
			
		||||
            Objects.requireNonNull(alarm, "alarm is null");
 | 
			
		||||
            ListenableFuture<Alarm> latest = ctx.getAlarmService().findAlarmByIdAsync(ctx.getTenantId(), alarm.getId());
 | 
			
		||||
 | 
			
		||||
            Futures.addCallback(latest, new FutureCallback<>() {
 | 
			
		||||
@ -78,7 +79,11 @@ public class TbCheckAlarmStatusNode implements TbNode {
 | 
			
		||||
                }
 | 
			
		||||
            }, ctx.getDbCallbackExecutor());
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            log.error("Failed to parse alarm: [{}]", msg.getData());
 | 
			
		||||
            if (e instanceof IllegalArgumentException || e instanceof NullPointerException) {
 | 
			
		||||
                log.debug("Failed to parse alarm: [{}] error [{}]", msg.getData(), e.getMessage());
 | 
			
		||||
            } else {
 | 
			
		||||
                log.error("Failed to parse alarm: [{}]", msg.getData(), e);
 | 
			
		||||
            }
 | 
			
		||||
            throw new TbNodeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,7 @@ import org.thingsboard.server.common.msg.TbMsgMetaData;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.Mockito.mock;
 | 
			
		||||
@ -158,6 +159,18 @@ class TbCheckAlarmStatusNodeTest {
 | 
			
		||||
        assertThat(value).isInstanceOf(TbNodeException.class).hasMessage("No such alarm found.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    void givenUnparseableAlarm_whenOnMsg_then_Failure() {
 | 
			
		||||
        String msgData = "{\"Number\":1113718,\"id\":8.1}";
 | 
			
		||||
        TbMsg msg = getTbMsg(msgData);
 | 
			
		||||
 | 
			
		||||
        assertThatThrownBy(() -> node.onMsg(ctx, msg))
 | 
			
		||||
                .as("onMsg")
 | 
			
		||||
                .isInstanceOf(TbNodeException.class)
 | 
			
		||||
                .hasCauseInstanceOf(IllegalArgumentException.class)
 | 
			
		||||
                .hasMessage("java.lang.IllegalArgumentException: The given string value cannot be transformed to Json object: {\"Number\":1113718,\"id\":8.1}");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private TbMsg getTbMsg(String msgData) {
 | 
			
		||||
        return TbMsg.newMsg(TbMsgType.POST_ATTRIBUTES_REQUEST, DEVICE_ID, TbMsgMetaData.EMPTY, msgData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,16 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
 | 
			
		||||
<configuration>
 | 
			
		||||
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
 | 
			
		||||
        <encoder>
 | 
			
		||||
            <pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
 | 
			
		||||
        </encoder>
 | 
			
		||||
    </appender>
 | 
			
		||||
 | 
			
		||||
    <logger name="org.thingsboard.rule.engine.filter.TbCheckAlarmStatusNode" level="DEBUG"/>
 | 
			
		||||
 | 
			
		||||
    <root level="INFO">
 | 
			
		||||
        <appender-ref ref="console"/>
 | 
			
		||||
    </root>
 | 
			
		||||
 | 
			
		||||
</configuration>
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user