NeatenPDU.java 9.15 KB
package com.sitech.ismp.coll.i2000.alarm;

import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;

import org.apache.log4j.Logger;
import org.snmp4j.PDU;
import org.snmp4j.asn1.BER;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.Variable;
import org.snmp4j.smi.VariableBinding;

import com.sitech.ismp.app.event.KPI2Event;
import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
import com.sitech.jmx.manage.ReportManage;
import com.sitech.util.Formater;

public class NeatenPDU {
    static Logger logger = Logger.getLogger("I2000");
    Logger i2000raw = Logger.getLogger("I2000RAW");
    static String UNITID = "01-17";

    public void neatenPdu(PDU cmd) {
        // oid 1.3.6.1.2.1.1.3.0 标志开始
        Vector vectorOfvbs = new Vector();
        HashMap vbs = new HashMap();

        for (int i = 0; i < cmd.size(); i++) {
            VariableBinding vb = cmd.get(i);
            Variable variable = vb.getVariable();
            OID oid = vb.getOid();
            if (i > 0 && vbs.size() > 0 && oid.toString().equals("1.3.6.1.2.1.1.3.0")) {
                vectorOfvbs.add(vbs);
                i2000raw.info("add new vbs i=" + i);
                vbs = new HashMap();
            }

            String oidDescribe = OIDDescribe.getAlarmOIDDescribe(oid);

            String value = "";
            if (variable.getSyntax() == BER.OCTETSTRING) {
                value = new String(((OctetString) variable).getValue());
                // String value1 = new String(((OctetString) variable).getValue(), "gbk");
                // String value2 = new String(((OctetString) variable).getValue(), "gb2312");
                // String value3 = new String(((OctetString) variable).getValue(), "iso8859-1");
                // String value4 = new String(variable.toString().getBytes("iso8859-1"), "gbk");
                // String value5 = new String(variable.toString().getBytes("gbk"), "iso8859-1");
            } else {
                value = variable.toString();
            }
            i2000raw.info(oid.toString() + "=" + value);
            vbs.put(oidDescribe, value);
        }
        vectorOfvbs.add(vbs);

        for (int j = 0; j < vectorOfvbs.size(); j++) {
            vbs = (HashMap) vectorOfvbs.get(j);
            String oid = (String) vbs.get("1.3.6.1.6.3.1.1.4.1.0");
            if (oid.equals("1.3.6.1.4.1.2011.2.15.2.4.3.3.0.1")) {
                handleAlarm(vbs);
                i2000raw.info("alarm has coming");
            } else if (oid.equals("1.3.6.1.4.1.2011.2.15.2.1.2.1.1.1.0.5")) {
                // handleHeartbeat(vbs);
                i2000raw.info("heartbeat has coming");
                HeartbeatState.time = new Date();
                i2000raw.info("Heartbeat has coming");
            } else {
                other(vbs);
                i2000raw.info("find no alarmId in config ");
                // TODO 测试代码
                System.out.println("=======================");
            }
        }
    }

    public String getKpiID(String alarmID) {
        if (FM001701101.validation(alarmID)) {
            return "FM-00-17-011-01";
        } else if (FM001701102.validation(alarmID)) {
            return "FM-00-17-011-02";
        } else if (FM001701103.validation(alarmID)) {
            return "FM-00-17-011-03";
        } else if (FM001701104.validation(alarmID)) {
            return "FM-00-17-011-04";
        } else if (FM001701105.validation(alarmID)) {
            return "FM-00-17-011-05";
        } else if (FM021701101.validation(alarmID)) {
            return "FM-02-17-011-01";
        } else if (FM021701201.validation(alarmID)) {
            return "FM-02-17-012-01";
        } else {
            return "FM-02-17-012-02";
        }

    }

