⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poller.java

📁 opennms得相关源码 请大家看看
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//// 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://// 2003 Nov 11: Merged changes from Rackspace project// 2003 Oct 08: Implemented the poller release function.// 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///package org.opennms.netmgt.poller;import java.lang.reflect.UndeclaredThrowableException;import java.net.InetAddress;import java.net.UnknownHostException;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp;import java.util.Date;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.apache.log4j.Category;import org.apache.log4j.Priority;import org.opennms.core.fiber.PausableFiber;import org.opennms.core.utils.ThreadCategory;import org.opennms.netmgt.EventConstants;import org.opennms.netmgt.config.DbConnectionFactory;import org.opennms.netmgt.config.PollOutagesConfig;import org.opennms.netmgt.config.PollerConfig;import org.opennms.netmgt.config.poller.Package;import org.opennms.netmgt.eventd.EventIpcManager;import org.opennms.netmgt.poller.monitors.ServiceMonitor;import org.opennms.netmgt.poller.pollables.DbPollEvent;import org.opennms.netmgt.poller.pollables.PollEvent;import org.opennms.netmgt.poller.pollables.PollStatus;import org.opennms.netmgt.poller.pollables.PollableElement;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.poller.pollables.PollableServiceConfig;import org.opennms.netmgt.poller.pollables.PollableVisitor;import org.opennms.netmgt.poller.pollables.PollableVisitorAdaptor;import org.opennms.netmgt.scheduler.Schedule;import org.opennms.netmgt.scheduler.Scheduler;import org.opennms.netmgt.utils.Querier;import org.opennms.netmgt.utils.Updater;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;public final class Poller implements PausableFiber {    private final static Poller m_singleton = new Poller();    private int m_status = START_PENDING;    private boolean m_initialized = false;    private Map m_svcNameToId = new HashMap();    private Map m_svcIdToName = new HashMap();    private Scheduler m_scheduler = null;;    private PollerEventProcessor m_receiver;    private PollableNetwork m_network = new PollableNetwork(new DefaultPollContext(this));    private QueryManager m_queryMgr = new DefaultQueryManager();    private PollerConfig m_pollerConfig;    private PollOutagesConfig m_pollOutagesConfig;    private EventIpcManager m_eventMgr;    private DbConnectionFactory m_dbConnectionFactory;    public static final String EVENT_SOURCE = "OpenNMS.Poller";    public synchronized void init() {        // get the category logger        Category log = ThreadCategory.getInstance(getClass());                // set the DbConnectionFactory in the QueryManager        m_queryMgr.setDbConnectionFactory(m_dbConnectionFactory);        // create service name to id maps        createServiceMaps();        // serviceUnresponsive behavior enabled/disabled?        log.debug("init: serviceUnresponsive behavior: " + (getPollerConfig().serviceUnresponsiveEnabled() ? "enabled" : "disabled"));        createScheduler();                try {            log.debug("init: Closing outages for unmanaged services");                        closeOutagesForUnmanagedServices();        } catch (Exception e) {            log.error("init: Failed to close ouates for unmanage services", e);        }                // Schedule the interfaces currently in the database        //        try {            log.debug("start: Scheduling existing interfaces");            scheduleExistingServices();        } catch (Exception sqlE) {            log.error("start: Failed to schedule existing interfaces", sqlE);        }        // Create an event receiver. The receiver will        // receive events, process them, creates network        // interfaces, and schedulers them.        //        try {            log.debug("start: Creating event broadcast event processor");            m_receiver = new PollerEventProcessor(this);        } catch (Throwable t) {            log.fatal("start: Failed to initialized the broadcast event receiver", t);            throw new UndeclaredThrowableException(t);        }        m_initialized = true;    }    /**     *      */    private void closeOutagesForUnmanagedServices() {        Timestamp closeTime = new Timestamp((new java.util.Date()).getTime());        final String DB_CLOSE_OUTAGES_FOR_UNMANAGED_SERVICES = "UPDATE outages set ifregainedservice = ? where outageid in (select outages.outageid from outages, ifservices where ((outages.nodeid = ifservices.nodeid) AND (outages.ipaddr = ifservices.ipaddr) AND (outages.serviceid = ifservices.serviceid) AND ((ifservices.status = 'D') OR (ifservices.status = 'F') OR (ifservices.status = 'U')) AND (outages.ifregainedservice IS NULL)))";        Updater svcUpdater = new Updater(m_dbConnectionFactory, DB_CLOSE_OUTAGES_FOR_UNMANAGED_SERVICES);        svcUpdater.execute(closeTime);                final String DB_CLOSE_OUTAGES_FOR_UNMANAGED_INTERFACES = "UPDATE outages set ifregainedservice = ? where outageid in (select outages.outageid from outages, ipinterface where ((outages.nodeid = ipinterface.nodeid) AND (outages.ipaddr = ipinterface.ipaddr) AND ((ipinterface.ismanaged = 'F') OR (ipinterface.ismanaged = 'U')) AND (outages.ifregainedservice IS NULL)))";        Updater ifUpdater = new Updater(m_dbConnectionFactory, DB_CLOSE_OUTAGES_FOR_UNMANAGED_INTERFACES);        ifUpdater.execute(closeTime);            }        public void closeOutagesForNode(Date closeDate, int eventId, int nodeId) {        Timestamp closeTime = new Timestamp(closeDate.getTime());        final String DB_CLOSE_OUTAGES_FOR_NODE = "UPDATE outages set ifregainedservice = ?, svcRegainedEventId = ? where outages.nodeId = ? AND (outages.ifregainedservice IS NULL)";        Updater svcUpdater = new Updater(m_dbConnectionFactory, DB_CLOSE_OUTAGES_FOR_NODE);        svcUpdater.execute(closeTime, new Integer(eventId), new Integer(nodeId));    }        public void closeOutagesForInterface(Date closeDate, int eventId, int nodeId, String ipAddr) {        Timestamp closeTime = new Timestamp(closeDate.getTime());        final String DB_CLOSE_OUTAGES_FOR_IFACE = "UPDATE outages set ifregainedservice = ?, svcRegainedEventId = ? where outages.nodeId = ? AND outages.ipAddr = ? AND (outages.ifregainedservice IS NULL)";        Updater svcUpdater = new Updater(m_dbConnectionFactory, DB_CLOSE_OUTAGES_FOR_IFACE);        svcUpdater.execute(closeTime, new Integer(eventId), new Integer(nodeId), ipAddr);    }        public void closeOutagesForService(Date closeDate, int eventId, int nodeId, String ipAddr, String serviceName) {        Timestamp closeTime = new Timestamp(closeDate.getTime());        final String DB_CLOSE_OUTAGES_FOR_SERVICE = "UPDATE outages set ifregainedservice = ?, svcRegainedEventId = ? where outageid in (select outages.outageid from outages, service where outages.nodeid = ? AND outages.ipaddr = ? AND outages.serviceid = service.serviceId AND service.servicename = ? AND outages.ifregainedservice IS NULL)";        Updater svcUpdater = new Updater(m_dbConnectionFactory, DB_CLOSE_OUTAGES_FOR_SERVICE);        svcUpdater.execute(closeTime, new Integer(eventId), new Integer(nodeId), ipAddr, serviceName);    }    private void createScheduler() {        Category log = ThreadCategory.getInstance(getClass());        // Create a scheduler        //        try {            log.debug("init: Creating poller scheduler");            m_scheduler = new Scheduler("Poller", getPollerConfig().getThreads());        } catch (RuntimeException e) {            log.fatal("init: Failed to create poller scheduler", e);            throw e;        }    }    /**     *      */    private void createServiceMaps() {        // load the serviceId to serviceName tables        getQueryMgr().buildServiceNameToIdMaps(m_svcNameToId, m_svcIdToName);    }    public synchronized void start() {        m_status = STARTING;        // get the category logger        Category log = ThreadCategory.getInstance(getClass());        // start the scheduler        //        try {            if (log.isDebugEnabled())                log.debug("start: Starting poller scheduler");            m_scheduler.start();        } catch (RuntimeException e) {            if (log.isEnabledFor(Priority.FATAL))                log.fatal("start: Failed to start scheduler", e);            throw e;        }        // Set the status of the service as running.        //        m_status = RUNNING;        if (log.isDebugEnabled())            log.debug("start: Poller running");    }    public synchronized void stop() {        m_status = STOP_PENDING;        m_scheduler.stop();        m_receiver.close();        Iterator iter = getServiceMonitors().values().iterator();        while (iter.hasNext()) {            ServiceMonitor sm = (ServiceMonitor) iter.next();            sm.release();        }        m_scheduler = null;        m_status = STOPPED;        Category log = ThreadCategory.getInstance(getClass());        if (log.isDebugEnabled())            log.debug("stop: Poller stopped");    }    public synchronized void pause() {        if (m_status != RUNNING)            return;        m_status = PAUSE_PENDING;        m_scheduler.pause();        m_status = PAUSED;        Category log = ThreadCategory.getInstance(getClass());        if (log.isDebugEnabled())            log.debug("pause: Poller paused");    }    public synchronized void resume() {        if (m_status != PAUSED)            return;        m_status = RESUME_PENDING;        m_scheduler.resume();        m_status = RUNNING;        Category log = ThreadCategory.getInstance(getClass());        if (log.isDebugEnabled())            log.debug("resume: Poller resumed");    }    public synchronized int getStatus() {        return m_status;    }    public String getName() {        return "OpenNMS.Poller";    }    public static Poller getInstance() {        return m_singleton;    }    public Scheduler getScheduler() {        return m_scheduler;    }    public ServiceMonitor getServiceMonitor(String svcName) {        return getPollerConfig().getServiceMonitor(svcName);    }    public PollableNetwork getNetwork() {        return m_network;    }    static private class InitCause extends PollableVisitorAdaptor {        private PollEvent m_cause;        public void setCause(PollEvent cause) {            m_cause = cause;        }                public void visitElement(PollableElement element) {            if (!element.hasOpenOutage())                element.setCause(m_cause);        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -