Fix for Windows installation and Alarm propagation

This commit is contained in:
Andrew Shvayka 2017-07-22 15:04:05 +03:00
parent 5c0c93013d
commit 4eb164f798
7 changed files with 69 additions and 16 deletions

View File

@ -241,7 +241,7 @@ spring:
password: "${SPRING_DATASOURCE_PASSWORD:}" password: "${SPRING_DATASOURCE_PASSWORD:}"
# Postgres DAO Configuration # PostgreSQL DAO Configuration
#spring: #spring:
# data: # data:
# jpa: # jpa:

View File

@ -82,6 +82,8 @@ SET SQL_DATA_FOLDER=%BASE%\data\sql
SET jarfile=%BASE%\lib\${pkg.name}.jar SET jarfile=%BASE%\lib\${pkg.name}.jar
SET installDir=%BASE%\data SET installDir=%BASE%\data
PUSHD %BASE%\conf
java -cp %jarfile% -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication^ java -cp %jarfile% -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication^
-Dinstall.data_dir=%installDir%^ -Dinstall.data_dir=%installDir%^
-Dinstall.load_demo=%loadDemo%^ -Dinstall.load_demo=%loadDemo%^
@ -92,8 +94,10 @@ java -cp %jarfile% -Dloader.main=org.thingsboard.server.ThingsboardInstallApplic
if errorlevel 1 ( if errorlevel 1 (
@echo ThingsBoard installation failed! @echo ThingsBoard installation failed!
POPD
exit /b %errorlevel% exit /b %errorlevel%
) )
POPD
%BASE%${pkg.name}.exe install %BASE%${pkg.name}.exe install

View File

@ -26,6 +26,8 @@ SET SQL_DATA_FOLDER=%BASE%\data\sql
SET jarfile=%BASE%\lib\${pkg.name}.jar SET jarfile=%BASE%\lib\${pkg.name}.jar
SET installDir=%BASE%\data SET installDir=%BASE%\data
PUSHD %BASE%\conf
java -cp %jarfile% -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication^ java -cp %jarfile% -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication^
-Dinstall.data_dir=%installDir%^ -Dinstall.data_dir=%installDir%^
-Dspring.jpa.hibernate.ddl-auto=none^ -Dspring.jpa.hibernate.ddl-auto=none^
@ -36,8 +38,10 @@ java -cp %jarfile% -Dloader.main=org.thingsboard.server.ThingsboardInstallApplic
if errorlevel 1 ( if errorlevel 1 (
@echo ThingsBoard upgrade failed! @echo ThingsBoard upgrade failed!
POPD
exit /b %errorlevel% exit /b %errorlevel%
) )
POPD
@ECHO ThingsBoard upgraded successfully! @ECHO ThingsBoard upgraded successfully!

View File

