CollHPWithSNMP.java 6.08 KB
package com.sitech.ismp.coll.centercoll;

import java.util.Date;
import java.util.Vector;

import com.adventnet.snmp.beans.SnmpTarget;
import com.adventnet.snmp.snmp2.SnmpOID;
import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
import com.sitech.util.DES3;

public class CollHPWithSNMP {

	String PRE_UNITID = "10-10-21"; // hp���ı�ʶ

	private SnmpTarget target = null;

	public CollHPWithSNMP(String ip) {
		this.HOST_IP = ip;
		target = new SnmpTarget();
		HOST_NAME = this.getHostName();
		NEAT_HOST_NAME = com.sitech.util.Formater.neatenunitid(HOST_NAME);
	}

	private String HOST_IP = "";

	/*
	 * private int PORT = 161; private String VERSION = "v1"; private String
	 * COMMUNITY = "public"; private int RETRIES = 3; private int TIMEOUT = 4;
	 * private String MIBS = "5";
	 */
	private boolean DEBUG = false;

	private String HOST_NAME = "";

	private String NEAT_HOST_NAME = "";

	public void init() {

		// String authProtocol = new String("NO_AUTH");
		// Use an SNMP target bean to perform SNMP operations
		target = new SnmpTarget();
		//target.setLoadFromCompiledMibs(true);
		target.setDebug(DEBUG);
		target.setSnmpVersion(SnmpTarget.VERSION1);

		target.setTargetHost(this.HOST_IP); // set the agent hostname
		// target.setCommunity( COMMUNITY);
		// target.setTargetPort( PORT );
		// target.setRetries( RETRIES );
		// target.setTimeout( TIMEOUT );
		if (target.getSnmpVersion() == SnmpTarget.VERSION3) {
			target.create_v3_tables();
		}
	}// end init

	public void release() {
		target.releaseResources();
	}// end release

	public String getPhiMemory() {

		String oid = ".1.3.6.1.4.1.11.2.3.1.1.8.0";
		String phiMemory = this.getKPIInfo(oid);
		return phiMemory;
	}

	public TblATO_KPIDETAIL getKPIPhiMemory() {

		String strPhiMemory = this.getPhiMemory();

		if (strPhiMemory == null) {
			return null;
		}
		int phiMeomryK = Integer.parseInt(strPhiMemory);
		int phiMeomryM = phiMeomryK / 1024;

		String config_PRE_UNITID = PRE_UNITID + "-10"; // totalֵ
		String UNIT_ID = config_PRE_UNITID + ":" + NEAT_HOST_NAME + "-total";
		return this.createKPI(UNIT_ID, "CM-00-01-001-07", String
				.valueOf(phiMeomryM));

	}

	private String getFreeMemory() {
		String oid = ".1.3.6.1.4.1.11.2.3.1.1.7.0";
		return this.getKPIInfo(oid);
	}

	public String getHostName() {
		String oid = ".1.3.6.1.2.1.1.5.0";
		return this.getKPIInfo(oid);
	}

	public TblATO_KPIDETAIL getKPIMemoryUseRate() {

		String totalMemory = this.getPhiMemory();
		String freeMemory = this.getFreeMemory();

		if (totalMemory == null || freeMemory == null) {
			return null;
		}

		int total = Integer.parseInt(totalMemory);
		int free = Integer.parseInt(freeMemory);
		int used = total - free;

		double usedRate = used * 100.0 / total;

		String strUsedRate = com.sitech.util.Formater
				.formatDecimalKpivalue(String.valueOf(usedRate));
		String memory_PRE_UNITID = PRE_UNITID + "-12";
		String UNIT_ID = memory_PRE_UNITID + ":" + NEAT_HOST_NAME + "-memory";
		return this.createKPI(UNIT_ID, "PM-00-01-002-01", strUsedRate);

	}

