Beispiel #1
0
        /// <summary>
        /// Обработчик события - регистрация события сигнализации от 'TecView'
        /// </summary>
        /// <param name="obj">Объект, зарегистрировавший событие сигнализации</param>
        /// <param name="ev">Аргумент события сигнализации</param>
        private void onEventReg(TecViewAlarm.AlarmTecViewEventArgs ev)
        {
            INDEX_ACTION  iAction = m_dictAlarmObject.Registred(ref ev);
            StatesMachine state   = StatesMachine.Unknown;

            if (iAction == INDEX_ACTION.ERROR)
            {
                throw new Exception(@"AdminAlarm::OnEventReg_TecView () - ...");
            }
            else
            {
                switch (iAction)
                {
                case INDEX_ACTION.NEW:
                    state = StatesMachine.Insert;
                    break;

                case INDEX_ACTION.RETRY:
                    state = StatesMachine.Retry;
                    break;

                default:     // неизвестное/необрабатываемое днйствие
                    break;
                }

                push(new object[]
                {
                    new object []
                    {
                        state
                        , ev
                    }
                }
                     );
            }
        }
Beispiel #2
0
            public ALARM_OBJECT(TecViewAlarm.AlarmTecViewEventArgs ev) : this(INDEX_STATES_ALARM.REGISTRING)
            {
                Console.WriteLine(@"ALARM_OBJECT::ctor (id_comp=" + ev.m_id_comp + @", dtReg=" + ev.m_dtRegistred.GetValueOrDefault().ToString(@"dd.MM.yyyy HH:mm:ss.fffffff", CultureInfo.InvariantCulture) + @") - _state=" + _state.ToString() + @"...");

                init(ev.m_dtRegistred.GetValueOrDefault());
            }
Beispiel #3
0
        /// <summary>
        /// Зарегистрировать событие в режиме "выполнение_приложения"
        /// </summary>
        /// <param name="ev">Аргумент события</param>
        /// <returns>Результат регистрации (-1 - ошибка, 0 - ничего_не_делать, 1 - новый_объект, 2 - повторное_событие)</returns>
        public INDEX_ACTION Registred(ref TecViewAlarm.AlarmTecViewEventArgs ev)
        {
            INDEX_ACTION iRes     = INDEX_ACTION.NOTHING;
            ALARM_OBJECT alarmObj = null;
            List <KeyValuePair <int, DateTime> > listToRemoveKeys;

            lock (this)
            {
                try
                {
                    alarmObj =
                        //find(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault())
                        find(ev.m_id_comp)
                    ;

                    if (alarmObj == null)
                    {
                        //Только, если объект события сигнализации НЕ создан
                        //Сообщить для сохранения в БД
                        iRes = INDEX_ACTION.NEW;
                    }
                    else
                    //Только, если объект события сигнализации создан
                    //Проверить состояние
                    if (alarmObj.CONFIRMED == true)
                    {
                        // если подтверждено - проверить период между датой/временем регистрации события сигнализации и датой/временем его подтверждения
                        if (alarmObj.HISTORY == true)
                        {
                            //Сообщить для сохранения в БД для регистрации нового события сигнализаций для этого же компонента ТЭЦ
                            iRes = INDEX_ACTION.NEW;
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    if (alarmObj.RETRY == true)
                    {
                        ev.m_dtRegistred = alarmObj.Retry(ev.m_dtRegistred.GetValueOrDefault());
                        iRes             = INDEX_ACTION.RETRY;
                    }
                    else
                    {
                        ;
                    }

                    if (iRes == INDEX_ACTION.NEW)
                    {
                        //Перед добавлением объекта очистить словарь от "устаревших" объектов
                        //Подготовить список со сложными ключами для удалениями
                        listToRemoveKeys = new List <KeyValuePair <int, DateTime> >();
                        foreach (KeyValuePair <int, DateTime> cKey in _dictAlarmObject.Keys)
                        {
                            //Проверить признак "устаревания"
                            if ((cKey.Value - DateTime.UtcNow).TotalHours > DEPTH_HOUR_OBJECTALRM)
                            {
                                listToRemoveKeys.Add(cKey);
                            }
                            else
                            {
                                ;
                            }
                        }
                        //Удалить объекты со сложными ключами в списке
                        foreach (KeyValuePair <int, DateTime> cKey in listToRemoveKeys)
                        {
                            _dictAlarmObject.Remove(cKey);
                        }
                        // создать объект события сигнализации
                        _dictAlarmObject.Add(new KeyValuePair <int, DateTime>(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()), new ALARM_OBJECT(ev));
                    }
                    else
                    {
                        ;
                    }

                    Logging.Logg().Debug(@"DictAlarmObject::Register (id=" + ev.m_id_comp + @", dtReg=" + ev.m_dtRegistred.GetValueOrDefault().ToString() + @") - общее_кол-во_событий: " + _dictAlarmObject.Count
                                         , Logging.INDEX_MESSAGE.NOT_SET);
                }
                catch (Exception e)
                {
                    iRes = INDEX_ACTION.ERROR;
                    Logging.Logg().Exception(e, @"DictAlarmObject::Registred (" + ev.GetType().Name + @") - ...", Logging.INDEX_MESSAGE.NOT_SET);
                }
            }

            return(iRes);
        }
Beispiel #4
0
 public ALARM_OBJECT(TecViewAlarm.AlarmTecViewEventArgs ev) : this(INDEX_STATES_ALARM.REGISTRING)
 {
     init(ev.m_dtRegistred.GetValueOrDefault());
 }