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 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 [{}]", 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);
|
throw new TbNodeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,8 +38,10 @@ 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.BDDMockito.willReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
@ -158,6 +160,19 @@ 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);
|
||||||
|
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) {
|
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