init commit

This commit is contained in:
Dmytro Shvaika 2019-12-08 23:52:29 +02:00
parent 1b5a8ac6fc
commit dd64749075
11 changed files with 113 additions and 7 deletions

View File

@ -270,9 +270,16 @@ public class CassandraDatabaseUpgradeService implements DatabaseUpgradeService {
case "2.4.1": case "2.4.1":
log.info("Updating schema ..."); log.info("Updating schema ...");
String updateAssetTableStmt = "alter table asset add label text"; String updateAssetTableStmt = "alter table asset add label text";
String updateAlarmTableStmt = "alter table alarm add propagate_relation_types text";
try { try {
log.info("Updating assets ...");
cluster.getSession().execute(updateAssetTableStmt); cluster.getSession().execute(updateAssetTableStmt);
Thread.sleep(2500); Thread.sleep(2500);
log.info("Assets updated.");
log.info("Updating alarms ...");
cluster.getSession().execute(updateAlarmTableStmt);
Thread.sleep(2500);
log.info("Alarms updated.");
} catch (InvalidQueryException e) {} } catch (InvalidQueryException e) {}
log.info("Schema updated."); log.info("Schema updated.");
break; break;

View File

@ -193,6 +193,9 @@ public class SqlDatabaseUpgradeService implements DatabaseUpgradeService {
try { try {
conn.createStatement().execute("ALTER TABLE asset ADD CONSTRAINT asset_name_unq_key UNIQUE (tenant_id, name)"); //NOSONAR, ignoring because method used to execute thingsboard database upgrade script conn.createStatement().execute("ALTER TABLE asset ADD CONSTRAINT asset_name_unq_key UNIQUE (tenant_id, name)"); //NOSONAR, ignoring because method used to execute thingsboard database upgrade script
} catch (Exception e) {} } catch (Exception e) {}
try {
conn.createStatement().execute("ALTER TABLE alarm ADD COLUMN propagate_relation_types varchar"); //NOSONAR, ignoring because method used to execute thingsboard database upgrade script
} catch (Exception e) {}
log.info("Schema updated."); log.info("Schema updated.");
} }
break; break;

View File

