package org.infosec.ismp.collectd;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import javax.persistence.GeneratedValue;
import org.infosec.ismp.collectd.services.SnmpAvailabler;
import org.infosec.ismp.eventd.EventIpcManagerFactory;
import org.infosec.ismp.model.Parm;
import org.infosec.ismp.model.Parms;
import org.infosec.ismp.model.event.Event;
import org.infosec.ismp.model.event.EventConstants;
import org.infosec.ismp.model.event.EventListener;
import org.infosec.ismp.snmp.SnmpAgentConfig;
import org.infosec.ismp.util.ThreadCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
/**
* Snmp
* @author lianglin
*
*/
@Component
public class DirectSnmpEventProcessor implements EventListener {
private DirectSnmpMessengerSend messenger;
public final static String STATUS_UP = "Up";
public final static String STATUS_DOWN = "Down";
@Autowired(required=true)
@Qualifier(value="directSnmpSender")
public void setMessenger(DirectSnmpMessengerSend messenger) {
this.messenger = messenger;
}
public DirectSnmpEventProcessor() {
subscribeEvent();
}
/**
* 注册事件
*/
private void subscribeEvent() {
List<String> ueiList = new ArrayList<String>();
ueiList.add(EventConstants.DIRECTSNMP_NODE_AVAILABLE_UEI);
EventIpcManagerFactory.init();
EventIpcManagerFactory.getIpcManager().addEventListener(this, ueiList);
}
@Override
public String getName() {
return "directSnmp:DirectSnmpEventProcessor";
}
@Override
public void onEvent(Event event) {
ThreadCategory log = ThreadCategory.getInstance(getClass());
String eventUei = event.getUei();
String uuid =event.getUuid();
if (eventUei == null)
return;
if (log.isDebugEnabled()) {
log.debug("event is : "+event);
log.debug("Received event: " + eventUei);
}
if (eventUei.equals(EventConstants.DIRECTSNMP_NODE_AVAILABLE_UEI)) {
String ipAddr = event.getIpAddr();
int port = Integer.parseInt(getValue(event.getParms(),"port"));
int version = Integer.parseInt(getValue(event.getParms(),"version"));
String status;
String community = getValue(event.getParms(),"community");
InetAddress address;
try {
address = InetAddress.getByName(ipAddr);
} catch (UnknownHostException e) {
log().error("IP地址输入不正确!", e);
return;
}
SnmpAgentConfig config = new SnmpAgentConfig();
config.setAddress(address);
config.setPort(port);
config.setVersion(version);
config.setReadCommunity(community);
SnmpAvailabler snmp = new SnmpAvailabler(config);
snmp.run();
if(snmp.isAvailable()){
status=STATUS_UP;
}else{
status = STATUS_DOWN;
}
DirectSnmpModel model =new DirectSnmpModel();
model.setUuid(uuid);
model.setAddress(ipAddr);
model.setCommunity(community);
model.setPort(port);
model.setStatus(status);
model.setVersion(version);
try {
messenger.springSend(model);
log().debug("ipAdderss:"
+ ipAddr + "发功MQ队列消息成功!");
} catch (Exception e) {
log().fatal(
"DirectSnmpProcessor类onEvent()方法发送MQ信息失败!ipAdderss:"
+ ipAddr, e);
}
if (log.isDebugEnabled()) {
log.debug("add DirectSnmp node to available : " + ipAddr);
}
}
}
String getValue(Parms parms, String parmName) {
Parm[] parm = parms.getParm();
String value = null;
if (parm != null && parm.length > 0) {
for (int i = 0, count = parm.length; i < count; i++) {
if (parm[i].getParmName().equalsIgnoreCase(parmName)) {
value = parm[i].getValue().getContent();
break;
}
}
}
return value;
}
ThreadCategory log() {
return ThreadCategory.getInstance(getClass());
}
}