	public String getKPIInfo(String oid) {

		String oids[] = new String[1];
		init();
		oids[0] = "1.0";
		target.setObjectIDList(oids);
		target.oidList[0] = new com.adventnet.snmp.snmp2.SnmpOID(oid);
		String result[] = target.snmpGetList(); // do a get request
		release();
		if (result == null) {
			return null;
		} else {
			return result[0];
		}
	}// end getKPIInfo

	public boolean getSNMPState() {
		String value = getKPIInfo(".1.3.6.1.2.1.1.5.0");
		if (value == null) {
			return false;
		}
		return true;
	}// end getSNMPState

	public Vector walkKPIInfo(String oid) {
		// System.out.println("Begin snmpWalkList");
		Vector tmp_result = new Vector();
		Vector tmp_oid = new Vector();
		target.setObjectID(oid);
		target.oidList[0] = new com.adventnet.snmp.snmp2.SnmpOID(oid);// .1.3.6.1.4.1.11.2.3.1.2.2.1
		// Each
		// entry
		// contains
		// objects
		// for a
		// particular
		// file
		// system.(HP)

		int maxtry = 0;
		com.adventnet.snmp.snmp2.SnmpOID[] oidList = target.getSnmpOIDList();
		if (oidList == null) {
			return null;
		} else {
			SnmpOID rootoid = oidList[0];
			SnmpOID curroid = null;
			while (maxtry++ < 3000) { // limit the max getnexts to 5000
				String result1[] = target.snmpGetNextList();
				if (result1 == null) {
					target.oidList[0] = curroid;
					continue;
					// break;
				}
				if (!SnmpTarget.isInSubTree(rootoid, target.getSnmpOID()))
					break; // check first column

				for (int i = 0; i < result1.length; i++) { // print the values
					// System.out.println(target.getObjectID(i) + ": " +
					// result1[i]);
					tmp_result.add(result1[i]);
					tmp_oid.add(target.getObjectID(i));
				}
			}

			if (maxtry == 1) { // we did not get a valid row
				System.err
						.println("Request fed, timed out or no available data("
								+ oid + "). \n " + target.getErrorString());
			}
		}
		// System.out.println("End snmpWalkList");
		return tmp_result;
	}// end walkKPIInfo

	private TblATO_KPIDETAIL createKPI(String KBP_ID, String KPI_ID,
			String KPI_VALUE) {
		TblATO_KPIDETAIL tblato_kpidetail = new TblATO_KPIDETAIL();
		tblato_kpidetail.UNIT_ID = KBP_ID;
		tblato_kpidetail.KPI_ID = KPI_ID;
		tblato_kpidetail.KPI_VALUE = KPI_VALUE;
		tblato_kpidetail.CLL_TIME = new Date();

		return tblato_kpidetail;
	}

	public static void main(String[] args) {
System.out.println(DES3.encrypt("public"));
		// String ip = args[0];
		// String oid = args[1];
		String ip = "172.16.9.98";
		String oid = ".1.3.6.1.4.1.11.2.3.1.2.2.1.4";

		CollHPWithSNMP c = new CollHPWithSNMP(ip);
		// System.out.println(c.getKPIInfo(oid));
		// System.out.println("over");

		// CollHPWithSNMP c = new CollHPWithSNMP(ip);
		// System.out.println(c.getKPIInfo(oid));
		// System.out.println("over");

		// c.release();

		TblATO_KPIDETAIL t = c.getKPIMemoryUseRate();
		System.out.print(t.UNIT_ID + " # ");
		System.out.print(t.KPI_ID + " # ");
		System.out.print(t.KPI_VALUE + " # ");
		System.out.println(t.CLL_TIME + " ");

		t = c.getKPIPhiMemory();
		System.out.print(t.UNIT_ID + " # ");
		System.out.print(t.KPI_ID + " # ");
		System.out.print(t.KPI_VALUE + " # ");
		System.out.println(t.CLL_TIME + " ");
		System.exit(0);

	}
}