/// <summary> /// Initializes the <see cref="AlarmAdapter"/>. /// </summary> public override void Initialize() { Dictionary<string, string> settings; string setting; double logProcessingDelay; // Run base class initialization base.Initialize(); settings = Settings; // Load optional parameters if (settings.TryGetValue("supportsTemporalProcessing", out setting)) m_supportsTemporalProcessing = setting.ParseBoolean(); else m_supportsTemporalProcessing = false; if (settings.TryGetValue("useAlarmLog", out setting)) m_useAlarmLog = setting.ParseBoolean(); else m_useAlarmLog = true; if (!settings.TryGetValue("bulkInsertLimit", out setting) || !int.TryParse(setting, out m_bulkInsertLimit)) m_bulkInsertLimit = 300; if (settings.TryGetValue("logProcessingDelay", out setting) && double.TryParse(setting, out logProcessingDelay)) m_logProcessingDelay = (int)(logProcessingDelay * 1000.0D); else m_logProcessingDelay = 1000; try { // Set up alarm service m_alarmService = new AlarmService(this); m_alarmService.SettingsCategory = base.Name.Replace("!", "").ToLower() + m_alarmService.SettingsCategory; m_alarmService.ServiceProcessException += AlarmService_ServiceProcessException; m_alarmService.PersistSettings = true; m_alarmService.Initialize(); } catch (Exception ex) { string message = string.Format("Unable to initialize alarm service due to exception: {0}", ex.Message); OnProcessException(new InvalidOperationException(message, ex)); } // Run the process measurements operation to ensure that the alarm configuration is up to date if (Interlocked.CompareExchange(ref m_dataSourceState, Modified, Modified) == Modified) { m_processMeasurementsOperation.AsynchronousExecutionMode = AsynchronousExecutionMode.Long; m_processMeasurementsOperation.RunOnceAsync(); } }
/// <summary> /// Initializes the <see cref="AlarmAdapter"/>. /// </summary> public override void Initialize() { Dictionary<string, string> settings; string setting; string filterExpression; // Run base class initialization base.Initialize(); settings = Settings; // Load optional parameters if (settings.TryGetValue("supportsTemporalProcessing", out setting)) m_supportsTemporalProcessing = setting.ParseBoolean(); else m_supportsTemporalProcessing = false; // Create alarms using definitions from the database m_alarms = DataSource.Tables["Alarms"].Rows.Cast<DataRow>() .Where(row => row.ConvertField<bool>("Enabled")) .Select(CreateAlarm) .ToList(); // Create lookup table for alarms to speed up measurement processing m_alarmLookup = new Dictionary<Guid, List<Alarm>>(); foreach (Guid signalID in m_alarms.Select(alarm => alarm.SignalID).Distinct()) m_alarmLookup.Add(signalID, m_alarms.Where(alarm => alarm.SignalID == signalID).ToList()); if (m_alarms.Count > 0) { // Generate filter expression for input measurements filterExpression = m_alarms.Select(a => a.SignalID) .Distinct() .Select(id => id.ToString()) .Aggregate((list, id) => list + ";" + id); // Set input measurement keys for measurement routing InputMeasurementKeys = ParseInputMeasurementKeys(DataSource, filterExpression); } // Set up alarm service m_alarmService = new AlarmService(this); m_alarmService.SettingsCategory = base.Name.Replace("!", "").ToLower() + m_alarmService.SettingsCategory; m_alarmService.ServiceProcessException += AlarmService_ServiceProcessException; m_alarmService.PersistSettings = true; m_alarmService.Initialize(); }