📄 snmpmanager.java
字号:
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 + -