基于SNMP在网络监控中的应用2_Cable Modem状态监控

     在HFC+Cable Modem(以下简称CM)的网络结构中,CM的工作状态影响用户的上网体验,我们可以通过实时扫描用户的CM设备,获得在线CM的多个重要技术指标,通过专家库进行对比,对处在临界点的CM通过智能终端系统进行预警,多点故障可通过数据的汇聚分类和回溯功能确定上级设备的故障,以此类推分析故障点,就把问题消灭在萌芽之中,为网络改造和数据维护提供强大的数据依据。

      以下参数是较为重要的几个参数,通过oid获得相应的参数值,获得方法参照上一边文章介绍的方法。

string receivedPowerOID = "1.3.6.1.2.1.10.127.1.3.3.1.6.";//上行接收电平  -> Opt5
string receivedNoiseOID = "1.3.6.1.2.1.10.127.1.1.4.1.5.";//上行接收信噪比-> Opt4
string CMTSDSPowerOID = "1.3.6.1.4.1.9.10.59.1.2.1.1.1.";  //下行接收电平  -> Opt1
string CMTSSNRatioOID = "1.3.6.1.4.1.9.10.59.1.2.1.1.4.";   //下行信噪比    -> Opt2
string CMTSUSSPowerOID = "1.3.6.1.4.1.9.10.59.1.2.1.1.2.";  //上行发射电平  -> Opt3

关键的实现方法可以参考如下

 public DataTable GetCMParametersFromCMTS(string mCmtsIp, string mMac, string mcmtsCommunity)   //从大C获得数据的测试例子
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("CmtsIp", typeof(string));
            dt.Columns.Add("CmMac", typeof(string));
            dt.Columns.Add("DSPower", typeof(string));
            dt.Columns.Add("USSPower", typeof(string));
            dt.Columns.Add("SNRatio", typeof(string));
            dt.Columns.Add("receivedPower", typeof(string));
            dt.Columns.Add("receivedNoise", typeof(string));
            dt.Columns.Add("CmStatus", typeof(string));
            string mac = MacHexToDecimal(mMac);
            Dictionary<string, string> cad = getOIDValue(mCmtsIp, cardOID + mac, mcmtsCommunity);
            if (cad.Count == 0)
                return null;
            foreach (KeyValuePair<string, string> pair in cad)
            {
                if (pair.Value == "SNMP No-Such-Instance")
                    return null;
            }
            card = cad[cardOID + mac];
            station = getOIDValue(mCmtsIp, stationOID + card, mcmtsCommunity)[stationOID + card];
            try
            {
                DataRow row = dt.NewRow();
                if (station.Equals("6"))   //确定CM的状态为在线
                {
                    string[] oids = { ipOID + card, interfaceOID + card, receivedPowerOID + card };
                    Dictionary<string, string> theGetData = getOIDValues(mCmtsIp, oids, mcmtsCommunity);
                    string ip = theGetData[ipOID + card];
                    Dictionary<string, string> theGetDataFromCM = getOIDValues(ip, new string[] { CMDSPowerOID, CMUSSPowerOID, CMSNRatioOID }, mcmtsCommunity);
                    DSPower = theGetDataFromCM[CMDSPowerOID];
                    USSPower = theGetDataFromCM[CMUSSPowerOID];
                    SNRatio = theGetDataFromCM[CMSNRatioOID];
                    interfaceNum = theGetData[interfaceOID + card];
                    receivedPower = theGetData[receivedPowerOID + card];
                    receivedNoise = getOIDValue(mCmtsIp, receivedNoiseOID + interfaceNum, mcmtsCommunity)[receivedNoiseOID + interfaceNum];
                    if (isNumberic(DSPower) && isNumberic(USSPower) && isNumberic(SNRatio) && isNumberic(receivedPower) && isNumberic(receivedNoise))
                    {
                        DSPower = Convert.ToString(Convert.ToDecimal(DSPower) / 10 + 60);             //下行接收电平  -> Opt1
                        USSPower = Convert.ToString(Convert.ToDecimal(USSPower) / 10 + 60);           //上行发射电平  -> Opt3
                        SNRatio = Convert.ToString(Convert.ToDecimal(SNRatio) / 10);                  //下行信噪比    -> Opt2
                        receivedPower = Convert.ToString(Convert.ToDecimal(receivedPower) / 10 + 60); //上行接收电平  -> Opt5
                        receivedNoise = Convert.ToString(Convert.ToDecimal(receivedNoise) / 10);      //上行接收信噪比-> Opt4
                    }

                    row["CmtsIp"] = mCmtsIp;
                    row["CmMac"] = mMac;
                    row["DSPower"] = DSPower;
                    row["USSPower"] = USSPower;
                    row["SNRatio"] = SNRatio;
                    row["receivedPower"] = receivedPower;
                    row["receivedNoise"] = receivedNoise;
                    row["CmStatus"] = CmStatus("6");
                    dt.Rows.Add(row);
                }
                else
                {
                    row["CmtsIp"] = mCmtsIp;
                    row["CmMac"] = mMac;
                    row["DSPower"] = "";
                    row["USSPower"] = "";
                    row["SNRatio"] = "";
                    row["receivedPower"] = "";
                    row["receivedNoise"] = "";
                    row["CmStatus"] = CmStatus(station);
                    dt.Rows.Add(row);
                }
                return dt;
            }
            catch
            {
                return null;
            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

消灭倭寇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值