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 org.thingsboard.server.common.msg.TbMsg;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RuleNode(
|
@RuleNode(
|
||||||
@ -57,7 +58,7 @@ public class TbCheckAlarmStatusNode implements TbNode {
|
|||||||
public void onMsg(TbContext ctx, TbMsg msg) throws TbNodeException {
|
public void onMsg(TbContext ctx, TbMsg msg) throws TbNodeException {
|
||||||
try {
|
try {
|
||||||
Alarm alarm = JacksonUtil.fromString(msg.getData(), Alarm.class);
|
Alarm alarm = JacksonUtil.fromString(msg.getData(), Alarm.class);
|
||||||
|
Objects.requireNonNull(alarm, "alarm is null");
|
||||||
ListenableFuture<Alarm> latest = ctx.getAlarmService().findAlarmByIdAsync(ctx.getTenantId(), alarm.getId());
|
ListenableFuture<Alarm> latest = ctx.getAlarmService().findAlarmByIdAsync(ctx.getTenantId(), alarm.getId());
|
||||||
|
|
||||||
Futures.addCallback(latest, new FutureCallback<>() {
|
Futures.addCallback(latest, new FutureCallback<>() {
|
||||||
@ -78,7 +79,11 @@ public class TbCheckAlarmStatusNode implements TbNode {
|
|||||||
}
|
}
|
||||||
}, ctx.getDbCallbackExecutor());
|
}, ctx.getDbCallbackExecutor());
|
||||||
} catch (Exception e) {
|
} 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);
|
throw new TbNodeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,6 +38,7 @@ import org.thingsboard.server.common.msg.TbMsgMetaData;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
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.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@ -158,6 +159,18 @@ class TbCheckAlarmStatusNodeTest {
|
|||||||
assertThat(value).isInstanceOf(TbNodeException.class).hasMessage("No such alarm found.");
|
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) {
|
private TbMsg getTbMsg(String msgData) {
|
||||||
return TbMsg.newMsg(TbMsgType.POST_ATTRIBUTES_REQUEST, DEVICE_ID, TbMsgMetaData.EMPTY, 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