⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmpmanager.java

📁 this is example use EJB with jboss.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
				publicTrapVOAndSaveDB(response, peerAddress);
			}
		}
	}

	/**
	 * Public Trap and save Trap information into database
	 * 
	 * @param response
	 * @param peerAddress
	 * @return
	 */
	private boolean publicTrapVOAndSaveDB(PDU response, String peerAddress) {

		if ((response == null) || (peerAddress == null)) {
			return false;
		}
		try {
			
			LogWriter.getSNMPLogger().debug("Start notify TrapVO And Save to DB");

			if (response != null) {
				TrapVO trapVO = createTrapVO(response, peerAddress);

				// 1. Publish trap to client
				if (trapPublisher == null) {
					trapPublisher = new TrapPublisher();
				}

				boolean isOk = trapPublisher.publish(trapVO);
				LogWriter.getSNMPLogger().info("Total Trap Number to public:" + countTrap);
				
				if (isOk) {
					LogWriter.getSNMPLogger().debug("Send Trap to client is successfuly");
				} else {
					LogWriter.getSNMPLogger().error("Send Trap to client is false");
					LogWriter.getSNMPLogger().error("Trap data: " + trapVO.toString());
				}				
				// 2. Save to database
				saveObject2Database(trapVO);
				return true;
			}
		} catch (Exception e) {
			LogWriter.getSNMPLogger().error(e.toString());
			if(LogWriter.getSNMPLogger().isDebugEnabled()){
				LogWriter.getSNMPLogger().debug(Utils.parseException(e));
			}
		}
		return false;
	}

	/***
	 * Create TrapVO
	 * 
	 * @param response
	 * @param peerAddress
	 * @return TrapVO Object
	 */
	private TrapVO createTrapVO(PDU response, String peerAddress) {
		try {
			// LogWriter.getSNMPLogger().debug("create TrapVO get from PTE ...");

			TrapVO trapVO = new TrapVO();

			trapVO.setBlockIP(Utils.getAddress(peerAddress));
			trapVO.setTime(Utils.getTimeStampMilli());

			int len = response.size();
			int valueTemp = -1;

			for (int i = 0; i < len; i++) {
				VariableBinding recVB = response.get(i);
				if (recVB != null) {
					String tempOID = recVB.getOid().toString();
					// LogWriter.getSNMPLogger().debug("OID:" + recVB.getOid());
					// LogWriter.getSNMPLogger().debug("Value:" + recVB.getVariable());
					if ((tempOID != null) && (tempOID.trim().length() > 0)) {
						tempOID = tempOID.trim();
						if (tempOID
								.equalsIgnoreCase(AWGNEConstants.OID_SLOT_NUMBER)) {
							// Search SLOT_NUMBER by OID
							String tempValue = recVB.getVariable().toString();
							trapVO.setSlotNumber(Utils.parseInt(tempValue, -1));
						} else if (tempOID
								.equalsIgnoreCase(AWGNEConstants.OID_PACKAGE_NAME)) {
							// Search SLOT_Name by OID
							String tempValue = recVB.getVariable().toString();
							trapVO.setPackageTypeName(tempValue);
						} else if (tempOID.startsWith(AWGNEConstants.OID_ALARM_LEVEL)) {
							trapVO.setOID(tempOID);
							// Search ALARM_TYPE by OID
							String tempValue = recVB.getVariable().toString();
							valueTemp = Utils.parseInt(tempValue, -1);
						} else if (tempOID.startsWith(AWGNEConstants.OID_ALARM_TYPE)) {
							// Search ALARM_TYPE by OID
							String tempValue = recVB.getVariable().toString();
							trapVO.setTrapType(tempValue);
						} else {
							// nothing
						}
					} else {
						// nothing
					}
				}
			}

			String tempAlarmLevel = AlarmLevel.getAlarmLevel(trapVO
					.getPackageTypeName(), trapVO.getTrapOID(), valueTemp);
			trapVO.setTrapLevel(tempAlarmLevel);
			// LogWriter.getSNMPLogger().debug(trapVO.toString());

			if (dbFunctionManager == null) {
				// dbFunctionManager = new
				// DBFunctionsManager(INIT_NUMB_CONNECTION, true);
				dbFunctionManager = new DBFunctionsManager();
				LogWriter.getSNMPLogger().debug("Created Database Manager Object");
			}

			if (dbFunctionManager.open().isSucceeded()) {
				// LogWriter.getSNMPLogger().debug(
				// "Start reading Block Name, Node Name from DB");
				BlockVO blockVO = dbFunctionManager.getBlock(trapVO.getBlockIP());
				if (blockVO != null) {
					trapVO.setBlockName(blockVO.getName());
					NodeVO nodeVO = dbFunctionManager.getNode(blockVO.getParentID());
					if (nodeVO != null) {
						trapVO.setNodeName(nodeVO.getName());
					}
				} else {
					LogWriter.getSNMPLogger().debug("Block, Node info not fount");
				}
				dbFunctionManager.close();
			} else {
				LogWriter.getSNMPLogger().error("Failed to get connection. Cannot read Block Name, Node Name form database");
			}			
			return trapVO;
		} catch (Exception e) {
			LogWriter.getSNMPLogger().error(e.toString());
			if (LogWriter.getSNMPLogger().isTraceEnabled()) {
				LogWriter.getSNMPLogger().trace(Utils.parseException(e));
			}
			return null;
		}
	}

	/***
	 * send PDU to AWG-NE The PDU object represents a SNMP protocol data unit.
	 * 
	 * @param pduRequest
	 * @param targetRequest
	 * @return
	 * @throws IOException
	 */
	private PDU sendPDU(PDU pduRequest, Target targetRequest,
			boolean isSynchonized) throws IOException {

		PDU response = null;

		try {
			if (targetRequest != null) {
				if (isSynchonized) { //Synchonize
					ResponseEvent responseEvent;
					responseEvent = snmpManager.send(pduRequest, targetRequest);
					if (responseEvent != null) {
						response = responseEvent.getResponse();
						return response;
					} else {
						return null;
					}
				} else {//Unsynchonize
					LogWriter.getSNMPLogger().debug("snmpName: " + ipAddress);
					snmpManager.send(pduRequest, targetRequest, null, this);
					return pduRequest;
				}
			} else {
				return null;
			}
		} catch (IOException e) {
			LogWriter.getSNMPLogger().error("Error while create Snmp Session: " + e.toString());
			LogWriter.getSNMPLogger().error("Can not send Snmp to PTE: " + e.toString());

			if (LogWriter.getSNMPLogger().isTraceEnabled()) {
				LogWriter.getSNMPLogger().trace(Utils.parseException(e));
			}
			return null;
		} catch (Exception e) {
			LogWriter.getSNMPLogger().error("Error while create Snmp Session: " + e.toString());
			LogWriter.getSNMPLogger().error("Can not send Snmp to PTE: " + e.toString());

			if (LogWriter.getSNMPLogger().isTraceEnabled()) {
				LogWriter.getSNMPLogger().trace(Utils.parseException(e));
			}
			return null;

		}
	}

	/**
	 * Listener response and get response from AWG-NE
	 */
	public void onResponse(ResponseEvent event) { //Note: No setting sysnchonize
		try {
			
			((Snmp) event.getSource()).cancel(event.getRequest(), this);

			if (event.getResponse() == null) {
				setResult(event, true);
			} else {
				setResult(event, false);
			}
		} catch (Exception e) {
			LogWriter.getSNMPLogger().error(e.toString());
			if (LogWriter.getSNMPLogger().isTraceEnabled()) {
				LogWriter.getSNMPLogger().trace(Utils.parseException(e));
			}
		}
	}

	/***
	 * Execute SNMP Set command
	 * 
	 * @param snmpVO
	 * @param isSetSlot
	 * @return
	 * @throws IOException
	 */
	private SnmpVO snmpSet(SnmpVO snmpVO, boolean isSetSlot) throws IOException {
		PDU pdu = null;
		if (isSetSlot) {
			pdu = createPDU(snmpVO.getOidSetSlot(), PDU.SET, snmpVO
					.getValueSetSlot());
		} else {
			pdu = createPDU(snmpVO.getOidSetSet(), PDU.SET, snmpVO
					.getValueSetSet());
		}

		Target tmpTagert = createCommunityTarget(snmpVO.getAwgNeIP(), this.timeout, this.retries);
		if ((pdu != null) && (tmpTagert != null)) {
			// Solution 1: Unsynchronized
			PDU pduRequest = sendPDU(pdu, tmpTagert, false);
			return readResponse(Constants.SNMP_SET, pduRequest.getRequestID()
					.getValue(), snmpVO, isSetSlot);
			// Solution 2: Synchronized
			// return readResponse(sendPDU(pdu, tmpTagert), Constants.SNMP_SET,
			// snmpVO, isSetSlot);
		} else {
			LogWriter.getSNMPLogger().error("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt"
					+ "\nOid = " + snmpVO.getOidGet() + "\nAWG-NE IP = " + snmpVO.getAwgNeIP());
			LogWriter.getSNMPLogger().error("Execute SNMP Set command: Failt");
			snmpVO.setError(true);
			snmpVO.setErrorMessage("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt" 
					+ "\nOid = " + snmpVO.getOidGet() + "\nAWG-NE IP = " + snmpVO.getAwgNeIP());
			
			return snmpVO;
		}
	}

	/***
	 * Execute SNMP get command
	 * 
	 * @param snmpVO
	 * @return
	 * @throws IOException
	 */
	private SnmpVO snmpGet(SnmpVO snmpVO) throws IOException {
		// LogWriter.getSNMPLogger().debug("Start SNMP GET");
		PDU pdu = createPDU(snmpVO.getOidGet(), PDU.GET, "NULL");

		Target tmpTagert = createCommunityTarget(snmpVO.getAwgNeIP(),
				this.timeout, this.retries);
		if ((pdu != null) && (tmpTagert != null)) {
			// Solution 1: Unsynchronized
			PDU requestPDU = sendPDU(pdu, tmpTagert, false);
			return readResponse(Constants.SNMP_GET, requestPDU.getRequestID()
					.getValue(), snmpVO, true);
			// Solution 2: Synchronized
			// return readResponse(sendPDU(pdu, tmpTagert), Constants.SNMP_GET,
			// snmpVO, true);
		} else {
			LogWriter.getSNMPLogger().error("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt");
			LogWriter.getSNMPLogger().error("Execute SNMP Set command: Failt");
			snmpVO.setError(true);
			snmpVO.setErrorMessage("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt" 
					+ "\nOid = " + snmpVO.getOidGet() + "\nAWG-NE IP = " + snmpVO.getAwgNeIP());
			
			return snmpVO;
		}
	}

	/***
	 * Execute SNMP Set and Get command
	 * 
	 * @param snmpVO
	 * @return SnmpVO
	 * @throws IOException
	 */
	public synchronized SnmpVO snmpSetGet(SnmpVO snmpVO) throws IOException {

		if (this.snmpManager == null) {
			String jbossHost = Setting.getServerAddress();			
			int index = jbossHost.indexOf(":");
			if (index > 0){
				jbossHost = jbossHost.substring(0,index);
			}
			snmpManager = createSnmpSession(jbossHost);
			snmpManager.listen();
		}
		
		// Step 1: Set slot
		SnmpVO updateSnmpVO = snmpSet(snmpVO, true);
		//LogWriter.getSNMPLogger().info("Snmp VO after snmpSet: " + updateSnmpVO.toString());
		if (updateSnmpVO != null) {
			// Step 2: Get value
			if (updateSnmpVO.isError() == false) {
				updateSnmpVO = snmpGet(updateSnmpVO);
				return updateSnmpVO;
			} else {				
				return updateSnmpVO;
			}
		} else {
			LogWriter.getSNMPLogger().error("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt");
			LogWriter.getSNMPLogger().error("Execute SNMP Set command: Failt");

			snmpVO.setError(true);
			snmpVO.setErrorMessage("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt"
							+ "\nOid = " + snmpVO.getOidGet() + "\nAWG-NE IP = " + snmpVO.getAwgNeIP());
			return snmpVO;
		}
	}

	/***
	 * Execute SNMP Set and Set command
	 * 
	 * @param snmpVO
	 * @return SnmpVO
	 * @throws IOException
	 */
	public synchronized SnmpVO snmpSetSet(SnmpVO snmpVO) throws IOException {
		
		if (this.snmpManager == null) {
			String jbossHost = Setting.getServerAddress();			
			int index = jbossHost.indexOf(":");
			if (index > 0){
				jbossHost = jbossHost.substring(0,index);
			}			
			snmpManager = createSnmpSession(jbossHost);
			snmpManager.listen();
		}
		// Step 1: Set slot
		SnmpVO updateSnmpVO = snmpSet(snmpVO, true);

		if (updateSnmpVO != null) {
			// Step 2: Get value
			if (updateSnmpVO.isError() == false) {
				updateSnmpVO = snmpSet(updateSnmpVO, false);
				// long startTime = System.currentTimeMillis();
				// String startAt = Utils.getNow(Constants.DATE_FORMAT);
				// LogWriter.getSNMPLogger().debug("startAt: " + startAt);
				operationLog(updateSnmpVO);
				// LogWriter.getSNMPLogger().debug("Save Operation after: " +
				// (System.currentTimeMillis() - startTime) + " ms");
				return updateSnmpVO;
			} else {				
				LogWriter.getSNMPLogger().error(updateSnmpVO.getErrorMessage());
				// long startTime = System.currentTimeMillis();
				// String startAt = Utils.getNow(Constants.DATE_FORMAT);
				// LogWriter.getSNMPLogger().debug("startAt: " + startAt);
				operationLog(updateSnmpVO);
				// LogWriter.getSNMPLogger().debug("Save Operation after: " +
				// (System.currentTimeMillis() - startTime) + " ms");
				return updateSnmpVO;
			}
		} else {
			LogWriter.getSNMPLogger().error("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt");
			LogWriter.getSNMPLogger().error("Execute SNMP Set command: Failt");
			snmpVO.setError(true);
			snmpVO.setErrorMessage("Create [PDU Object]/[Tagert Object] represents a SNMP protocol data unit: Failt"
							+ "\nOid = " + snmpVO.getOidGet() + "\nAWG-NE IP = " + snmpVO.getAwgNeIP());
			// long startTime = System.currentTimeMillis();
			// String startAt = Utils.getNow(Constants.DATE_FORMAT);
			// LogWriter.getSNMPLogger().debug("startAt: " + startAt);
			operationLog(snmpVO);
			// LogWriter.getSNMPLogger().debug("Save Operation after: " +
			// (System.currentTimeMillis() - startTime) + " ms");
			return snmpVO;

		}
	}

	/**
	 * Save SNMP SET into database
	 * 
	 * @param snmpVO
	 */
	private void operationLog(SnmpVO snmpVO) {
		try {
			LogWriter.getSNMPLogger().info("Start save SNMP Set into database");
			OperationVO operationVO = new OperationVO();

			operationVO.setUserName(snmpVO.getUserName());
			operationVO.setTime(System.currentTimeMillis());

			String strContent = "Snmp Set: <Client IP Address: "
					+ ((snmpVO.getClientIP() != null) ? snmpVO.getClientIP()
							: "Unknow") + "><FunctionBlockIP Address: "
					+ snmpVO.getAwgNeIP() + "><SlotNo: "
					+ snmpVO.getValueSetSlot() + "><OID: "
					+ snmpVO.getOidSetSet() + "><Set value: "
					+ snmpVO.getValueSetSet() + "><Result: "
					+ (!snmpVO.isError()) + ">";

			operationVO.setContent(strContent);
			// 2. Save to database
			saveObject2Database(operationVO);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -