virtual protected void _checkTempStorage() { List <T> tempstorage = TempStorageHelper.Instance().RestoreAllAndClear <T>(); foreach (T alarm in tempstorage) { try { TempStorageHelper.Instance().Store <T>(Convert.ToInt64(alarm.TKSn), alarm); SqlHelper.ExecuteNonQuery(Connstr, CommandType.Text, alarm.GetSql()); TempStorageHelper.Instance().Clear <T>(Convert.ToInt64(alarm.TKSn)); } catch (Exception ex) { SendLog(ex.ToString()); } } }
/// <summary> /// 更新界面状态 /// </summary> /// <param name="sourceomc"></param> /// <param name="obj"></param> /// <param name="name"></param> /// <param name="detail"></param> /// <param name="occurtime"></param> /// <returns></returns> public bool RaiseNMAlarm(string sourceomc, string obj, string name, string detail, DateTime occurtime) { TKAlarm tkalarm = null; try { lock (m_NMAlarms) { if (!m_NMAlarms.ContainsKey(sourceomc)) { return(false); } if (!m_NMAlarms[sourceomc].ContainsKey(obj)) { return(false); } if (!m_NMAlarms[sourceomc][obj].ContainsKey(name)) { return(false); } NMAlarm a = m_NMAlarms[sourceomc][obj][name]; if (a.TKSn != "" && a.ClearTime == "") { a.LastOccurTime = occurtime.ToString(); return(false); // 告警已经发生过,尚未恢复 } a.SourceOMC = sourceomc; a.Object = obj; a.AlarmName = name; a.OccurTime = occurtime.ToString(); a.LastOccurTime = occurtime.ToString(); a.ClearTime = ""; a.Detail = detail; a.TKSn = ""; a.ActiveTable = UniteTKActiveTable; a.ResumeTable = UniteTKResumeTable; tkalarm = ConvertNMToTKAlarm(a); try { TempStorageHelper.Instance().Store <NMAlarm>(Convert.ToInt64(a.TKSn), a); SqlHelper.ExecuteNonQuery(Connstr, CommandType.Text, a.GetSql()); TempStorageHelper.Instance().Clear <NMAlarm>(Convert.ToInt64(a.TKSn)); } catch (Exception ex) { // 存储网管告警出异常不再发出告警 // 不继续抛出告警, 允许继续往服务器发送告警 SendLog(ex.ToString()); } } try { if (tkalarm != null) { SendAlarm(tkalarm); } } catch (Exception ex) { // 向服务器发送告警失败,只记录日志,不影响程序运行 SendLog(ex.ToString()); return(false); } } catch (Exception ex) { SendLog(ex.ToString()); return(false); } return(true); }
virtual public void Start() { lock (this) { if (Interlocked.Read(ref m_Run) == 1) { return; } if (Interlocked.Exchange(ref m_PendingRun, 1) == 1) { return; } try { /// 允许派生类在启动开始阶段插入动作 //_PreStartStage(); ReadConfig(); TempStorageHelper.Instance().Init(); if (m_CommClient == null) { Interlocked.Exchange(ref m_PendingRun, 0); return; } if (!m_CommClient.Start()) { Interlocked.Exchange(ref m_PendingRun, 0); throw new Exception("连接告警服务器失败, 适配器无法启动."); } m_CommClient.onConnectionBroken += new ClientConnectionBrokenHandler(DBAdapterBase_onConnectionBroken); SendLog("正在启动" + Name + "告警适配器(采集周期:" + Interval + "[毫秒])..."); if (!AdapterLogin()) { Interlocked.Exchange(ref m_PendingRun, 0); throw new Exception("向告警服务器注册失败, 适配器无法启动."); } AdapterStateReport(AdapterStatus.Running, null); m_TimerMaintenance.Start(); /// 允许派生类在启动加载告警前插入动作 //_DeclareCustomAlarm(); /// 检查临时存储尚未入库的数据 _checkTempStorage(); ClearAllNMAlarms(); LoadNMAlarms(); ClearAllNMAlarms(); /// 允许派生类在启动最后插入动作 //_PostStartStage(); Interlocked.Exchange(ref m_Run, 1); SendLog("启动成功:" + Name + "告警适配器(采集周期:" + Interval + "[毫秒])..."); } catch (Exception ex) { Interlocked.Exchange(ref m_PendingRun, 0); Interlocked.Exchange(ref m_Run, 0); throw ex; } } }