@ -26,6 +26,8 @@ import org.thingsboard.server.common.data.HasTenantId;
import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import java.util.List;
/** /**
* Created by ashvayka on 11.05.17. * Created by ashvayka on 11.05.17.
*/ */
@ -45,6 +47,7 @@ public class Alarm extends BaseData<AlarmId> implements HasName, HasTenantId {
private long clearTs; private long clearTs;
private transient JsonNode details; private transient JsonNode details;
private boolean propagate; private boolean propagate;
private List<String> propagateRelationTypes;
public Alarm() { public Alarm() {
super(); super();
@ -68,6 +71,7 @@ public class Alarm extends BaseData<AlarmId> implements HasName, HasTenantId {
this.clearTs = alarm.getClearTs(); this.clearTs = alarm.getClearTs();
this.details = alarm.getDetails(); this.details = alarm.getDetails();
this.propagate = alarm.isPropagate(); this.propagate = alarm.isPropagate();
this.propagateRelationTypes = alarm.getPropagateRelationTypes();
} }
@Override @Override

View File

@ -23,8 +23,8 @@ import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmId; import org.thingsboard.server.common.data.alarm.AlarmId;
@ -52,6 +52,7 @@ import javax.annotation.Nullable;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -59,6 +60,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validateId;
@ -154,9 +156,17 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
private List<EntityId> getParentEntities(Alarm alarm) throws InterruptedException, ExecutionException { private List<EntityId> getParentEntities(Alarm alarm) throws InterruptedException, ExecutionException {
EntityRelationsQuery query = new EntityRelationsQuery(); EntityRelationsQuery query = new EntityRelationsQuery();
query.setParameters(new RelationsSearchParameters(alarm.getOriginator(), EntitySearchDirection.TO, Integer.MAX_VALUE, false)); RelationsSearchParameters parameters = new RelationsSearchParameters(alarm.getOriginator(), EntitySearchDirection.TO, Integer.MAX_VALUE, false);
query.setParameters(parameters);
List<String> propagateRelationTypes = alarm.getPropagateRelationTypes();
if (!CollectionUtils.isEmpty(propagateRelationTypes)) {
return relationService.findByQuery(alarm.getTenantId(), query).get().stream()
.filter(entityRelation -> propagateRelationTypes.contains(entityRelation.getType()))
.map(EntityRelation::getFrom).collect(Collectors.toList());
} else {
return relationService.findByQuery(alarm.getTenantId(), query).get().stream().map(EntityRelation::getFrom).collect(Collectors.toList()); return relationService.findByQuery(alarm.getTenantId(), query).get().stream().map(EntityRelation::getFrom).collect(Collectors.toList());
} }
}
private ListenableFuture<Alarm> updateAlarm(Alarm update) { private ListenableFuture<Alarm> updateAlarm(Alarm update) {
alarmDataValidator.validate(update, Alarm::getTenantId); alarmDataValidator.validate(update, Alarm::getTenantId);
@ -360,13 +370,28 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
existing.setSeverity(alarm.getSeverity()); existing.setSeverity(alarm.getSeverity());
existing.setDetails(alarm.getDetails()); existing.setDetails(alarm.getDetails());
existing.setPropagate(existing.isPropagate() || alarm.isPropagate()); existing.setPropagate(existing.isPropagate() || alarm.isPropagate());
List<String> existingPropagateRelationTypes = existing.getPropagateRelationTypes();
List<String> newRelationTypes = alarm.getPropagateRelationTypes();
if (!CollectionUtils.isEmpty(existingPropagateRelationTypes) && !CollectionUtils.isEmpty(newRelationTypes)) {
existing.setPropagateRelationTypes(Stream.concat(existingPropagateRelationTypes.stream(), newRelationTypes.stream())
.distinct()
.collect(Collectors.toList()));
} else {
existing.setPropagateRelationTypes(Collections.emptyList());
}
return existing; return existing;
} }
private void updateRelations(Alarm alarm, AlarmStatus oldStatus, AlarmStatus newStatus) { private void updateRelations(Alarm alarm, AlarmStatus oldStatus, AlarmStatus newStatus) {
try { try {
List<EntityRelation> relations = relationService.findByToAsync(alarm.getTenantId(), alarm.getId(), RelationTypeGroup.ALARM).get(); List<EntityRelation> relations = relationService.findByToAsync(alarm.getTenantId(), alarm.getId(), RelationTypeGroup.ALARM).get();
Set<EntityId> parents = relations.stream().map(EntityRelation::getFrom).collect(Collectors.toSet()); Set<EntityId> parents;
List<String> propagateRelationTypes = alarm.getPropagateRelationTypes();
if (!CollectionUtils.isEmpty(propagateRelationTypes)) {
parents = relations.stream().filter(entityRelation -> propagateRelationTypes.contains(entityRelation.getType())).map(EntityRelation::getFrom).collect(Collectors.toSet());
} else {
parents = relations.stream().map(EntityRelation::getFrom).collect(Collectors.toSet());
}
for (EntityId parentId : parents) { for (EntityId parentId : parents) {
updateAlarmRelation(alarm.getTenantId(), parentId, alarm.getId(), oldStatus, newStatus); updateAlarmRelation(alarm.getTenantId(), parentId, alarm.getId(), oldStatus, newStatus);
} }

View File

@ -231,6 +231,7 @@ public class ModelConstants {
public static final String ALARM_ACK_TS_PROPERTY = "ack_ts"; public static final String ALARM_ACK_TS_PROPERTY = "ack_ts";
public static final String ALARM_CLEAR_TS_PROPERTY = "clear_ts"; public static final String ALARM_CLEAR_TS_PROPERTY = "clear_ts";
public static final String ALARM_PROPAGATE_PROPERTY = "propagate"; public static final String ALARM_PROPAGATE_PROPERTY = "propagate";
public static final String ALARM_PROPAGATE_RELATION_TYPES = "propagate_relation_types";
public static final String ALARM_BY_ID_VIEW_NAME = "alarm_by_id"; public static final String ALARM_BY_ID_VIEW_NAME = "alarm_by_id";

View File

@ -23,6 +23,8 @@ import com.datastax.driver.mapping.annotations.Table;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmId; import org.thingsboard.server.common.data.alarm.AlarmId;
@ -36,6 +38,7 @@ import org.thingsboard.server.dao.model.type.AlarmStatusCodec;
import org.thingsboard.server.dao.model.type.EntityTypeCodec; import org.thingsboard.server.dao.model.type.EntityTypeCodec;
import org.thingsboard.server.dao.model.type.JsonCodec; import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.Arrays;
import java.util.UUID; import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ACK_TS_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ACK_TS_PROPERTY;
@ -46,6 +49,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.ALARM_END_TS_PROPE
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_RELATION_TYPES;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_SEVERITY_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_SEVERITY_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_START_TS_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_START_TS_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_STATUS_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_STATUS_PROPERTY;
@ -102,6 +106,9 @@ public final class AlarmEntity implements BaseEntity<Alarm> {
@Column(name = ALARM_PROPAGATE_PROPERTY) @Column(name = ALARM_PROPAGATE_PROPERTY)
private Boolean propagate; private Boolean propagate;
@Column(name = ALARM_PROPAGATE_RELATION_TYPES)
private String propagateRelationTypes;
public AlarmEntity() { public AlarmEntity() {
super(); super();
} }
@ -125,6 +132,12 @@ public final class AlarmEntity implements BaseEntity<Alarm> {
this.ackTs = alarm.getAckTs(); this.ackTs = alarm.getAckTs();
this.clearTs = alarm.getClearTs(); this.clearTs = alarm.getClearTs();
this.details = alarm.getDetails(); this.details = alarm.getDetails();
this.details = alarm.getDetails();
if (!CollectionUtils.isEmpty(alarm.getPropagateRelationTypes())) {
this.propagateRelationTypes = String.join(",", alarm.getPropagateRelationTypes());
} else {
this.propagateRelationTypes = null;
}
} }
public UUID getId() { public UUID getId() {
@ -231,6 +244,10 @@ public final class AlarmEntity implements BaseEntity<Alarm> {
this.propagate = propagate; this.propagate = propagate;
} }
public String getPropagateRelationTypes() { return propagateRelationTypes; }
public void setPropagateRelationTypes(String propagateRelationTypes) { this.propagateRelationTypes = propagateRelationTypes; }
@Override @Override
public Alarm toData() { public Alarm toData() {
Alarm alarm = new Alarm(new AlarmId(id)); Alarm alarm = new Alarm(new AlarmId(id));
@ -248,6 +265,9 @@ public final class AlarmEntity implements BaseEntity<Alarm> {
alarm.setAckTs(ackTs); alarm.setAckTs(ackTs);
alarm.setClearTs(clearTs); alarm.setClearTs(clearTs);
alarm.setDetails(details); alarm.setDetails(details);
if(!StringUtils.isEmpty(propagateRelationTypes)) {
alarm.setPropagateRelationTypes(Arrays.asList(propagateRelationTypes.split(",")));
}
return alarm; return alarm;
} }

View File

@ -21,6 +21,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDef;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.UUIDConverter; import org.thingsboard.server.common.data.UUIDConverter;
import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.Alarm;
@ -40,6 +42,8 @@ import javax.persistence.EnumType;
import javax.persistence.Enumerated; import javax.persistence.Enumerated;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.Arrays;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ACK_TS_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ACK_TS_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_CLEAR_TS_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_CLEAR_TS_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_COLUMN_FAMILY_NAME; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_COLUMN_FAMILY_NAME;
@ -47,6 +51,7 @@ import static org.thingsboard.server.dao.model.ModelConstants.ALARM_END_TS_PROPE
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_RELATION_TYPES;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_SEVERITY_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_SEVERITY_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_START_TS_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_START_TS_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.ALARM_STATUS_PROPERTY; import static org.thingsboard.server.dao.model.ModelConstants.ALARM_STATUS_PROPERTY;
@ -99,6 +104,9 @@ public final class AlarmEntity extends BaseSqlEntity<Alarm> implements BaseEntit
@Column(name = ALARM_PROPAGATE_PROPERTY) @Column(name = ALARM_PROPAGATE_PROPERTY)
private Boolean propagate; private Boolean propagate;
@Column(name = ALARM_PROPAGATE_RELATION_TYPES)
private String propagateRelationTypes;
public AlarmEntity() { public AlarmEntity() {
super(); super();
} }
@ -122,6 +130,12 @@ public final class AlarmEntity extends BaseSqlEntity<Alarm> implements BaseEntit
this.ackTs = alarm.getAckTs(); this.ackTs = alarm.getAckTs();
this.clearTs = alarm.getClearTs(); this.clearTs = alarm.getClearTs();
this.details = alarm.getDetails(); this.details = alarm.getDetails();
if (!CollectionUtils.isEmpty(alarm.getPropagateRelationTypes())) {
this.propagateRelationTypes = String.join(",", alarm.getPropagateRelationTypes());
} else {
this.propagateRelationTypes = null;
}
} }
@Override @Override
@ -141,6 +155,9 @@ public final class AlarmEntity extends BaseSqlEntity<Alarm> implements BaseEntit
alarm.setAckTs(ackTs); alarm.setAckTs(ackTs);
alarm.setClearTs(clearTs); alarm.setClearTs(clearTs);
alarm.setDetails(details); alarm.setDetails(details);
if(!StringUtils.isEmpty(propagateRelationTypes)) {
alarm.setPropagateRelationTypes(Arrays.asList(propagateRelationTypes.split(",")));
}
return alarm; return alarm;
} }

View File

@ -306,6 +306,7 @@ CREATE TABLE IF NOT EXISTS thingsboard.alarm (
clear_ts bigint, clear_ts bigint,
details text, details text,
propagate boolean, propagate boolean,
propagate_relation_types text,
PRIMARY KEY ((tenant_id, originator_id, originator_type), type, id) PRIMARY KEY ((tenant_id, originator_id, originator_type), type, id)
) WITH CLUSTERING ORDER BY ( type ASC, id DESC); ) WITH CLUSTERING ORDER BY ( type ASC, id DESC);

View File

@ -34,6 +34,7 @@ CREATE TABLE IF NOT EXISTS alarm (
start_ts bigint, start_ts bigint,
status varchar(255), status varchar(255),
tenant_id varchar(31), tenant_id varchar(31),
propagate_relation_types varchar,
type varchar(255) type varchar(255)
); );

View File

@ -21,11 +21,11 @@ import com.google.common.base.Function;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
import org.thingsboard.rule.engine.api.RuleNode; import org.thingsboard.rule.engine.api.RuleNode;
import org.thingsboard.rule.engine.api.TbContext; import org.thingsboard.rule.engine.api.TbContext;
import org.thingsboard.rule.engine.api.TbNodeConfiguration; import org.thingsboard.rule.engine.api.TbNodeConfiguration;
import org.thingsboard.rule.engine.api.TbNodeException; import org.thingsboard.rule.engine.api.TbNodeException;
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmStatus; import org.thingsboard.server.common.data.alarm.AlarmStatus;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
@ -33,6 +33,8 @@ import org.thingsboard.server.common.data.plugin.ComponentType;
import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsg;
import java.io.IOException; import java.io.IOException;
import java.util.Collections;
import java.util.List;
@Slf4j @Slf4j
@RuleNode( @RuleNode(
@ -56,7 +58,11 @@ public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConf
@Override @Override
protected TbCreateAlarmNodeConfiguration loadAlarmNodeConfig(TbNodeConfiguration configuration) throws TbNodeException { protected TbCreateAlarmNodeConfiguration loadAlarmNodeConfig(TbNodeConfiguration configuration) throws TbNodeException {
return TbNodeUtils.convert(configuration, TbCreateAlarmNodeConfiguration.class); TbCreateAlarmNodeConfiguration nodeConfiguration = TbNodeUtils.convert(configuration, TbCreateAlarmNodeConfiguration.class);
if(nodeConfiguration.getRelationTypes() == null) {
nodeConfiguration.setRelationTypes(Collections.emptyList());
}
return nodeConfiguration;
} }
@Override @Override
@ -66,6 +72,7 @@ public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConf
if (!config.isUseMessageAlarmData()) { if (!config.isUseMessageAlarmData()) {
alarmType = TbNodeUtils.processPattern(this.config.getAlarmType(), msg.getMetaData()); alarmType = TbNodeUtils.processPattern(this.config.getAlarmType(), msg.getMetaData());
msgAlarm = null; msgAlarm = null;
} else { } else {
try { try {
@ -98,6 +105,9 @@ public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConf
if (msgAlarm.getStatus() == null) { if (msgAlarm.getStatus() == null) {
msgAlarm.setStatus(AlarmStatus.ACTIVE_UNACK); msgAlarm.setStatus(AlarmStatus.ACTIVE_UNACK);
} }
if (msgAlarm.getPropagateRelationTypes() == null) {
msgAlarm.setPropagateRelationTypes(Collections.emptyList());
}
return msgAlarm; return msgAlarm;
} }
@ -125,9 +135,15 @@ public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConf
if (msgAlarm != null) { if (msgAlarm != null) {
existingAlarm.setSeverity(msgAlarm.getSeverity()); existingAlarm.setSeverity(msgAlarm.getSeverity());
existingAlarm.setPropagate(msgAlarm.isPropagate()); existingAlarm.setPropagate(msgAlarm.isPropagate());
existingAlarm.setPropagateRelationTypes(msgAlarm.getPropagateRelationTypes());
} else { } else {
existingAlarm.setSeverity(config.getSeverity()); existingAlarm.setSeverity(config.getSeverity());
existingAlarm.setPropagate(config.isPropagate()); existingAlarm.setPropagate(config.isPropagate());
if(config.getRelationTypes() == null) {
existingAlarm.setPropagateRelationTypes(Collections.emptyList());
} else {
existingAlarm.setPropagateRelationTypes(config.getRelationTypes());
}
} }
existingAlarm.setDetails(details); existingAlarm.setDetails(details);
existingAlarm.setEndTs(System.currentTimeMillis()); existingAlarm.setEndTs(System.currentTimeMillis());
@ -138,6 +154,10 @@ public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConf
} }
private Alarm buildAlarm(TbMsg msg, JsonNode details, TenantId tenantId) { private Alarm buildAlarm(TbMsg msg, JsonNode details, TenantId tenantId) {
List<String> relationTypes = this.config.getRelationTypes();
if (relationTypes == null) {
relationTypes = Collections.emptyList();
}
return Alarm.builder() return Alarm.builder()
.tenantId(tenantId) .tenantId(tenantId)
.originator(msg.getOriginator()) .originator(msg.getOriginator())
@ -145,6 +165,7 @@ public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConf
.severity(config.getSeverity()) .severity(config.getSeverity())
.propagate(config.isPropagate()) .propagate(config.isPropagate())
.type(TbNodeUtils.processPattern(this.config.getAlarmType(), msg.getMetaData())) .type(TbNodeUtils.processPattern(this.config.getAlarmType(), msg.getMetaData()))
.propagateRelationTypes(relationTypes)
//todo-vp: alarm date should be taken from Message or current Time should be used? //todo-vp: alarm date should be taken from Message or current Time should be used?
// .startTs(System.currentTimeMillis()) // .startTs(System.currentTimeMillis())
// .endTs(System.currentTimeMillis()) // .endTs(System.currentTimeMillis())

View File

@ -19,6 +19,9 @@ import lombok.Data;
import org.thingsboard.rule.engine.api.NodeConfiguration; import org.thingsboard.rule.engine.api.NodeConfiguration;
import org.thingsboard.server.common.data.alarm.AlarmSeverity; import org.thingsboard.server.common.data.alarm.AlarmSeverity;
import java.util.Collections;
import java.util.List;
@Data @Data
public class TbCreateAlarmNodeConfiguration extends TbAbstractAlarmNodeConfiguration implements NodeConfiguration<TbCreateAlarmNodeConfiguration> { public class TbCreateAlarmNodeConfiguration extends TbAbstractAlarmNodeConfiguration implements NodeConfiguration<TbCreateAlarmNodeConfiguration> {
@ -26,18 +29,21 @@ public class TbCreateAlarmNodeConfiguration extends TbAbstractAlarmNodeConfigura
private boolean propagate; private boolean propagate;
private boolean useMessageAlarmData; private boolean useMessageAlarmData;
private List<String> relationTypes;
@Override @Override
public TbCreateAlarmNodeConfiguration defaultConfiguration() { public TbCreateAlarmNodeConfiguration defaultConfiguration() {
TbCreateAlarmNodeConfiguration configuration = new TbCreateAlarmNodeConfiguration(); TbCreateAlarmNodeConfiguration configuration = new TbCreateAlarmNodeConfiguration();
configuration.setAlarmDetailsBuildJs("var details = {};\n" + configuration.setAlarmDetailsBuildJs("var details = {};\n" +
"if (metadata.prevAlarmDetails) {\n" + "if (metadata.prevAlarmDetails) {\n" +
" details = JSON.parse(metadata.prevAlarmDetails);\n" + " details = JSON.parse(metadata.prevAlarmDetails);\n" +
"}\n"+ "}\n" +
"return details;"); "return details;");
configuration.setAlarmType("General Alarm"); configuration.setAlarmType("General Alarm");
configuration.setSeverity(AlarmSeverity.CRITICAL); configuration.setSeverity(AlarmSeverity.CRITICAL);
configuration.setPropagate(false); configuration.setPropagate(false);
configuration.setUseMessageAlarmData(false); configuration.setUseMessageAlarmData(false);
configuration.setRelationTypes(Collections.emptyList());
return configuration; return configuration;
} }
} }