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 + -
显示快捷键?