/** * Checks whether an edge-triggered alarm can be fired (does not care about the suppress interval * - use the <code>isSuppressed</code> method). * * @param value The current value of the corresponding managed object field * @param alarmControl The alarm control * @return <code>true</code> if it can be fired, <code>false</code> otherwise */ private boolean isEdgeTriggeredAlarmReadyForFire( long value, EdgeTriggeredAlarmControl alarmControl) { if (alarmControl.getEnabled()) { boolean fallingEdge = alarmControl.getDirection() == EdgeTriggeredAlarmDirection.FALLING; if (alarmControl.getStatus() == EdgeTriggeredAlarmStatus.FIRED) { if (fallingEdge) { if (value > alarmControl.getRearmThreshold()) alarmControl.setStatus(EdgeTriggeredAlarmStatus.ARMED); } else { if (value < alarmControl.getRearmThreshold()) alarmControl.setStatus(EdgeTriggeredAlarmStatus.ARMED); } } if (alarmControl.getStatus() == EdgeTriggeredAlarmStatus.ARMED) { if (fallingEdge) { if (value < alarmControl.getAlarmThreshold()) { return true; } } else { if (value > alarmControl.getAlarmThreshold()) { return true; } } } } return false; }
/** * Fires an alarm. * * @param alarm The alarm * @param alarmControl The alarm control */ private void fireAlarm_(Alarm alarm, AlarmControl alarmControl) { alarmProcessor.process(alarm); lastFiredTimes.remove(alarmControl); lastFiredTimes.put(alarmControl, System.currentTimeMillis()); if (alarmControl instanceof EdgeTriggeredAlarmControl) { ((EdgeTriggeredAlarmControl) alarmControl).setStatus(EdgeTriggeredAlarmStatus.FIRED); } log.debug(alarm.getName() + " fired"); }