Merge pull request #10437 from smatvienko-tb/feature/alarm-status-node-log-improvement
Check alarm status node: log severity reduced for "Failed to parse alarm" for known runtime exceptions
This commit is contained in:
commit
bdc99ee4d9
@ -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 [{}]", ctx.getTenantId(), ctx.getRuleChainName(), msg.getData(), e.getMessage());
|
||||
} else {
|
||||
log.error("[{}][{}] Failed to parse alarm: [{}]", ctx.getTenantId(), ctx.getRuleChainName(), msg.getData(), e);
|
||||
}
|
||||
throw new TbNodeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,8 +38,10 @@ 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.BDDMockito.willReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
@ -158,6 +160,19 @@ 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);
|
||||
willReturn("Default Rule Chain").given(ctx).getRuleChainName();
|
||||
|
||||
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