📄 pollereventprocessor.java
字号:
// Extract node label and transaction No. from the event parms long txNo = -1L; 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(); // get the external transaction number if (parmName.equals(EventConstants.PARM_TRANSACTION_NO)) { String temp = parmContent; if (log.isDebugEnabled()) log.debug("nodeDeletedHandler: parmName: " + parmName + " /parmContent: " + parmContent); try { txNo = Long.valueOf(temp).longValue(); } catch (NumberFormatException nfe) { log.warn("nodeDeletedHandler: Parameter " + EventConstants.PARM_TRANSACTION_NO + " cannot be non-numberic", nfe); txNo = -1; } } } } Date closeDate; try { closeDate = EventConstants.parseToDate(event.getTime()); } catch (ParseException e) { closeDate = new Date(); } getPoller().closeOutagesForNode(closeDate, event.getDbid(), nodeId); PollableNode node = getNetwork().getNode(nodeId); if (node == null) { log.error("Nodeid " + nodeId + " does not exist in pollable node map, unable to delete node."); if (isXmlRPCEnabled()) { int status = EventConstants.XMLRPC_NOTIFY_FAILURE; XmlrpcUtil.createAndSendXmlrpcNotificationEvent(txNo, sourceUei, "Node does not exist in pollable node map.", status, "OpenNMS.Poller"); } return; } node.delete(); } /** * */ private void interfaceDeletedHandler(Event event) { Category log = ThreadCategory.getInstance(getClass()); int nodeId = (int) event.getNodeid(); String sourceUei = event.getUei(); String ipAddr = event.getInterface(); // Extract node label and transaction No. from the event parms long txNo = -1L; 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(); // get the external transaction number if (parmName.equals(EventConstants.PARM_TRANSACTION_NO)) { String temp = parmContent; if (log.isDebugEnabled()) log.debug("interfaceDeletedHandlerHandler: parmName: " + parmName + " /parmContent: " + parmContent); try { txNo = Long.valueOf(temp).longValue(); } catch (NumberFormatException nfe) { log.warn("interfaceDeletedHandlerHandler: Parameter " + EventConstants.PARM_TRANSACTION_NO + " cannot be non-numberic", nfe); txNo = -1; } } } } InetAddress addr; try { addr = InetAddress.getByName(ipAddr); } catch (UnknownHostException e) { log.error("interfaceDeletedHandler: Could not convert interface "+event.getInterface()+" to InetAddress", e); return; } Date closeDate; try { closeDate = EventConstants.parseToDate(event.getTime()); } catch (ParseException e) { closeDate = new Date(); } getPoller().closeOutagesForInterface(closeDate, event.getDbid(), nodeId, ipAddr); PollableInterface iface = getNetwork().getInterface(nodeId, addr); if (iface == null) { log.error("Interface " + nodeId + "/" + event.getInterface() + " does not exist in pollable node map, unable to delete node."); if (isXmlRPCEnabled()) { int status = EventConstants.XMLRPC_NOTIFY_FAILURE; XmlrpcUtil.createAndSendXmlrpcNotificationEvent(txNo, sourceUei, "Interface does not exist in pollable node map.", status, "OpenNMS.Poller"); } return; } iface.delete(); } /** * <p> * This method remove a deleted service from the pollable service list of * the specified interface, so that it will not be scheduled by the poller. * </p> */ private void serviceDeletedHandler(Event event) { Category log = ThreadCategory.getInstance(getClass()); int nodeId = (int) event.getNodeid(); String ipAddr = event.getInterface(); String service = event.getService(); InetAddress addr; try { addr = InetAddress.getByName(ipAddr); } catch (UnknownHostException e) { log.error("serviceDeletedHandler: Could not convert "+ipAddr+" to an InetAddress", e); return; } Date closeDate; try { closeDate = EventConstants.parseToDate(event.getTime()); } catch (ParseException e) { closeDate = new Date(); } getPoller().closeOutagesForService(closeDate, event.getDbid(), nodeId, ipAddr, service); PollableService svc = getNetwork().getService(nodeId, addr, service); if (svc == null) { log.error("Interface " + nodeId + "/" + event.getInterface() + " does not exist in pollable node map, unable to delete node."); return; } svc.delete(); } /** * Constructor * * @param pollableServices * List of all the PollableService objects scheduled for polling */ PollerEventProcessor(Poller poller) { m_poller = poller; createMessageSelectorAndSubscribe(); Category log = ThreadCategory.getInstance(getClass()); if (log.isDebugEnabled()) log.debug("Subscribed to eventd"); } /** * Unsubscribe from eventd */ public void close() { getEventManager().removeEventListener(this); } /** * @return */ private EventIpcManager getEventManager() { return getPoller().getEventManager(); } /** * This method is invoked by the EventIpcManager when a new event is * available for processing. Each message is examined for its Universal * Event Identifier and the appropriate action is taking based on each UEI. * * @param event * The event */ public void onEvent(Event event) { if (event == null) return; Category log = ThreadCategory.getInstance(getClass()); // print out the uei // if (log.isDebugEnabled()) { log.debug("PollerEventProcessor: received event, uei = " + event.getUei()); } if(event.getUei().equals(EventConstants.SCHEDOUTAGES_CHANGED_EVENT_UEI)) { log.info("Reloading poller config factory and polloutages config factory"); scheduledOutagesChangeHandler(log); } else if(!event.hasNodeid()) { // For all other events, if the event doesn't have a nodeId it can't be processed. log.info("PollerEventProcessor: 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("PollerEventProcessor: no interface found, discarding event"); } else { nodeGainedServiceHandler(event); } } else if (event.getUei().equals(EventConstants.RESUME_POLLING_SERVICE_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log.info("PollerEventProcessor: no interface found, cannot resume polling service, discarding event"); } else { nodeGainedServiceHandler(event); } } else if (event.getUei().equals(EventConstants.SUSPEND_POLLING_SERVICE_EVENT_UEI)) { // If there is no interface then it cannot be processed // if (event.getInterface() == null || event.getInterface().length() == 0) { log.info("PollerEventProcessor: no interface found, cannot suspend polling service, discarding event"); } else { nodeRemovePollableServiceHandler(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("PollerEventProcessor: 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)) { if (event.getNodeid() < 0) { log.info("PollerEventProcessor: no node or interface found, discarding event"); } // 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.getNodeid() < 0 || event.getInterface() == null || event.getInterface().length() == 0) { log.info("PollerEventProcessor: invalid nodeid or 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.getNodeid() < 0) || (event.getInterface() == null) || (event.getInterface().length() == 0) || (event.getService() == null)) { log.info("PollerEventProcessor: invalid nodeid or no nodeinterface " + "or service found, discarding event"); } else { serviceDeletedHandler(event); } } // end single event proces } // end onEvent() private void scheduledOutagesChangeHandler(Category log) { try { getPollerConfig().update(); getPoller().getPollOutagesConfig().update(); } catch (Exception e) { e.printStackTrace(); log.error("Failed to reload PollerConfigFactory because "+e.getMessage(), e); } getPoller().refreshServicePackages(); } /** * Return an id for this event listener */ public String getName() { return "Poller:PollerEventProcessor"; } /** * @return */ private Poller getPoller() { return m_poller; } /** * @return */ private PollerConfig getPollerConfig() { return getPoller().getPollerConfig(); } private PollableNetwork getNetwork() { return getPoller().getNetwork(); } /** * @return Returns the xmlrpc. */ private boolean isXmlRPCEnabled() { return getPollerConfig().getXmlrpc(); }} // end class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -