📄 pollereventprocessor.java
字号:
//// This file is part of the OpenNMS(R) Application.//// OpenNMS(R) is Copyright (C) 2002-2003 The OpenNMS Group, Inc. All rights reserved.// OpenNMS(R) is a derivative work, containing both original code, included code and modified// code that was published under the GNU General Public License. Copyrights for modified // and included code are below.//// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.//// Modifications://// 2004 Jan 06: Added support for SUSPEND_POLLING_SERVICE_EVENT_UEI and// RESUME_POLLING_SERVICE_EVENT_UEI// 2003 Nov 11: Merged changes from Rackspace project// 2003 Jan 31: Cleaned up some unused imports.//// Original code base Copyright (C) 1999-2001 Oculan Corp. All rights reserved.//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.//// For more information contact:// OpenNMS Licensing <license@opennms.org>// http://www.opennms.org/// http://www.opennms.com///// Tab Size = 8//package org.opennms.netmgt.poller;import java.net.InetAddress;import java.net.UnknownHostException;import java.text.ParseException;import java.util.ArrayList;import java.util.Date;import java.util.Enumeration;import java.util.List;import org.apache.log4j.Category;import org.opennms.core.utils.ThreadCategory;import org.opennms.netmgt.EventConstants;import org.opennms.netmgt.config.PollerConfig;import org.opennms.netmgt.eventd.EventIpcManager;import org.opennms.netmgt.eventd.EventListener;import org.opennms.netmgt.poller.pollables.PollableInterface;import org.opennms.netmgt.poller.pollables.PollableNetwork;import org.opennms.netmgt.poller.pollables.PollableNode;import org.opennms.netmgt.poller.pollables.PollableService;import org.opennms.netmgt.utils.XmlrpcUtil;import org.opennms.netmgt.xml.event.Event;import org.opennms.netmgt.xml.event.Parm;import org.opennms.netmgt.xml.event.Parms;import org.opennms.netmgt.xml.event.Value;/** * * @author <a href="mailto:jamesz@opennms.com">James Zuo </a> * @author <a href="mailto:weave@oculan.com">Brian Weaver </a> * @author <a href="http://www.opennms.org/">OpenNMS </a> */final class PollerEventProcessor implements EventListener { private Poller m_poller; /** * Create message selector to set to the subscription */ private void createMessageSelectorAndSubscribe() { // Create the selector for the ueis this service is interested in // List ueiList = new ArrayList(); // nodeGainedService ueiList.add(EventConstants.NODE_GAINED_SERVICE_EVENT_UEI); // serviceDeleted // deleteService /* * NOTE: deleteService is only generated by the PollableService itself. * Therefore, we ignore it. If future implementations allow other * subsystems to generate this event, we may have to listen for it as * well. 'serviceDeleted' is the response event that the outage manager * generates. We ignore this as well, since the PollableService has * already taken action at the time it generated 'deleteService' */ ueiList.add(EventConstants.SERVICE_DELETED_EVENT_UEI); // ueiList.add(EventConstants.DELETE_SERVICE_EVENT_UEI); // serviceManaged // serviceUnmanaged // interfaceManaged // interfaceUnmanaged /* * NOTE: These are all ignored because the responsibility is currently * on the class generating the event to restart the poller service. If * that implementation is ever changed, this message selector should * listen for these and act on them. */ // ueiList.add(EventConstants.SERVICE_MANAGED_EVENT_UEI); // ueiList.add(EventConstants.SERVICE_UNMANAGED_EVENT_UEI); // ueiList.add(EventConstants.INTERFACE_MANAGED_EVENT_UEI); // ueiList.add(EventConstants.INTERFACE_UNMANAGED_EVENT_UEI); // interfaceIndexChanged // NOTE: No longer interested in this event...if Capsd detects // that in interface's index has changed a // 'reinitializePrimarySnmpInterface' event is generated. // ueiList.add(EventConstants.INTERFACE_INDEX_CHANGED_EVENT_UEI); // interfaceReparented ueiList.add(EventConstants.INTERFACE_REPARENTED_EVENT_UEI); // reloadPollerConfig /* * NOTE: This is ignored because the reload is handled through an * autoaction. */ // ueiList.add(EventConstants.RELOAD_POLLER_CONFIG_EVENT_UEI); // NODE OUTAGE RELATED EVENTS // // nodeAdded /* * NOTE: This is ignored. The real trigger will be the first * nodeGainedService event, at which time the interface and node will be * created */ // ueiList.add(EventConstants.NODE_ADDED_EVENT_UEI); // nodeDeleted ueiList.add(EventConstants.NODE_DELETED_EVENT_UEI); // duplicateNodeDeleted ueiList.add(EventConstants.DUP_NODE_DELETED_EVENT_UEI); // nodeGainedInterface /* * NOTE: This is ignored. The real trigger will be the first * nodeGainedService event, at which time the interface and node will be * created */ // ueiList.add(EventConstants.NODE_GAINED_INTERFACE_EVENT_UEI); // interfaceDeleted ueiList.add(EventConstants.INTERFACE_DELETED_EVENT_UEI); // suspendPollingService ueiList.add(EventConstants.SUSPEND_POLLING_SERVICE_EVENT_UEI); // resumePollingService ueiList.add(EventConstants.RESUME_POLLING_SERVICE_EVENT_UEI); // scheduled outage configuration change ueiList.add(EventConstants.SCHEDOUTAGES_CHANGED_EVENT_UEI); // Subscribe to eventd getEventManager().addEventListener(this, ueiList); } /** * Process the event, construct a new PollableService object representing * the node/interface/service/pkg combination, and schedule the service for * polling. * * If any errors occur scheduling the interface no error is returned. * * @param event * The event to process. * */ private void nodeGainedServiceHandler(Event event) { Category log = ThreadCategory.getInstance(getClass()); // Is this the result of a resumePollingService event? String whichEvent = "Unexpected Event: " + event.getUei() + ": "; if (event.getUei().equals(EventConstants.NODE_GAINED_SERVICE_EVENT_UEI)) { whichEvent = "nodeGainedService: "; } else if (event.getUei().equals(EventConstants.RESUME_POLLING_SERVICE_EVENT_UEI)) { whichEvent = "resumePollingService: "; } // First make sure the service gained is in active state before trying // to // schedule String ipAddr = event.getInterface(); int nodeId = (int) event.getNodeid(); String svcName = event.getService(); getPoller().scheduleService(nodeId, ipAddr, svcName); } /** * This method is responsible for processing 'interfacReparented' events. An * 'interfaceReparented' event will have old and new nodeId parms associated * with it. Node outage processing hierarchy will be updated to reflect the * new associations. * * @param event * The event to process. * */ private void interfaceReparentedHandler(Event event) { Category log = ThreadCategory.getInstance(getClass()); if (log.isDebugEnabled()) log.debug("interfaceReparentedHandler: processing interfaceReparented event for " + event.getInterface()); // Verify that the event has an interface associated with it if (event.getInterface() == null) return; String ipAddr = event.getInterface(); // Extract the old and new nodeId's from the event parms String oldNodeIdStr = null; String newNodeIdStr = null; Parms parms = event.getParms(); if (parms != null) { String parmName = null; Value parmValue = null; String parmContent = null; Enumeration parmEnum = parms.enumerateParm(); while (parmEnum.hasMoreElements()) { Parm parm = (Parm) parmEnum.nextElement(); parmName = parm.getParmName(); parmValue = parm.getValue(); if (parmValue == null) continue; else parmContent = parmValue.getContent(); // old nodeid if (parmName.equals(EventConstants.PARM_OLD_NODEID)) { oldNodeIdStr = parmContent; } // new nodeid else if (parmName.equals(EventConstants.PARM_NEW_NODEID)) { newNodeIdStr = parmContent; } } } // Only proceed provided we have both an old and a new nodeId // if (oldNodeIdStr == null || newNodeIdStr == null) { log.error("interfaceReparentedHandler: old and new nodeId parms are required, unable to process."); return; } PollableNode oldNode; PollableNode newNode; try { oldNode = getNetwork().getNode(Integer.parseInt(oldNodeIdStr)); if (oldNode == null) { log.error("interfaceReparentedHandler: Cannot locate old node "+oldNodeIdStr+" belonging to interface "+ipAddr); return; } newNode = getNetwork().getNode(Integer.parseInt(newNodeIdStr)); if (newNode == null) { log.error("interfaceReparentedHandler: Cannot locate new node "+newNodeIdStr+" to move interface to."); return; } PollableInterface iface = oldNode.getInterface(InetAddress.getByName(ipAddr)); if (iface == null) { log.error("interfaceReparentedHandler: Cannot locate interface with ipAddr "+ipAddr+" to reparent."); return; } iface.reparentTo(newNode); } catch (NumberFormatException nfe) { log.error("interfaceReparentedHandler: failed converting old/new nodeid parm to integer, unable to process."); return; } catch (UnknownHostException e) { log.error("interfaceReparentedHandler: failed converting ipAddr "+ipAddr+" to an inet address"); return; } } /** * This method is responsible for removing a node's pollable service from * the pollable services list */ private void nodeRemovePollableServiceHandler(Event event) { Category log = ThreadCategory.getInstance(getClass()); int nodeId = (int) event.getNodeid(); String ipAddr = event.getInterface(); String svcName = event.getService(); InetAddress address; try { address = InetAddress.getByName(ipAddr); } catch (UnknownHostException e) { log.error("Unable to convert "+ipAddr+" to an inet address", e); return; } if (svcName == null) { log.error("nodeRemovePollableServiceHandler: service name is null, ignoring event"); return; } PollableService svc = getNetwork().getService(nodeId, address, svcName); svc.delete(); } /** * This method is responsible for removing the node specified in the * nodeDeleted event from the Poller's pollable node map. */ private void nodeDeletedHandler(Event event) { Category log = ThreadCategory.getInstance(getClass()); int nodeId = (int) event.getNodeid(); final String sourceUei = event.getUei();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -