Skip to content

Commit

Permalink
#2550 The maximum alarm resets when it reaches 'return to normal' -
Browse files Browse the repository at this point in the history
Resetting the alarm for multiple requests at once
  • Loading branch information
Limraj committed Jul 17, 2023
1 parent 4f2f686 commit d12215b
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 23 deletions.
10 changes: 10 additions & 0 deletions src/org/scada_lts/dao/model/UserAlarmLevel.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
package org.scada_lts.dao.model;

import com.serotonin.mango.rt.event.AlarmLevels;
import com.serotonin.mango.rt.event.EventInstance;
import com.serotonin.mango.vo.User;
import org.scada_lts.web.ws.model.AlarmLevelMessage;

/**
* Model for buffering UnsilencedAlarmLevel
Expand All @@ -43,6 +45,14 @@ public static UserAlarmLevel onlyUser(User user) {
return new UserAlarmLevel(user, AlarmLevels.NONE);
}

public static UserAlarmLevel fromEvent(User user, EventInstance eventInstance) {
return new UserAlarmLevel(user, eventInstance.getAlarmLevel());
}

public AlarmLevelMessage toAlarmLevelMessage() {
return new AlarmLevelMessage(alarmLevel);
}

public int getUserId() {
return userId;
}
Expand Down
44 changes: 21 additions & 23 deletions src/org/scada_lts/service/HighestAlarmLevelServiceWithCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,19 +68,18 @@ public int getAlarmLevel(User user) {

@Override
public boolean doUpdateAlarmLevel(User user, EventInstance event, BiConsumer<User, AlarmLevelMessage> send) {
if(event.getAlarmLevel() > highestAlarmLevelCache.getAlarmLevel(user).getAlarmLevel()) {
this.lock.writeLock().lock();
try {
if(event.getAlarmLevel() > highestAlarmLevelCache.getAlarmLevel(user).getAlarmLevel()) {
highestAlarmLevelCache.putAlarmLevel(user, new UserAlarmLevel(user, event.getAlarmLevel()));
send.accept(user, new AlarmLevelMessage(event.getAlarmLevel()));
return true;
}
} finally {
this.lock.writeLock().unlock();
this.lock.writeLock().lock();
try {
UserAlarmLevel userAlarmLevel = highestAlarmLevelCache.getAlarmLevel(user);
if(event.getAlarmLevel() > userAlarmLevel.getAlarmLevel()) {
highestAlarmLevelCache.putAlarmLevel(user, UserAlarmLevel.fromEvent(user, event));
send.accept(user, AlarmLevelMessage.alarmLevelFromEvent(event));
return true;
}
return false;
} finally {
this.lock.writeLock().unlock();
}
return false;
}

@Override
Expand All @@ -90,19 +89,18 @@ public boolean doSendAlarmLevel(User user, BiConsumer<User, AlarmLevelMessage> s

@Override
public boolean doRemoveAlarmLevel(User user, EventInstance event, BiConsumer<User, AlarmLevelMessage> send) {
if(event.getAlarmLevel() == highestAlarmLevelCache.getAlarmLevel(user).getAlarmLevel()) {
this.lock.writeLock().lock();
try {
if (event.getAlarmLevel() == highestAlarmLevelCache.getAlarmLevel(user).getAlarmLevel()) {
highestAlarmLevelCache.removeAlarmLevel(user);
send.accept(user, new AlarmLevelMessage(highestAlarmLevelCache.getAlarmLevel(user).getAlarmLevel()));
return true;
}
} finally {
this.lock.writeLock().unlock();
this.lock.writeLock().lock();
try {
UserAlarmLevel userAlarmLevel = highestAlarmLevelCache.getAlarmLevel(user);
if (event.getAlarmLevel() == userAlarmLevel.getAlarmLevel()) {
highestAlarmLevelCache.removeAlarmLevel(user);
send.accept(user, highestAlarmLevelCache.getAlarmLevel(user).toAlarmLevelMessage());
return true;
}
return false;
} finally {
this.lock.writeLock().unlock();
}
return false;
}

@Override
Expand All @@ -122,7 +120,7 @@ private boolean doSend(User user, BiConsumer<User, AlarmLevelMessage> send) {
try {
UserAlarmLevel alarmLevel = highestAlarmLevelCache.getAlarmLevel(user);
if(alarmLevel.getAlarmLevel() >= AlarmLevels.NONE) {
send.accept(user, new AlarmLevelMessage(alarmLevel.getAlarmLevel()));
send.accept(user, alarmLevel.toAlarmLevelMessage());
return true;
}
return false;
Expand Down
11 changes: 11 additions & 0 deletions src/org/scada_lts/web/ws/model/AlarmLevelMessage.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.scada_lts.web.ws.model;

import com.serotonin.mango.rt.event.AlarmLevels;
import com.serotonin.mango.rt.event.EventInstance;

public class AlarmLevelMessage {
private final int alarmLevel;

Expand All @@ -13,6 +16,14 @@ public static AlarmLevelMessage empty() {
return EMPTY;
}

public static AlarmLevelMessage noneAlarmLevel() {
return new AlarmLevelMessage(AlarmLevels.NONE);
}

public static AlarmLevelMessage alarmLevelFromEvent(EventInstance eventInstance) {
return new AlarmLevelMessage(eventInstance.getAlarmLevel());
}

public int getAlarmlevel() {
return alarmLevel;
}
Expand Down

0 comments on commit d12215b

Please sign in to comment.