Added usage of msg count in the generator node

This commit is contained in:
VoBa 2019-07-19 13:47:02 +03:00 committed by Igor Kulikov
parent 75702b6474
commit a1aea81366
2 changed files with 7 additions and 4 deletions

View File

@ -54,6 +54,7 @@ public class TbMsgGeneratorNode implements TbNode {
private ScriptEngine jsEngine; private ScriptEngine jsEngine;
private long delay; private long delay;
private long lastScheduledTs; private long lastScheduledTs;
private int currentMsgCount;
private EntityId originatorId; private EntityId originatorId;
private UUID nextTickId; private UUID nextTickId;
private TbMsg prevMsg; private TbMsg prevMsg;
@ -63,6 +64,7 @@ public class TbMsgGeneratorNode implements TbNode {
public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
this.config = TbNodeUtils.convert(configuration, TbMsgGeneratorNodeConfiguration.class); this.config = TbNodeUtils.convert(configuration, TbMsgGeneratorNodeConfiguration.class);
this.delay = TimeUnit.SECONDS.toMillis(config.getPeriodInSeconds()); this.delay = TimeUnit.SECONDS.toMillis(config.getPeriodInSeconds());
this.currentMsgCount = 0;
if (!StringUtils.isEmpty(config.getOriginatorId())) { if (!StringUtils.isEmpty(config.getOriginatorId())) {
originatorId = EntityIdFactory.getByTypeAndUuid(config.getOriginatorType(), config.getOriginatorId()); originatorId = EntityIdFactory.getByTypeAndUuid(config.getOriginatorType(), config.getOriginatorId());
} else { } else {
@ -94,9 +96,10 @@ public class TbMsgGeneratorNode implements TbNode {
if (initialized && msg.getType().equals(TB_MSG_GENERATOR_NODE_MSG) && msg.getId().equals(nextTickId)) { if (initialized && msg.getType().equals(TB_MSG_GENERATOR_NODE_MSG) && msg.getId().equals(nextTickId)) {
withCallback(generate(ctx), withCallback(generate(ctx),
m -> { m -> {
if (initialized) { if (initialized && (config.getMsgCount() == TbMsgGeneratorNodeConfiguration.UNLIMITED_MSG_COUNT || currentMsgCount < config.getMsgCount())) {
ctx.tellNext(m, SUCCESS); ctx.tellNext(m, SUCCESS);
scheduleTickMsg(ctx); scheduleTickMsg(ctx);
currentMsgCount++;
} }
}, },
t -> { t -> {

View File

@ -19,11 +19,11 @@ import lombok.Data;
import org.thingsboard.rule.engine.api.NodeConfiguration; import org.thingsboard.rule.engine.api.NodeConfiguration;
import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityType;
import java.util.Map;
@Data @Data
public class TbMsgGeneratorNodeConfiguration implements NodeConfiguration<TbMsgGeneratorNodeConfiguration> { public class TbMsgGeneratorNodeConfiguration implements NodeConfiguration<TbMsgGeneratorNodeConfiguration> {
public static final int UNLIMITED_MSG_COUNT = 0;
private int msgCount; private int msgCount;
private int periodInSeconds; private int periodInSeconds;
private String originatorId; private String originatorId;
@ -33,7 +33,7 @@ public class TbMsgGeneratorNodeConfiguration implements NodeConfiguration<TbMsgG
@Override @Override
public TbMsgGeneratorNodeConfiguration defaultConfiguration() { public TbMsgGeneratorNodeConfiguration defaultConfiguration() {
TbMsgGeneratorNodeConfiguration configuration = new TbMsgGeneratorNodeConfiguration(); TbMsgGeneratorNodeConfiguration configuration = new TbMsgGeneratorNodeConfiguration();
configuration.setMsgCount(0); configuration.setMsgCount(UNLIMITED_MSG_COUNT);
configuration.setPeriodInSeconds(1); configuration.setPeriodInSeconds(1);
configuration.setJsScript("var msg = { temp: 42, humidity: 77 };\n" + configuration.setJsScript("var msg = { temp: 42, humidity: 77 };\n" +
"var metadata = { data: 40 };\n" + "var metadata = { data: 40 };\n" +