broadcasteventprocessor.java
来自「opennms得相关源码 请大家看看」· Java 代码 · 共 845 行 · 第 1/3 页
JAVA
845 行
//// 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://// 2005 Mar 08: Added configure SNMP handler// 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.collectd;import java.net.InetAddress;import java.util.ArrayList;import java.util.Enumeration;import java.util.Iterator;import java.util.List;import java.util.ListIterator;import java.util.Map;import org.apache.log4j.Category;import org.opennms.core.utils.ThreadCategory;import org.opennms.netmgt.EventConstants;import org.opennms.netmgt.config.CollectdConfigFactory;import org.opennms.netmgt.config.SnmpPeerFactory;import org.opennms.netmgt.config.SnmpPeerFactory.SnmpEventInfo;import org.opennms.netmgt.eventd.EventIpcManagerFactory;import org.opennms.netmgt.eventd.EventListener;import org.opennms.netmgt.scheduler.Scheduler;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;import org.opennms.protocols.ip.IPv4Address;/** * * @author <a href="mailto:mike@opennms.org">Mike Davidson </a> * @author <a href="http://www.opennms.org/">OpenNMS </a> */final class BroadcastEventProcessor implements EventListener { /** * The map of service names to service models. */ private Map m_monitors; /** * The scheduler assocated with this receiver */ private Scheduler m_scheduler; /** * List of CollectableService objects. */ private List m_collectableServices; /** * This constructor is called to initilize the JMS event receiver. A * connection to the message server is opened and this instance is setup as * the endpoint for broadcast events. When a new event arrives it is * processed and the appropriate action is taken. * * @param collectableServices * List of all the CollectableService objects scheduled for * collection. * * @throws javax.naming.NamingException * Thrown if the JNDI lookups fail. * @throws javax.jms.JMSException * Thrown if an error occurs in the JMS subsystem. * */ BroadcastEventProcessor(List collectableServices) { // Set the configuration for this event // receiver. // m_scheduler = Collectd.getInstance().getScheduler(); m_collectableServices = collectableServices; installMessageSelectors(); } /** * Create message selector to set to the subscription */ private void installMessageSelectors() { // Create the JMS selector for the ueis this service is interested in // List ueiList = new ArrayList(); // nodeGainedService ueiList.add(EventConstants.NODE_GAINED_SERVICE_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); // primarySnmpInterfaceChanged ueiList.add(EventConstants.PRIMARY_SNMP_INTERFACE_CHANGED_EVENT_UEI); // reinitializePrimarySnmpInterface ueiList.add(EventConstants.REINITIALIZE_PRIMARY_SNMP_INTERFACE_EVENT_UEI); // interfaceReparented ueiList.add(EventConstants.INTERFACE_REPARENTED_EVENT_UEI); // nodeDeleted ueiList.add(EventConstants.NODE_DELETED_EVENT_UEI); // duplicateNodeDeleted ueiList.add(EventConstants.DUP_NODE_DELETED_EVENT_UEI); // interfaceDeleted ueiList.add(EventConstants.INTERFACE_DELETED_EVENT_UEI); // serviceDeleted ueiList.add(EventConstants.SERVICE_DELETED_EVENT_UEI); // outageConfigurationChanged ueiList.add(EventConstants.SCHEDOUTAGES_CHANGED_EVENT_UEI); // configureSNMP ueiList.add(EventConstants.CONFIGURE_SNMP_EVENT_UEI); EventIpcManagerFactory.getInstance().getManager().addEventListener(this, ueiList); } /** * </p> * Closes the current connections to the Java Message Queue if they are * still active. This call may be invoked more than once safely and may be * invoked during object finalization. * </p> * */ synchronized void close() { EventIpcManagerFactory.getInstance().getManager().removeEventListener(this); } /** * This method may be invoked by the garbage collection. Once invoked it * ensures that the <code>close</code> method is called <em>at least</em> * once during the cycle of this object. * */ protected void finalize() throws Throwable { close(); // ensure it's closed } public String getName() { return "Collectd:BroadcastEventProcessor"; } /** * This method is invoked by the JMS topic session when a new event is * available for processing. Currently only text based messages are * processed by this callback. Each message is examined for its Universal * Event Identifier and the appropriate action is taking based on each UEI. * * @param event * The event message. * */ public void onEvent(Event event) { // print out the uei // if (log().isDebugEnabled()) { log().debug("received event, uei = " + event.getUei()); } if(event.getUei().equals(EventConstants.SCHEDOUTAGES_CHANGED_EVENT_UEI)) { log().warn("Reloading Collectd config factory"); //Reload the collectd configuration try { CollectdConfigFactory.reload(); } catch (Exception e) { e.printStackTrace(); log().error("Failed to reload CollectdConfigFactory because "+e.getMessage()); } Collectd.getInstance().refreshServicePackages(); } else if(!event.hasNodeid() && !event.getUei().equals(EventConstants.CONFIGURE_SNMP_EVENT_UEI)) { // For all other events, if the event doesn't have a nodeId it can't be processed. log().info("no database node id found, discarding event"); } else if (event.getUei().equals(EventConstants.NODE_GAINED_SERVICE_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log().info("no interface found, discarding event"); } else { nodeGainedServiceHandler(event); } } else if (event.getUei().equals(EventConstants.PRIMARY_SNMP_INTERFACE_CHANGED_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log().info("no interface found, discarding event"); } else { primarySnmpInterfaceChangedHandler(event); } } else if (event.getUei().equals(EventConstants.REINITIALIZE_PRIMARY_SNMP_INTERFACE_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log().info("no interface found, discarding event"); } else { reinitializePrimarySnmpInterfaceHandler(event); } } else if (event.getUei().equals(EventConstants.INTERFACE_REPARENTED_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log().info("no interface found, discarding event"); } else { interfaceReparentedHandler(event); } } else if (event.getUei().equals(EventConstants.NODE_DELETED_EVENT_UEI) || event.getUei().equals(EventConstants.DUP_NODE_DELETED_EVENT_UEI)) { // NEW NODE OUTAGE EVENTS nodeDeletedHandler(event); } else if (event.getUei().equals(EventConstants.INTERFACE_DELETED_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log().info("no interface found, discarding event"); } else { interfaceDeletedHandler(event); } } else if (event.getUei().equals(EventConstants.SERVICE_DELETED_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log().info("no interface found, discarding event"); } else if (event.getService() == null || event.getService().length() == 0) { // If there is no service then it cannot be processed // log().info("no service found, discarding event"); } else { serviceDeletedHandler(event); } } else if (event.getUei().equals(EventConstants.CONFIGURE_SNMP_EVENT_UEI)) { configureSNMPHandler(event); } } // end onEvent() /** * Process the event. * * This event is generated when a managed node which supports SNMP gains a * new interface. In this situation the CollectableService object
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?