+ return a.ProcessRaiseAlarm(m, alarmDef)
+ }
+
+ a.mutex.Unlock()
+ return nil, nil
+}
+
+func (a *AlarmManager) ProcessRaiseAlarm(m *AlarmNotification, alarmDef *alarm.AlarmDefinition) (*alert.PostAlertsOK, error) {
+ app.Logger.Debug("Raise alarmDef.RaiseDelay = %v, AlarmNotification = %v", alarmDef.RaiseDelay, *m)
+
+ // RaiseDelay > 0 in an alarm object in active alarm table indicates that raise delay is still ongoing for the alarm
+ m.AlarmDefinition.RaiseDelay = alarmDef.RaiseDelay
+ a.UpdateAlarmFields(a.GenerateAlarmId(), m)
+ a.UpdateActiveAlarmList(m)
+ a.mutex.Unlock()
+
+ if alarmDef.RaiseDelay > 0 {
+ timerDelay(alarmDef.RaiseDelay)
+ a.mutex.Lock()
+ // Alarm may have been deleted from active alarms table during delay or table index may have changed
+ idx, found := a.IsMatchFound(m.Alarm)
+ if found {
+ // Alarm is not showed in active alarms or alarm history via CLI before RaiseDelay has elapsed, i.e the value is 0
+ a.activeAlarms[idx].AlarmDefinition.RaiseDelay = 0
+ app.Logger.Debug("Raise after delay alarmDef.RaiseDelay = %v, AlarmNotification = %v", alarmDef.RaiseDelay, *m)
+ a.mutex.Unlock()
+ } else {
+ app.Logger.Debug("Alarm deleted during raise delay. AlarmNotification = %v", *m)
+ a.mutex.Unlock()
+ return nil, nil
+ }
+ }
+
+ m.AlarmDefinition.RaiseDelay = 0
+ a.UpdateAlarmHistoryList(m)
+ a.WriteAlarmInfoToPersistentVolume()
+
+ // Send alarm notification to NOMA, if enabled
+ if app.Config.GetBool("controls.noma.enabled") {
+ return a.PostAlarm(m)
+ }
+ return a.PostAlert(a.GenerateAlertLabels(m.AlarmId, m.Alarm, AlertStatusActive, m.AlarmTime))
+}
+
+func (a *AlarmManager) ProcessClearAlarm(m *AlarmNotification, alarmDef *alarm.AlarmDefinition, idx int) (*alert.PostAlertsOK, error) {
+ app.Logger.Debug("Clear alarmDef.ClearDelay = %v, AlarmNotification = %v", alarmDef.ClearDelay, *m)
+ if alarmDef.ClearDelay > 0 {