/** * Fires an alarm iff all relevant conditions are fulfilled. * * @param alarm The alarm * @param alarmControl The alarm control */ public void fireAlarm(Alarm alarm, AlarmControl alarmControl) { if (alarmControl.getEnabled()) { try { if (alarm instanceof TTOperStatusAlarm) { TTOperStatusAlarm operStatusAlarm = (TTOperStatusAlarm) alarm; TTOperationalStatusAlarmControl operStatusAlarmControl = (TTOperationalStatusAlarmControl) alarmControl; if ((operStatusAlarmControl.getTriggerFromState() == OperationalStatus.ANY) || (operStatusAlarmControl.getTriggerToState() == OperationalStatus.ANY) || (operStatusAlarm.getFromState() == operStatusAlarmControl.getTriggerFromState()) || (operStatusAlarm.getToState() == operStatusAlarmControl.getTriggerToState())) { if (!alarmIsSuppressed(operStatusAlarmControl)) { fireAlarm_(operStatusAlarm, operStatusAlarmControl); } else { operStatusAlarm.suppress(); log.debug(operStatusAlarm.getName() + " suppressed"); } } } else if (alarmControl instanceof EdgeTriggeredAlarmControl) { EdgeTriggeredAlarmControl edgeTriggeredAlarmControl = (EdgeTriggeredAlarmControl) alarmControl; if (edgeTriggeredAlarmControl.getStatus() == EdgeTriggeredAlarmStatus.ARMED) { if (!alarmIsSuppressed(edgeTriggeredAlarmControl)) { fireAlarm_(alarm, edgeTriggeredAlarmControl); } else { alarm.suppress(); log.debug(alarm.getName() + " suppressed"); } } } else { if (!alarmIsSuppressed(alarmControl)) { fireAlarm_(alarm, alarmControl); } else { alarm.suppress(); log.debug(alarm.getName() + " suppressed"); } } } catch (ClassCastException cce) { log.error("Alarm and AlarmControl don't match."); } } }
/** * Checks whether an alarm is suppressed using its <code>AlarmControl</code> object. * * @param alarmControl The alarm control * @return <code>true</code> if it is suppressed, <code>false</code> otherwise */ private boolean alarmIsSuppressed(AlarmControl alarmControl) { Long lastFiredTime = lastFiredTimes.get(alarmControl); return !((lastFiredTime == null) || (System.currentTimeMillis() - lastFiredTime > alarmControl.getSuppressInterval() * 1000)); }