package org.infosec.ismp.manager.snmpTrap; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import org.infosec.ismp.manager.ComponentLocator; import org.infosec.ismp.manager.domains.DomainComponent; import org.infosec.ismp.manager.domains.DomainLocator; import org.infosec.ismp.manager.model.SnmpTrapNodeEntity; import org.infosec.ismp.util.ThreadCategory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.Assert; @Component public class SnmpTrapLocator implements ComponentLocator { /** * nodeid<->domain */ private Map<String, DomainComponent> nodeidMaps = new HashMap<String, DomainComponent>(); private DomainLocator m_domainLocator; private SnmpTrapNodeEntityService m_snmpTrapService; @Autowired(required = true) public void setSnmpTrapService(SnmpTrapNodeEntityService snmpTrapService) { m_snmpTrapService = snmpTrapService; } @Autowired(required = true) public void setDomainLocator(DomainLocator domainLocator) { m_domainLocator = domainLocator; } @PostConstruct public void init() { System.out.println("SnmpTrap Locator 开始初始化"); Assert.state(m_snmpTrapService != null, "m_pingDao不能为空,请检查"); Assert.state(m_domainLocator != null, "m_domainLocator不能为空,请检查"); distruteAllSnmpTrapNode(); } /** * 初始化snmpTrapNode任务 */ public void distruteAllSnmpTrapNode() { List<SnmpTrapNodeEntity> entities = getAllSnmpTrapNode(); for (SnmpTrapNodeEntity entity : entities) { String domain = entity.getDomain(); addSnmpTrapNodeToDomain(domain,entity.getNodeid() ,entity.getSnmpTrapType(),entity.getSnmpTrapAddress()); } } /** * 从DB中获取所有snmpTrapNode任务entity * @return */ public List<SnmpTrapNodeEntity> getAllSnmpTrapNode() { return m_snmpTrapService.getAll(); } /** * 新增snmpTrap服务 * @param domain * @param nodeid * @param url * @param interval */ public void addSnmpTrapNode(String domain, String nodeid, String snmpTrapType, String snmpTrapAddress){ addSnmpTrapNodeToDb(domain,nodeid,snmpTrapType,snmpTrapAddress); addSnmpTrapNodeToDomain(domain,nodeid,snmpTrapType,snmpTrapAddress); } /** * 将snmpTrap任务添加到domainComponent * @param domain * @param nodeid * @param ipaddr * @param interval * @param halfFlag */ private void addSnmpTrapNodeToDomain(String domain, String nodeid, String snmpTrapType, String snmpTrapAddress) { DomainComponent domainComp = m_domainLocator .createDomainIfNessary(domain); nodeidMaps.put(nodeid, domainComp); SnmpTrapNode node = createSnmpTrapNode(nodeid,snmpTrapType,snmpTrapAddress); domainComp.addSnmpTrapNode(node); } /** * 将sitecheck任务添加到数据库中 * @param domain * @param nodeid * @param url * @param interval */ private void addSnmpTrapNodeToDb(String domain, String nodeid, String snmpTrapType, String snmpTrapAddress){ SnmpTrapNodeEntity entity = new SnmpTrapNodeEntity(); entity.setDomain(domain); entity.setNodeid(nodeid); entity.setSnmpTrapAddress(snmpTrapAddress); entity.setSnmpTrapType(snmpTrapType); m_snmpTrapService.addSnmpTrapNode(entity); } /** * 删除sitecheck服务 * @param nodeid */ public void removeSnmpTrapNode(String nodeid){ removeSnmpTrapNodeFromDb(nodeid); removeSnmpTrapNodeFromDomain(nodeid); nodeidMaps.remove(nodeid); } /** * 创建一个SnmpTrapNode * @param nodeid * @param url * @param interval * @return */ private SnmpTrapNode createSnmpTrapNode(String nodeid,String snmpTrapType, String snmpTrapAddress){ SnmpTrapNode node = new SnmpTrapNode(); node.setNodeid(nodeid); node.setSnmpTrapAddress(snmpTrapAddress); node.setSnmpTrapType(snmpTrapType); return node; } /** * 从domainComponent中删除一个snmpTrapNode任务 * @param nodeid */ private void removeSnmpTrapNodeFromDomain(String nodeid){ DomainComponent domainComp =nodeidMaps.get(nodeid); if (domainComp != null) { domainComp.removeSnmpTrapNodeByNodeId(nodeid); } else { if (log().isDebugEnabled()) { log().debug("removeSnmpTrapNode没有找到该nodeId:" + nodeid + "对应的域 "); } } } /** * 从DB中删除一个snmpTrapNode * @param nodeid */ private void removeSnmpTrapNodeFromDb(String nodeid){ m_snmpTrapService.removeSnmpTrapNodeByNodeId(nodeid); } ThreadCategory log() { return ThreadCategory.getInstance(getClass()); } public String getDomainByNodeId(String nodeid) { DomainComponent dc = nodeidMaps.get(nodeid); if(dc!=null) return dc.getDomainId(); return null; } }