CollStorageWithSNMP.java 7.27 KB
package com.sitech.ismp.coll.storage;

import com.sitech.ismp.coll.CollBase;
import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
import com.sitech.util.DES3;
import com.sitech.util.Formater;
import com.sitech.util.LogUtil;
import com.sitech.util.SNMPClient;
import org.apache.log4j.Logger;
import org.apache.velocity.util.StringUtils;
import org.snmp4j.mp.SnmpConstants;

import java.util.HashMap;
import java.util.Vector;

/**
 * Created by IntelliJ IDEA.
 * User: liush_bj
 * Date: 2014-10-16
 */
public class CollStorageWithSNMP extends CollBase{

    private String kbpClass;
    private String ipAddr;
    private String deviceName;
    private int snmpVersion;
    private int snmpPort;
    private String snmpCommunity;
    private SNMPClient client;
    private String sysObjectID;
    private boolean isConn = false;
    private boolean isSupportSnmp = false;

    public Vector<TblATO_KPIDETAIL> getTotal(HashMap<String, String> params)
            throws Exception {
        init(params);

        String unitId = kbpClass + "-10" + ":" + deviceName + "-total";

        String status = "UP";
        try {
            connect();

            // CM-01-04-001-01 设备名称
            super.addKPI(unitId, "CM-01-04-001-01", params.get("HOST_NAME"));
            // CM-01-04-001-02 IP地址
            super.addKPI(unitId, "CM-01-04-001-02", ipAddr);
            // CM-01-04-001-03 设备软件版本
            super.addKPI(unitId, "CM-01-04-001-03", getSoftVersion());
            //cluster索引
            super.addKPI(unitId,"CM-01-04-001-04", client.get(".1.3.6.1.4.1.7564.18.1.3.1.1.0"));
            //clusterID
            super.addKPI(unitId,"CM-01-04-001-05", client.get(".1.3.6.1.4.1.7564.18.1.3.1.2.0"));
            //cluster状态
            super.addKPI(unitId,"FM-01-04-001-02", client.get(".1.3.6.1.4.1.7564.18.1.3.1.3.0"));

        } catch (Exception e) {
            status = e.getMessage();
            LogUtil.error("Exception while getTotal", e);
        } finally {
            // FM-01-04-001-01 设备状态
            super.addKPI(unitId, "FM-01-04-001-01", status);
            destroy();
        }

        return super.KPISet;
    }


    public Vector<TblATO_KPIDETAIL> getHPXPInfo(HashMap<String, String> params) throws Exception {
        init(params);

        try {
            connect();
            String arrayUnitId = kbpClass + "-11" + ":" + deviceName;
            super.addKPI(arrayUnitId,"PM-00-07-001-01", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.2"));
            super.addKPI(arrayUnitId,"PM-00-07-001-02", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.3"));
            super.addKPI(arrayUnitId,"PM-00-07-001-03", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.4"));
            super.addKPI(arrayUnitId,"PM-00-07-001-04", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.5"));
            super.addKPI(arrayUnitId,"PM-00-07-001-05", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.6"));
            super.addKPI(arrayUnitId,"PM-00-07-001-06", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.7"));
            super.addKPI(arrayUnitId,"PM-00-07-001-07", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.8"));
            super.addKPI(arrayUnitId,"PM-00-07-001-08", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.6.1.9"));
            super.addKPI(arrayUnitId,"PM-00-07-001-09", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.7.1.2"));
            super.addKPI(arrayUnitId,"PM-00-07-001-10", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.7.1.3"));
            super.addKPI(arrayUnitId,"PM-00-07-001-11", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.7.1.4"));
            super.addKPI(arrayUnitId,"PM-00-07-001-12", client.get(".1.3.6.1.4.1.116.5.11.4.1.1.7.1.5"));

            return super.getKPISet();
        } catch (Exception e) {
            LogUtil.error("Exception while getArraySPX", e);
        } finally {
            destroy();
        }

        return null;
    }
    public Vector<TblATO_KPIDETAIL> getHPEVAInfo(HashMap<String, String> params) throws Exception {
        init(params);

        try {
            connect();
            String arrayUnitId = kbpClass + "-11" + ":" + deviceName;
            super.addKPI(arrayUnitId,"PM-01-04-001-01", client.get("1.3.6.1.4.1.21658"));

            return super.getKPISet();
        } catch (Exception e) {
            LogUtil.error("Exception while getArraySPX", e);
        } finally {
            destroy();
        }

        return null;
    }


    private void init(HashMap<String, String> params) throws Exception {
        kbpClass = params.get("KBP_CLASS");
        ipAddr = params.get("IP");

        deviceName = Formater.neatenunitid(params.get("HOST_NAME"));

        try {
            snmpCommunity = DES3.decrypt(params.get("COMMUNITY"));
        }catch (Exception e) {
            throw new Exception("Wrong SNMP COMMUNITY");
        }

        try {
            snmpPort = Integer.parseInt(params.get("PORT"));
        } catch (Exception e) {
            throw new Exception("Wrong SNMP PORT:" + params.get("PORT"));
        }

        String versionStr = params.get("VERSION");

        if (versionStr != null && versionStr.toLowerCase().trim().equals("v1")) {
            snmpVersion = SnmpConstants.version1;
        } else if (versionStr != null
                && versionStr.toLowerCase().trim().equals("v2c")) {
            snmpVersion = SnmpConstants.version2c;
        } else if (versionStr != null
                && versionStr.toLowerCase().trim().equals("v3")) {
            throw new Exception("nonsupport snmp version: v3");
        } else {
            // 默认按照v2c版本采集
            snmpVersion = SnmpConstants.version2c;
        }
    }

    private void connect() throws Exception {
        client = new SNMPClient(ipAddr, snmpPort, snmpCommunity, snmpVersion);

        isSupportSnmp = client.isOpenSNMP();

        isConn = client.connect();

        if (!isConn || !isSupportSnmp) {
            throw new Exception(
                    "Device not support SNMP or Collect params is wrong or Network is error: "
                            + ipAddr + ":" + snmpPort);
        }


        sysObjectID = client.get("1.3.6.1.2.1.1.2.0");

        logger.info("-- sysObjectID: " + sysObjectID);
    }

    public void destroy() {
        if(client != null){
            client.close();
        }
    }

    /**
     * 设备软件版本
     */
    private String getSoftVersion() {
        String oid = "1.3.6.1.2.1.1.1.0";
        String version = null;
        try {
            version = client.get(oid).replace("\n", " ").replace("\r", "");
        } catch (Exception e) {
            LogUtil.error("Exception while getSoftVersion", e);
        }
        return version;
    }

    public static void main(String[] args) {
        System.out.println("***************Load Balance Collect Test Begin*********************");
        //拆分系统温度和cpu温度 sys:73,cpu1:46,cpu2:0
        String[] tempList = StringUtils.split("sys:73,cpu1:46,cpu2:0",",");
        for(String temp : tempList){
            String[] tempList1 = StringUtils.split(temp,":");
            if(tempList1.length>0){
                if(tempList1[0].contains("sys")){
                    System.out.println(tempList1[0]+"sys-----"+tempList1[1]);
                }else if(tempList1[0].contains("cpu")){
                    System.out.println(tempList1[0]+"cpu-----"+tempList1[1]);
                }
            }
        }

    }

}