@ -118,17 +118,23 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
private Alarm createAlarm(Alarm alarm) throws InterruptedException, ExecutionException { private Alarm createAlarm(Alarm alarm) throws InterruptedException, ExecutionException {
log.debug("New Alarm : {}", alarm); log.debug("New Alarm : {}", alarm);
Alarm saved = alarmDao.save(alarm); Alarm saved = alarmDao.save(alarm);
EntityRelationsQuery query = new EntityRelationsQuery(); createAlarmRelations(saved);
query.setParameters(new RelationsSearchParameters(saved.getOriginator(), EntitySearchDirection.TO, Integer.MAX_VALUE));
List<EntityId> parentEntities = relationService.findByQuery(query).get().stream().map(r -> r.getFrom()).collect(Collectors.toList());
for (EntityId parentId : parentEntities) {
createAlarmRelation(parentId, saved.getId(), saved.getStatus(), true);
}
createAlarmRelation(alarm.getOriginator(), saved.getId(), saved.getStatus(), true);
return saved; return saved;
} }
protected ListenableFuture<Alarm> updateAlarm(Alarm update) { private void createAlarmRelations(Alarm alarm) throws InterruptedException, ExecutionException {
if (alarm.isPropagate()) {
EntityRelationsQuery query = new EntityRelationsQuery();
query.setParameters(new RelationsSearchParameters(alarm.getOriginator(), EntitySearchDirection.TO, Integer.MAX_VALUE));
List<EntityId> parentEntities = relationService.findByQuery(query).get().stream().map(r -> r.getFrom()).collect(Collectors.toList());
for (EntityId parentId : parentEntities) {
createAlarmRelation(parentId, alarm.getId(), alarm.getStatus(), true);
}
}
createAlarmRelation(alarm.getOriginator(), alarm.getId(), alarm.getStatus(), true);
}
private ListenableFuture<Alarm> updateAlarm(Alarm update) {
alarmDataValidator.validate(update); alarmDataValidator.validate(update);
return getAndUpdate(update.getId(), new Function<Alarm, Alarm>() { return getAndUpdate(update.getId(), new Function<Alarm, Alarm>() {
@Nullable @Nullable
@ -146,8 +152,17 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
private Alarm updateAlarm(Alarm oldAlarm, Alarm newAlarm) { private Alarm updateAlarm(Alarm oldAlarm, Alarm newAlarm) {
AlarmStatus oldStatus = oldAlarm.getStatus(); AlarmStatus oldStatus = oldAlarm.getStatus();
AlarmStatus newStatus = newAlarm.getStatus(); AlarmStatus newStatus = newAlarm.getStatus();
boolean oldPropagate = oldAlarm.isPropagate();
boolean newPropagate = newAlarm.isPropagate();
Alarm result = alarmDao.save(merge(oldAlarm, newAlarm)); Alarm result = alarmDao.save(merge(oldAlarm, newAlarm));
if (oldStatus != newStatus) { if (!oldPropagate && newPropagate) {
try {
createAlarmRelations(result);
} catch (InterruptedException | ExecutionException e) {
log.warn("Failed to update alarm relations [{}]", result, e);
throw new RuntimeException(e);
}
} else if (oldStatus != newStatus) {
updateRelations(oldAlarm, oldStatus, newStatus); updateRelations(oldAlarm, oldStatus, newStatus);
} }
return result; return result;
@ -315,16 +330,19 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
existing.setStatus(alarm.getStatus()); existing.setStatus(alarm.getStatus());
existing.setSeverity(alarm.getSeverity()); existing.setSeverity(alarm.getSeverity());
existing.setDetails(alarm.getDetails()); existing.setDetails(alarm.getDetails());
existing.setPropagate(existing.isPropagate() || alarm.isPropagate());
return existing; return existing;
} }
private void updateRelations(Alarm alarm, AlarmStatus oldStatus, AlarmStatus newStatus) { private void updateRelations(Alarm alarm, AlarmStatus oldStatus, AlarmStatus newStatus) {
try { try {
EntityRelationsQuery query = new EntityRelationsQuery(); if (alarm.isPropagate()) {
query.setParameters(new RelationsSearchParameters(alarm.getOriginator(), EntitySearchDirection.TO, Integer.MAX_VALUE)); EntityRelationsQuery query = new EntityRelationsQuery();
List<EntityId> parentEntities = relationService.findByQuery(query).get().stream().map(r -> r.getFrom()).collect(Collectors.toList()); query.setParameters(new RelationsSearchParameters(alarm.getOriginator(), EntitySearchDirection.TO, Integer.MAX_VALUE));
for (EntityId parentId : parentEntities) { List<EntityId> parentEntities = relationService.findByQuery(query).get().stream().map(r -> r.getFrom()).collect(Collectors.toList());
updateAlarmRelation(parentId, alarm.getId(), oldStatus, newStatus); for (EntityId parentId : parentEntities) {
updateAlarmRelation(parentId, alarm.getId(), oldStatus, newStatus);
}
} }
updateAlarmRelation(alarm.getOriginator(), alarm.getId(), oldStatus, newStatus); updateAlarmRelation(alarm.getOriginator(), alarm.getId(), oldStatus, newStatus);
} catch (ExecutionException | InterruptedException e) { } catch (ExecutionException | InterruptedException e) {

View File

@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.thingsboard.server.common.data.UUIDConverter; import org.thingsboard.server.common.data.UUIDConverter;
import org.thingsboard.server.common.data.id.ComponentDescriptorId; import org.thingsboard.server.common.data.id.ComponentDescriptorId;
import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.data.page.TextPageLink;
@ -102,11 +103,13 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
} }
@Override @Override
@Transactional
public void deleteById(ComponentDescriptorId componentId) { public void deleteById(ComponentDescriptorId componentId) {
removeById(componentId.getId()); removeById(componentId.getId());
} }
@Override @Override
@Transactional
public void deleteByClazz(String clazz) { public void deleteByClazz(String clazz) {
componentDescriptorRepository.deleteByClazz(clazz); componentDescriptorRepository.deleteByClazz(clazz);
} }

View File

@ -99,6 +99,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
long ts = System.currentTimeMillis(); long ts = System.currentTimeMillis();
Alarm alarm = Alarm.builder().tenantId(tenantId).originator(childId) Alarm alarm = Alarm.builder().tenantId(tenantId).originator(childId)
.type(TEST_ALARM) .type(TEST_ALARM)
.propagate(false)
.severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK)
.startTs(ts).build(); .startTs(ts).build();
@ -114,6 +115,28 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert.assertEquals(1, alarms.getData().size()); Assert.assertEquals(1, alarms.getData().size());
Assert.assertEquals(created, alarms.getData().get(0)); Assert.assertEquals(created, alarms.getData().get(0));
// Check parent relation
alarms = alarmService.findAlarms(AlarmQuery.builder()
.affectedEntityId(parentId)
.status(AlarmStatus.ACTIVE_UNACK).pageLink(
new TimePageLink(1, 0L, System.currentTimeMillis(), false)
).build()).get();
Assert.assertNotNull(alarms.getData());
Assert.assertEquals(0, alarms.getData().size());
created.setPropagate(true);
created = alarmService.createOrUpdateAlarm(created);
// Check child relation
alarms = alarmService.findAlarms(AlarmQuery.builder()
.affectedEntityId(childId)
.status(AlarmStatus.ACTIVE_UNACK).pageLink(
new TimePageLink(1, 0L, System.currentTimeMillis(), false)
).build()).get();
Assert.assertNotNull(alarms.getData());
Assert.assertEquals(1, alarms.getData().size());
Assert.assertEquals(created, alarms.getData().get(0));
// Check parent relation // Check parent relation
alarms = alarmService.findAlarms(AlarmQuery.builder() alarms = alarmService.findAlarms(AlarmQuery.builder()
.affectedEntityId(parentId) .affectedEntityId(parentId)

View File

@ -27,7 +27,8 @@
}, },
"alarmPropagateFlag": { "alarmPropagateFlag": {
"title": "Propagate Alarm", "title": "Propagate Alarm",
"type": "boolean" "type": "boolean",
"default": true
}, },
"alarmDetailsTemplate": { "alarmDetailsTemplate": {
"title": "Alarm details", "title": "Alarm details",