/// <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 } } ); } }
/// <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); }
/// <summary> /// Зарегистрировать событие от БД /// </summary> /// <param name="ev">Аргумент события</param> /// <returns>Результат регистрации (см. пред. обработчик для 'TecViewAlarm.AlarmTecViewEventArgs')</returns> public INDEX_ACTION Registred(AdminAlarm.AlarmDbEventArgs ev, MODE mode) { INDEX_ACTION iRes = INDEX_ACTION.NOTHING; ALARM_OBJECT alarmObj = find(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()); lock (this) { try { if (alarmObj == null) {//Только, если объект события сигнализации НЕ создан // создать объект события сигнализации alarmObj = new ALARM_OBJECT(ev); _dictAlarmObject.Add(new KeyValuePair <int, DateTime>(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()), alarmObj); alarmObj.Fixed(ev.m_dtFixed); alarmObj.Confirmed(ev.m_dtConfirm); if (mode == MODE.ADMIN) { if (alarmObj.IsNotify() == true) { alarmObj.Fixing(); iRes = INDEX_ACTION.NEW; } else { ; } } else { ; } } else { alarmObj.Fixed(ev.m_dtFixed); alarmObj.Confirmed(ev.m_dtConfirm); if (mode == MODE.SERVICE) { //if (alarmObj.CONFIRMED == true) // if (TECComponent.Mode(ev.m_id_comp) == FormChangeMode.MODE_TECCOMPONENT.TG) // iRes = INDEX_ACTION.CONFIRMED_TG; // else // ; //else if (alarmObj.IsAutoConfirming() == true) { // если объект не подтвержден длительное время iRes = INDEX_ACTION.AUTO_CONFIRMING; } else if ((alarmObj.IsAutoFixing(ALARM_OBJECT.INDEX_DATETIME_REGISTRED.LAST) == true) || ((TECComponent.Mode(ev.m_id_comp) == FormChangeMode.MODE_TECCOMPONENT.TG) && (alarmObj.IsAutoFixing(ALARM_OBJECT.INDEX_DATETIME_REGISTRED.FIRST) == true))) { // если объект не зафиксирован длительное время iRes = INDEX_ACTION.AUTO_FIXING; } else { ; } } else if (mode == MODE.ADMIN) { if (alarmObj.IsNotify() == true) { alarmObj.Fixing(); iRes = INDEX_ACTION.RETRY; } else { ; } } else { ; // при 'VIEW' ничего не делать } } } catch (Exception e) { Logging.Logg().Exception(e, @"DictAlarmObject::Registred (" + ev.GetType().Name + @") - ...", Logging.INDEX_MESSAGE.NOT_SET); } } return(iRes); }
/// <summary> /// Зарегистрировать событие от БД /// </summary> /// <param name="ev">Аргумент события</param> /// <returns>Результат регистрации (см. пред. обработчик для 'TecViewAlarm.AlarmTecViewEventArgs')</returns> public INDEX_ACTION Registred(AdminAlarm.AlarmDbEventArgs ev) { INDEX_ACTION iRes = INDEX_ACTION.NOTHING; ALARM_OBJECT alarmObj = find(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()); lock (this) { try { if (alarmObj == null) {//Только, если объект события сигнализации НЕ создан // создать объект события сигнализации alarmObj = new ALARM_OBJECT(ev); _dictAlarmObject.Add(new KeyValuePair <int, DateTime>(ev.m_id_comp, ev.m_dtRegistred.GetValueOrDefault()), alarmObj); alarmObj.Fixed(ev.m_dtFixed); alarmObj.Confirmed(ev.m_dtConfirm); if (alarmObj.IsNotify() == true) { iRes = INDEX_ACTION.NEW; } else { ; } } else { alarmObj.Fixed(ev.m_dtFixed); alarmObj.Confirmed(ev.m_dtConfirm); if ((alarmObj.CONFIRMED == false) && ((alarmObj.FIXED == true) && ((DateTime.UtcNow - ev.m_dtFixed.GetValueOrDefault()).TotalMilliseconds > AdminAlarm.MSEC_ALARM_EVENTRETRY)) ) { // если объект не подтвержден длительное время iRes = INDEX_ACTION.AUTO_CONFIRMING; } else if ((alarmObj.FIXED == false) && ((DateTime.UtcNow - ev.m_dtRegistred.GetValueOrDefault()).TotalMilliseconds > AdminAlarm.MSEC_ALARM_EVENTRETRY) ) { // если объект не зафиксирован длительное время iRes = INDEX_ACTION.AUTO_FIXING; } else if (alarmObj.IsNotify() == true) { iRes = INDEX_ACTION.RETRY; } else { ; } } } catch (Exception e) { Logging.Logg().Exception(e, Logging.INDEX_MESSAGE.NOT_SET, @"DictAlarmObject::Registred (" + ev.GetType().Name + @") - ..."); } } return(iRes); }