    public void handleAlarm(HashMap vbs) {
        String alarmID = (String) vbs.get("alarmID");

        String alarmNEDevID = (String) vbs.get("alarmNEDevID");
        String kpiID = getKpiID(alarmID);
        i2000raw.info("alarmID=" + alarmID + ",alarmNeDevId=" + alarmNEDevID + ",kpi=" + kpiID);
        Date cllTime = new Date();
        // // TODO 之下 测试
        // if (kpiID == null) {
        // kpiID = "test kpiid";
        // }
        // // TODO 之上测试
        if (kpiID != null) {
            String value = "";
            String alarmCategory = ((String) vbs.get("alarmCategory")).trim();
            String alarmType = ((String) vbs.get("alarmType")).trim();
            if (alarmCategory.equals("1") && (alarmType.equals("1") || alarmType.equals("2"))) {
                value = "DOWN";
            } else if (alarmCategory.equals("2") && (alarmType.equals("1") || alarmType.equals("2"))) {
                value = "UP";
            } else {
                // System.out.println(alarmCategory);
                value = null;
                i2000raw.info("can't generate Alarm ............" + "kpi=" + kpiID);
            }
            if (value != null) {
                Vector kpiset = new Vector();

                TblATO_KPIDETAIL tblATO = new TblATO_KPIDETAIL();
                String unitID = UNITID + "-i2000:" + alarmNEDevID + "-" + alarmID;
                tblATO.UNIT_ID = unitID;
                tblATO.KPI_ID = kpiID;
                tblATO.CLL_TIME = cllTime;
                tblATO.KPI_VALUE = value;
                try {
                    tblATO.CLL_TIME_STR = Formater.datetimeToString(cllTime);
                } catch (Exception e1) {
                    logger.error("NatenPUD", e1);
                }
                kpiset.addElement(tblATO);
                logger.info("ATO|" + tblATO.UNIT_ID + "|" + tblATO.KPI_ID + "|" + tblATO.CLL_TIME + "|" + tblATO.KPI_VALUE + "|");
                // 对该性能数据进行事件生成处理

                KPI2Event kpi2event = new KPI2Event();
                new KPI2Event().generation(tblATO.UNIT_ID, tblATO.KPI_ID, new Date(), tblATO.KPI_VALUE);
                i2000raw.info("generate Alarm ............" + "kpi=" + kpiID);
                // --------------------------------//
                // 告警详细信息入历史库!! //
                // --------------------------------//

                Set keySet = vbs.keySet();
                for (Iterator iter = keySet.iterator(); iter.hasNext();) {
                    String key = (String) iter.next();
                    TblATO_KPIDETAIL tbAtoKpiDetail = new TblATO_KPIDETAIL();
                    tbAtoKpiDetail.UNIT_ID = UNITID + "-i2000:" + alarmNEDevID + "-" + alarmID + "-" + key;
                    tbAtoKpiDetail.KPI_ID = kpiID;
                    tbAtoKpiDetail.CLL_TIME = cllTime;
                    tbAtoKpiDetail.KPI_VALUE = (String) vbs.get(key);
                    try {
                        tbAtoKpiDetail.CLL_TIME_STR = Formater.datetimeToString(cllTime);
                    } catch (Exception e1) {
                        logger.error("NatenPUD", e1);
                    }
                    logger.info("ATO|" + tbAtoKpiDetail.UNIT_ID + "|" + tbAtoKpiDetail.KPI_ID + "|" + tbAtoKpiDetail.CLL_TIME + "|" + tbAtoKpiDetail.KPI_VALUE + "|");
                    kpiset.addElement(tbAtoKpiDetail);
                }
                ReportManage.reportKPI(kpiset);
            }
        }
    }

    public void other(HashMap vbs) {
        String kpiID = "PM-00-00-00-00";
        Vector kpiset = new Vector();
        Set keySet = vbs.keySet();
        for (Iterator iter = keySet.iterator(); iter.hasNext();) {
            String key = (String) iter.next();
            String unitID = UNITID + "-i2000test-" + key;
            String value = (String) vbs.get(key);
            TblATO_KPIDETAIL tblATO = new TblATO_KPIDETAIL();
            tblATO.UNIT_ID = unitID;
            tblATO.KPI_ID = kpiID;
            tblATO.CLL_TIME = new Date();
            tblATO.KPI_VALUE = value;
            try {
                tblATO.CLL_TIME_STR = Formater.datetimeToString(new Date());
            } catch (Exception e1) {
                logger.error("NatenPUD", e1);
            }
            i2000raw.info("ATO|" + tblATO.UNIT_ID + "|" + tblATO.KPI_ID + "|" + tblATO.CLL_TIME + "|" + tblATO.KPI_VALUE + "|");
            kpiset.addElement(tblATO);
        }
        ReportManage.reportKPI(kpiset);
    }

    public void handleHeartbeat(HashMap vbs) {
        String kpiID = "PM-00-00-00-01";
        Vector kpiset = new Vector();
        Set keySet = vbs.keySet();
        for (Iterator iter = keySet.iterator(); iter.hasNext();) {
            String key = (String) iter.next();
            String unitID = UNITID + "-i2000_heartbeat-" + key;
            String value = (String) vbs.get(key);
            TblATO_KPIDETAIL tblATO = new TblATO_KPIDETAIL();
            tblATO.UNIT_ID = unitID;
            tblATO.KPI_ID = kpiID;
            tblATO.CLL_TIME = new Date();
            tblATO.KPI_VALUE = value;
            try {
                tblATO.CLL_TIME_STR = Formater.datetimeToString(new Date());
            } catch (Exception e1) {
                logger.error("NatenPUD", e1);
            }
            i2000raw.info("ATO|" + tblATO.UNIT_ID + "|" + tblATO.KPI_ID + "|" + tblATO.CLL_TIME + "|" + tblATO.KPI_VALUE + "|");
            kpiset.addElement(tblATO);
        }
        ReportManage.reportKPI(kpiset);
    }
}