Esempio n. 1
0
        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());
                }
            }
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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;
                }
            }
        }