package org.infosec.ismp.manager.topo; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Date; import java.util.List; import java.util.UUID; import org.infosec.ismp.collectd.SnmpGetterModel; import org.infosec.ismp.manager.ComponentLocator; import org.infosec.ismp.manager.agent.AgentComponent; import org.infosec.ismp.manager.direct.DirectRequestSender; import org.infosec.ismp.manager.domains.DomainComponent; import org.infosec.ismp.manager.domains.DomainLocator; import org.infosec.ismp.model.Parm; import org.infosec.ismp.model.Parms; import org.infosec.ismp.model.Value; import org.infosec.ismp.model.event.Event; import org.infosec.ismp.model.event.EventConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component public class SnmpGetterLocator implements ComponentLocator { private DomainLocator m_domainLocator; @Autowired(required = true) public void setDomainLocator(DomainLocator domainLocator) { m_domainLocator = domainLocator; } private DirectRequestSender directSnmpGetterSender; @Autowired(required=true) @Qualifier(value="snmpGetterDirectRequstSender") public void setDirectSnmpSender(DirectRequestSender directSnmpSender) { this.directSnmpGetterSender = directSnmpSender; } @Override public void init() { System.out.println("Ping Locator 开始初始化"); // Assert.state(m_pingService != null, "m_pingDao不能为空,请检查"); // Assert.state(m_domainLocator != null, "m_domainLocator不能为空,请检查"); } /** * SNMP不带域id的getter方法 * @param getType * @param ipAddr * @param port * @param oid * @param community * @param version * @return */ public SnmpGetterModel snmpGetter(String getType, String ipAddr, int port,String oid, String community,int timeout, int version) { List<DomainComponent> domains = m_domainLocator.getAllDomains(); for(DomainComponent domainComp:domains){ String domainName = domainComp.getDomainId(); SnmpGetterModel model = snmpGetter(getType,domainName,ipAddr,port,oid,community,timeout,version); if(model!=null){ return model; } } return null; } /** * SNMP带域id的getter方法 * @param getType * @param domain * @param ipAddr * @param port * @param oid * @param community * @param version * @return */ public SnmpGetterModel snmpGetter(String getType,String domain, String ipAddr, int port,String oid, String community,int timeout, int version) { Event event = createSnmpGetterEvent(getType,ipAddr,port,oid,community,timeout,version); DomainComponent domainComp = m_domainLocator .createDomainIfNessary(domain); AgentComponent agent =domainComp.getRightAgent(); String agentAddress = agent.getAgentAddress(); int agentPort = agent.getAgentPort(); if(null!=agentAddress){ InetAddress host = null; try { host = InetAddress.getByName(agentAddress); } catch (UnknownHostException e) { e.printStackTrace(); } SnmpGetterModel result =(SnmpGetterModel)directSnmpGetterSender.sendEvent(host, agentPort, event, timeout); return result; }else{ return null; } } /** * 构造SnmpGetterEvent * @param address * @return */ private Event createSnmpGetterEvent(String getType,String ipAddr, int port,String oid, String community,int timeout, int version) { Event event = new Event(); event.setUuid(UUID.randomUUID().toString()); if("String".equalsIgnoreCase(getType)){ event.setUei(EventConstants.SNMPGETTER_NODE_GETSTRING_UEI); }else if("Column".equalsIgnoreCase(getType)){ event.setUei(EventConstants.SNMPGETTER_NODE_GETCOLUMN_UEI); }else{ event.setUei(EventConstants.SNMPGETTER_NODE_GETTABLE_UEI); } event.setTime(EventConstants.formatToString(new Date())); event.setIpAddr(ipAddr); Parms parms = new Parms(); Parm parm = new Parm(); parm.setParmName("port"); Value value = new Value(); value.setContent(String.valueOf(port)); parm.setValue(value); parms.addParm(parm); parm = new Parm(); parm.setParmName("oid"); value = new Value(); value.setContent(oid); parm.setValue(value); parms.addParm(parm); parm = new Parm(); parm.setParmName("community"); value = new Value(); value.setContent(community); parm.setValue(value); parms.addParm(parm); parm = new Parm(); parm.setParmName("timeout"); value = new Value(); value.setContent(String.valueOf(timeout)); parm.setValue(value); parms.addParm(parm); parm = new Parm(); parm.setParmName("version"); value = new Value(); value.setContent(String.valueOf(version)); parm.setValue(value); parms.addParm(parm); event.setParams(parms); return event; } }