Inheritance: GSF.ServiceModel.SelfHostingService, IAlarmService
Example #1
0
        /// <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();
            }
        }
Example #2
0
        /// <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();
        }