/** {@inheritDoc} */ @Override public DeliveryOptions getDeliveryOptions(String reportId, String userId) { DeliveryOptions options = new DeliveryOptions(); options.setFormat(ReportFormat.HTML); options.setPersist(true); options.setSendMail(false); UserManager userFactory = UserFactory.getInstance(); try { String emailAddress = userFactory.getEmail(userId); if (emailAddress != null) { options.setMailTo(emailAddress); } } catch (MarshalException e) { log.error("marshal exception trying to set destination email address", e); } catch (ValidationException e) { log.error("validation exception trying to set destination email address", e); } catch (IOException e) { log.error("IO exception trying to set destination email address", e); } catch (NullPointerException e) { // See NMS-5111 for more details. log.warn("the user " + userId + " does not have any email configured."); } options.setInstanceId(reportId + " " + userId); return options; }
private void mailReport(DeliveryOptions deliveryOptions, ByteArrayOutputStream outputStream) { try { JavaMailer jm = new JavaMailer(); jm.setTo(deliveryOptions.getMailTo()); jm.setSubject(deliveryOptions.getInstanceId()); jm.setMessageText("Here is your report from the OpenNMS report service."); jm.setInputStream(new ByteArrayInputStream(outputStream.toByteArray())); switch (deliveryOptions.getFormat()) { case HTML: jm.setInputStreamName(deliveryOptions.getInstanceId() + ".htm"); jm.setInputStreamContentType("text/html"); break; case PDF: jm.setInputStreamName(deliveryOptions.getInstanceId() + ".pdf"); jm.setInputStreamContentType("application/pdf"); break; case SVG: jm.setInputStreamName(deliveryOptions.getInstanceId() + ".pdf"); jm.setInputStreamContentType("application/pdf"); break; default: jm.setInputStreamName(deliveryOptions.getInstanceId() + ".htm"); jm.setInputStreamContentType("text/html"); } jm.mailSend(); } catch (JavaMailerException e) { log.error("Caught JavaMailer exception sending report", e); } }
/** {@inheritDoc} */ @Override public void runAndRender( ReportParameters parameters, ReportMode mode, OutputStream outputStream) { // TODO remove this debug code Map<String, Object> reportParms = parameters.getReportParms(mode); for (String key : reportParms.keySet()) { String value; if (reportParms.get(key) == null) { value = "NULL"; } else { value = reportParms.get(key).toString(); } log.debug("param " + key + " set " + value); } try { getReportService(parameters.getReportId()) .runAndRender( parameters.getReportParms(mode), parameters.getReportId(), parameters.getFormat(), outputStream); } catch (ReportException reportException) { log.error("failed to run or render report: " + parameters.getReportId(), reportException); } }
/** {@inheritDoc} */ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); ThreadCategory.setPrefix(MapsConstants.LOG4J_CATEGORY); log = ThreadCategory.getInstance(this.getClass()); try { String user = request.getRemoteUser(); if (log.isDebugEnabled()) log.debug("MapStartUp for user:"******"Error in map's startup", e); bw.write(ResponseAssembler.getMapErrorResponse(MapsConstants.MAPS_STARTUP_ACTION)); } finally { bw.close(); } return null; }
/** {@inheritDoc} */ public void render( String reportId, String location, ReportFormat format, OutputStream outputStream) { try { getReportService(reportId).render(reportId, location, format, outputStream); } catch (ReportException e) { log.error("failed to render report", e); } }
/** {@inheritDoc} */ public ReportParameters getParameters(String reportId) { try { return getReportService(reportId).getParameters(reportId); } catch (ReportException e) { log.error("Report Exception when retrieving report parameters", e); } return null; }
/** {@inheritDoc} */ @Override public void run( ReportParameters parameters, ReportMode mode, DeliveryOptions deliveryOptions, String reportId) { if (!deliveryOptions.getPersist()) { ByteArrayOutputStream out = new ByteArrayOutputStream(); BufferedOutputStream bout = new BufferedOutputStream(out); try { getReportService(reportId) .runAndRender( parameters.getReportParms(mode), reportId, deliveryOptions.getFormat(), bout); } catch (ReportException reportException) { log.error("failed to run or render report: " + reportId, reportException); } mailReport(deliveryOptions, out); } else { String outputPath; try { outputPath = getReportService(reportId).run(parameters.getReportParms(mode), reportId); ReportCatalogEntry catalogEntry = new ReportCatalogEntry(); catalogEntry.setReportId(reportId); catalogEntry.setTitle(deliveryOptions.getInstanceId()); catalogEntry.setLocation(outputPath); catalogEntry.setDate(new Date()); m_reportStoreService.save(catalogEntry); if (deliveryOptions.getMailTo().length() != 0) { ByteArrayOutputStream out = new ByteArrayOutputStream(); BufferedOutputStream bout = new BufferedOutputStream(out); getReportService(reportId) .render(reportId, outputPath, deliveryOptions.getFormat(), bout); mailReport(deliveryOptions, out); } } catch (ReportException reportException) { log.error("failed to run or render report: " + reportId, reportException); } } }
/** Reset the user timer. */ public synchronized void resetUserTimer() { // Reset the user timer if (m_userTask != null) return; ThreadCategory log = ThreadCategory.getInstance(getClass()); try { m_timer.schedule((m_userTask = new RTCTimerTask(USERTIMER)), 0, m_userRefreshInterval); if (log.isDebugEnabled()) log.debug("resetUserTimer: " + USERTIMER + " scheduled"); } catch (IllegalStateException isE) { log.error("dataReceived: Illegal State adding new RTCTimerTask", isE); } }
/** {@inheritDoc} */ public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { ThreadCategory.setPrefix(MapsConstants.LOG4J_CATEGORY); log = ThreadCategory.getInstance(this.getClass()); String action = request.getParameter("action"); String elems = request.getParameter("elems"); log.debug("Adding Nodes action:" + action + ", elems=" + elems); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); try { Integer[] nodeids = null; boolean actionfound = false; if (action.equals(MapsConstants.ADDNODES_ACTION)) { log.debug("Adding nodes by id: " + elems); actionfound = true; String[] snodeids = elems.split(","); nodeids = new Integer[snodeids.length]; for (int i = 0; i < snodeids.length; i++) { nodeids[i] = new Integer(snodeids[i]); } } if (action.equals(MapsConstants.ADDNODES_BY_CATEGORY_ACTION)) { log.debug("Adding nodes by category: " + elems); actionfound = true; String categoryName = elems; CategoryFactory.init(); CatFactory cf = CategoryFactory.getInstance(); cf.getReadLock().lock(); try { final String rule = cf.getEffectiveRule(categoryName); final List<InetAddress> nodeIPs = FilterDaoFactory.getInstance().getIPAddressList(rule); LogUtils.debugf(this, "ips found: %s", nodeIPs.toString()); nodeids = new Integer[nodeIPs.size()]; for (int i = 0; i < nodeIPs.size(); i++) { final InetAddress nodeIp = nodeIPs.get(i); final List<Integer> ids = NetworkElementFactory.getInstance(getServletContext()) .getNodeIdsWithIpLike(InetAddressUtils.str(nodeIp)); LogUtils.debugf(this, "Ids by ipaddress %s: %s", nodeIp, ids.toString()); nodeids[i] = ids.get(0); } } finally { cf.getReadLock().unlock(); } } if (action.equals(MapsConstants.ADDNODES_BY_LABEL_ACTION)) { log.debug("Adding nodes by label: " + elems); actionfound = true; List<OnmsNode> nodes = NetworkElementFactory.getInstance(getServletContext()).getAllNodes(); nodeids = new Integer[nodes.size()]; for (int i = 0; i < nodes.size(); i++) { nodeids[i] = nodes.get(i).getId(); } } if (action.equals(MapsConstants.ADDRANGE_ACTION)) { log.debug("Adding nodes by range: " + elems); actionfound = true; nodeids = (Integer[]) NetworkElementFactory.getInstance(getServletContext()) .getNodeIdsWithIpLike(elems) .toArray(new Integer[0]); } if (action.equals(MapsConstants.ADDNODES_NEIG_ACTION)) { log.debug("Adding nodes neighbor of:" + elems); actionfound = true; nodeids = (Integer[]) NetworkElementFactory.getInstance(getServletContext()) .getLinkedNodeIdOnNode(WebSecurityUtils.safeParseInt(elems)) .toArray(new Integer[0]); } if (action.equals(MapsConstants.ADDNODES_WITH_NEIG_ACTION)) { log.debug("Adding nodes with neighbor of:" + elems); actionfound = true; Set<Integer> linkednodeids = NetworkElementFactory.getInstance(getServletContext()) .getLinkedNodeIdOnNode(WebSecurityUtils.safeParseInt(elems)); linkednodeids.add(new Integer(elems)); nodeids = linkednodeids.toArray(new Integer[linkednodeids.size()]); } VMap map = manager.openMap(); if (log.isDebugEnabled()) log.debug("Got map from manager " + map); List<VElement> velems = new ArrayList<VElement>(); // response for addElement if (actionfound) { log.debug("Before Checking map contains elems"); for (int i = 0; i < nodeids.length; i++) { int elemId = nodeids[i].intValue(); if (map.containsElement(elemId, MapsConstants.NODE_TYPE)) { log.debug( "Action: " + action + " . Map Contains Element: " + elemId + MapsConstants.NODE_TYPE); continue; } velems.add(manager.newElement(map.getId(), elemId, MapsConstants.NODE_TYPE)); } // end for // get links and add elements to map map = manager.addElements(map, velems); log.debug("After getting/adding links"); bw.write(ResponseAssembler.getAddElementResponse(null, velems, map.getLinks())); } } catch (Throwable e) { log.error("Error while adding nodes for action: " + action, e); bw.write(ResponseAssembler.getMapErrorResponse(action)); } finally { bw.close(); } return null; }
/** The execution context. */ @Override public void run() { // get the context m_context = Thread.currentThread(); // Get a log instance ThreadCategory.setPrefix(m_logPrefix); ThreadCategory log = ThreadCategory.getInstance(getClass()); if (m_stop) { log.debug("Stop flag set before thread started, exiting"); return; } else log.debug("Thread context started"); // allocate a buffer final int length = 0xffff; final byte[] buffer = new byte[length]; // set an SO timeout to make sure we don't block forever // if a socket is closed. try { log.debug("Setting socket timeout to " + SOCKET_TIMEOUT + "ms"); m_dgSock.setSoTimeout(SOCKET_TIMEOUT); } catch (SocketException e) { log.warn("An I/O error occured while trying to set the socket timeout", e); } // Increase the receive buffer for the socket try { log.debug("Setting receive buffer size to " + length); m_dgSock.setReceiveBufferSize(length); } catch (SocketException e) { log.info("Failed to set the receive buffer to " + length, e); } // set to avoid numerous tracing message boolean ioInterrupted = false; // now start processing incoming requests while (!m_stop) { if (m_context.isInterrupted()) { log.debug("Thread context interrupted"); break; } try { if (!ioInterrupted) { log.debug("Waiting on a datagram to arrive"); } DatagramPacket pkt = new DatagramPacket(buffer, length); m_dgSock.receive(pkt); // SyslogConnection *Must* copy packet data and InetAddress as DatagramPacket is a mutable // type WaterfallExecutor.waterfall( m_executors, new SyslogConnection( pkt, m_matchPattern, m_hostGroup, m_messageGroup, m_UeiList, m_HideMessages, m_discardUei)); ioInterrupted = false; // reset the flag } catch (SocketTimeoutException e) { ioInterrupted = true; continue; } catch (InterruptedIOException e) { ioInterrupted = true; continue; } catch (ExecutionException e) { log.error("Task execution failed in " + this.getClass().getSimpleName(), e); break; } catch (InterruptedException e) { log.error("Task interrupted in " + this.getClass().getSimpleName(), e); break; } catch (IOException e) { log.error("An I/O exception occured on the datagram receipt port, exiting", e); break; } } // end while status OK log.debug("Thread context exiting"); }
/** * Check the timer tasks. Reset any of the timer tasks if they need to be reset (indicated by * their being set to null on timer task completion). If the events counter has exceeded * maxEventsBeforeResend, send data out and reset timers */ public synchronized void checkTimerTasksOnEventReceipt() { ThreadCategory log = ThreadCategory.getInstance(getClass()); if (log.isDebugEnabled()) log.debug( "checkTimerTasksOnEventReceipt: Checking if timer tasks need to be reset or data needs to be sent out"); // cancel user timer boolean ret = m_userTask.cancel(); if (log.isDebugEnabled()) log.debug("checkTimerTasksOnEventReceipt: " + USERTIMER + " cancelled: " + ret); // Check the counter to see if timers need to be started afresh if (m_counter == -1) { m_counter = 0; // // set timers // // set the low threshold timer task if (m_lowTtask == null) { try { m_timer.schedule((m_lowTtask = new RTCTimerTask(LOWT_TASK)), m_lowThresholdInterval); if (log.isDebugEnabled()) log.debug("checkTimerTasksOnEventReceipt: " + LOWT_TASK + " scheduled"); } catch (IllegalStateException isE) { log.error("checkTimerTasksOnEventReceipt: Illegal State adding new RTCTimerTask", isE); } } // set the high threshold timer task only if currently null if (m_highTtask == null) { try { m_timer.schedule((m_highTtask = new RTCTimerTask(HIGHT_TASK)), m_highThresholdInterval); if (log.isDebugEnabled()) log.debug("checkTimerTasksOnEventReceipt: " + HIGHT_TASK + " scheduled"); } catch (IllegalStateException isE) { log.error("checkTimerTasksOnEventReceipt: Illegal State adding new RTCTimerTask", isE); } } } if (MAX_EVENTS_BEFORE_RESEND > 0 && m_counter >= MAX_EVENTS_BEFORE_RESEND) { if (log.isDebugEnabled()) log.debug( "checkTimerTasksOnEventReceipt: max events before resend limit reached, resetting timers"); // send the category information out and reset all timers if (m_lowTtask != null) { ret = m_lowTtask.cancel(); if (log.isDebugEnabled()) log.debug("checkTimerTasksOnEventReceipt: " + LOWT_TASK + " cancelled: " + ret); m_lowTtask = null; } if (m_highTtask != null) { ret = m_highTtask.cancel(); if (log.isDebugEnabled()) log.debug("checkTimerTasksOnEventReceipt: " + HIGHT_TASK + " cancelled: " + ret); m_highTtask = null; } if (log.isDebugEnabled()) log.debug( "checkTimerTasksOnEventReceipt: max events before resend limit reached, sending data to listeners"); m_dataSender.notifyToSend(); if (log.isDebugEnabled()) log.debug( "checkTimerTasksOnEventReceipt: max events before resend limit reached, datasender notified to send data"); m_counter = -1; } else if (m_counter != 0) { // reset the low threshold timer since getting here means // we got an event before the low threshold timer // went off if (m_lowTtask != null) { ret = m_lowTtask.cancel(); if (log.isDebugEnabled()) log.debug("checkTimerTasksOnEventReceipt: " + LOWT_TASK + " cancelled: " + ret); m_lowTtask = null; } try { m_timer.schedule((m_lowTtask = new RTCTimerTask(LOWT_TASK)), m_lowThresholdInterval); if (log.isDebugEnabled()) log.debug("checkTimerTasksOnEventReceipt: " + LOWT_TASK + " scheduled"); } catch (IllegalStateException isE) { log.error("checkTimerTasksOnEventReceipt: Illegal State adding new RTCTimerTask", isE); } } }
/** * This method maps OpenNMS alarm to an OSS/J alarms and adds additional information * * @param _openNMSalarm data to use to populate the OSS/J alarm * @param alarmValueSpecification AlarmValue object to be populated - Invariant (Specifcation) * values should be already populated * @return the _av OSS/J AlarmValue populated with opennms data * @throws java.lang.IllegalArgumentException if any. * @throws javax.oss.UnsupportedAttributeException if any. */ public AlarmValue populateOssjAlarmFromOpenNMSAlarm( AlarmValue alarmValueSpecification, OnmsAlarm _openNMSalarm) throws IllegalArgumentException, UnsupportedAttributeException { ThreadCategory log = getLog(); String logheader = "\t\t" + this.getClass().getSimpleName() + "populateOssjAlarmFromOpenNMSAlarm():"; // Node node = null; OnmsNode node = null; // Asset asset = null; OnmsAssetRecord asset = null; boolean isQoSDrxAlarm = false; // true if alarm is received from Qosdrx if (log.isDebugEnabled()) log.debug(logheader + ": Populating alarm"); // test to see if opennms alarm already has type and instance information set. If yes then it // has most likely // come from Qosdrx. if ((_openNMSalarm.getManagedObjectInstance() != null) && (_openNMSalarm.getManagedObjectType() != null) && (!_openNMSalarm.getManagedObjectInstance().equals("")) && (!_openNMSalarm.getManagedObjectType().equals(""))) { isQoSDrxAlarm = true; if (log.isDebugEnabled()) log.debug( logheader + ": isQoSDrxAlarm TRUE - because OpenNMS alarm has ManagedObjectInstance and ManagedObjectType"); } else { isQoSDrxAlarm = false; if (log.isDebugEnabled()) log.debug( logheader + ": isQoSDrxAlarm FALSE - because OpenNMS alarm NOT POPULATED ManagedObjectInstance and ManagedObjectType"); } try { // If the alarm has both an acknowledge time and an acknowledge user // then the alarm has been acknowledged. Set the corrsponding parameters // in the OSS/J alarm if ((null != _openNMSalarm.getAlarmAckTime()) && (null != _openNMSalarm.getAlarmAckUser())) { alarmValueSpecification.setAckUserId(_openNMSalarm.getAlarmAckUser()); // OnmsAlarm can contain java.sql.Timestamp - convert to Date alarmValueSpecification.setAckTime(new Date(_openNMSalarm.getAlarmAckTime().getTime())); alarmValueSpecification.setAlarmAckState(AlarmAckState.ACKNOWLEDGED); } else { alarmValueSpecification.setAlarmAckState(AlarmAckState.UNACKNOWLEDGED); } // if the alarm is cleared, then set the alarm cleared time // to that of the lasteventtime as this must be the time // the clear occured. if (_openNMSalarm.getSeverity() == OnmsSeverity.CLEARED) { // OnmsAlarm can contain java.sql.Timestamp - convert to Date alarmValueSpecification.setAlarmClearedTime( new Date(_openNMSalarm.getLastEventTime().getTime())); } else { alarmValueSpecification.setAlarmClearedTime(null); } // Set the alarmRaisedTime to the FirstEventTime of the OpenNMS // alarm. Set the alarm changed time to the last event time. // OnmsAlarm can contain java.sql.Timestamp - convert to Date if (null != _openNMSalarm.getFirstEventTime()) { alarmValueSpecification.setAlarmRaisedTime( new Date(_openNMSalarm.getFirstEventTime().getTime())); } if (null != _openNMSalarm.getLastEventTime()) { alarmValueSpecification.setAlarmChangedTime( new Date(_openNMSalarm.getLastEventTime().getTime())); } } catch (Throwable e) { log.error(logheader + ": Problem getting ACK time information", e); } Matcher matcher = null; String _uei_no_html = "NOT_SET"; try { String uei = _openNMSalarm.getUei(); if (null != uei) { matcher = p.matcher(uei); _uei_no_html = matcher.replaceAll(" "); // remove any HTML tags from uei } alarmValueSpecification.setAlarmType( (_openNMSalarm.getX733AlarmType() == null) ? javax.oss.fm.monitor.AlarmType.EQUIPMENT_ALARM : _openNMSalarm.getX733AlarmType()); } catch (Throwable e) { log.error(logheader + ": Problem getting X733AlarmType or Uei", e); } // Get some local node information as to where the alarm came from // This includes, what type of managed element the node is // and what its node id and label are.*/ // String mftr = "NOT_SET"; // FIXME: Not read // String modelNo = "NOT_SET"; // FIXME: Not read // String assetserno = "NOT_SET"; // FIXME: Not read // String nodelabel = "NOT_SET"; // FIXME: Not read // String alarmIP = "NOT_SET"; // FIXME: Not read String managedObjectType = "NOT_SET"; String managedObjectInstance = "NOT_SET"; String assetManagedObjectType = "NOT_SET"; String assetManagedObjectInstance = "NOT_SET"; String assetDescription = "NOT_SET"; String assetAddress2 = "NOT_SET"; if (!isQoSDrxAlarm) { // if is locally generated alarm try { // some opennms alarms don't have node information // set default values if no node information present if (_openNMSalarm.getNode() != null) { node = ossDao.findNodeByID(_openNMSalarm.getNode().getId()); asset = node.getAssetRecord(); // alarmIP = _openNMSalarm.getIpAddr(); // Not read // if (node != null) { // nodelabel = node.getLabel(); // Not read // } if (asset != null) { // if (asset.getManufacturer()!= null) mftr = asset.getManufacturer(); // Not read // if (asset.getModelNumber()!= null) modelNo = asset.getModelNumber(); // Not read // if (asset.getSerialNumber()!= null) assetserno = asset.getSerialNumber(); // Not // read if (asset.getDescription() != null) assetDescription = asset.getDescription(); // TODO was used for managed object class as is 128 char // long if (asset.getAddress2() != null) assetAddress2 = asset.getAddress2(); // TODO was used for managed object instance - as is 256 char // long string if (asset.getManagedObjectInstance() != null) assetManagedObjectInstance = asset.getManagedObjectInstance(); if (asset.getManagedObjectType() != null) assetManagedObjectType = asset.getManagedObjectType(); } managedObjectInstance = assetManagedObjectInstance; managedObjectType = assetManagedObjectType; if (log.isDebugEnabled()) log.debug( logheader + ": isQoSDrxAlarm=FALSE OpenNMS type and instance not set. Using from Node Asset record: ManagedObjectInstance: " + managedObjectInstance + " ManagedObjectType:" + managedObjectType); } } catch (Throwable ex) { log.error(logheader + ": Problem getting node and asset information", ex); } } else { // is a received alarm try { managedObjectInstance = _openNMSalarm.getManagedObjectInstance(); managedObjectType = _openNMSalarm.getManagedObjectType(); if (log.isDebugEnabled()) log.debug( logheader + ": isQoSDrxAlarm=TRUE OpenNMS type and instance set. Using from OnmsAlarm: ManagedObjectInstance: " + managedObjectInstance + " ManagedObjectType:" + managedObjectType); } catch (Throwable ex) { log.error(logheader + ": Problem managedObjectInstance or managedObjectType", ex); } } alarmValueSpecification.setManagedObjectClass(managedObjectType); if (log.isDebugEnabled()) log.debug(logheader + ": _av.setManagedObjectClass set to: " + managedObjectType); alarmValueSpecification.setManagedObjectInstance(managedObjectInstance); if (log.isDebugEnabled()) log.debug(logheader + ": _av.setManagedObjectInstance set to: " + managedObjectInstance); // set severity and probable cause try { alarmValueSpecification.setPerceivedSeverity( onmsSeverityToOssjSeverity(_openNMSalarm.getSeverity())); // alarmValueSpecification.setProbableCause((short)-1); // OSS/J set to -1 then text // contains description alarmValueSpecification.setProbableCause((short) _openNMSalarm.getX733ProbableCause()); } catch (Throwable e) { log.error(logheader + ": Problem getting severity or probable cause: ", e); } if (!isQoSDrxAlarm) { // if is a locally generated alarm try { String _opinstr = _openNMSalarm.getOperInstruct(); if (null != _opinstr) { matcher = p.matcher(_opinstr); _opinstr = matcher.replaceAll(" "); // remove all HTML tags from operator instructions } else _opinstr = "NOT_SET"; alarmValueSpecification.setProposedRepairActions(_opinstr); String _logmsg = _openNMSalarm.getLogMsg(); if (null != _logmsg) { matcher = p.matcher(_logmsg); _logmsg = matcher.replaceAll(" "); // remove all HTML tags from operator instructions } else _logmsg = "NOT_SET"; String _description = _openNMSalarm.getDescription(); if (null != _description) { matcher = p.matcher(_description); _description = matcher.replaceAll(" "); // remove all HTML tags from description } else _description = "NOT_SET"; // using manufacturers own definition of specific problem here ( OSS/J ) alarmValueSpecification.setSpecificProblem(_logmsg); Integer alarmid = _openNMSalarm.getId(); Integer counter = _openNMSalarm.getCounter(); String reductionkey = _openNMSalarm.getReductionKey(); // note some OnmsAlarms can have null nodes - we use a default value of 0 for ID Integer nodeid = 0; String onmsnodelabel = ""; if (_openNMSalarm.getNode() != null) { nodeid = _openNMSalarm.getNode().getId(); onmsnodelabel = _openNMSalarm.getNode().getLabel(); } InetAddress ipaddress = _openNMSalarm.getIpAddr(); String x733AlarmType = _openNMSalarm.getX733AlarmType(); String x733ProbableCause; try { x733ProbableCause = OOSSProbableCause.getStringforEnum((short) _openNMSalarm.getX733ProbableCause()); } catch (Throwable e) { x733ProbableCause = "X733 Probable Cause Incorrectly Defined"; } alarmValueSpecification.setAdditionalText( "<alarmid>" + alarmid + "</alarmid>" + "\n " + "<logmsg>" + _logmsg + "</logmsg>" + "\n " + "<uei>" + _uei_no_html + "<uei>" + "\n " + "<x733AlarmType>" + x733AlarmType + "</x733AlarmType>" + "\n " + "<x733ProbableCause>" + x733ProbableCause + "</x733ProbableCause>" + "\n " + "<counter>" + counter + "</counter>" + "\n " + "<reductionkey>" + reductionkey + "</reductionkey>" + "\n " + "<nodeid>" + nodeid + "</nodeid>" + "\n " + "<nodelabel>" + onmsnodelabel + "</nodelabel>" + "\n " + "<ipaddress>" + InetAddressUtils.toIpAddrString(ipaddress) + "</ipaddress>" + "\n " + "<description>" + _description + "</description>" + "\n " + "<opinstr>" + _opinstr + "</opinstr>" + "\n " + "<asset.managedobjectinstance>" + assetManagedObjectInstance + "</asset.managedobjectinstance>" + "\n " + // TODO - was used for object instance "<asset.managedobjecttype>" + assetManagedObjectType + "</asset.managedobjecttype>" + "\n " + "<asset.address2>" + assetAddress2 + "</asset.address2>" + "\n " + // TODO - was used for object instance "<asset.description>" + assetDescription + "</asset.description>" + "\n"); // TODO - was used for object instancetype } catch (Throwable e) { log.error( logheader + ": Problem setting description, logmessage or operator instrctions: ", e); } } else { // is a received alarm try { String _opinstr = _openNMSalarm.getOperInstruct(); if (null == _opinstr) _opinstr = "NOT_SET"; alarmValueSpecification.setProposedRepairActions(_opinstr); String _logmsg = _openNMSalarm.getLogMsg(); if (null == _logmsg) _logmsg = "NOT_SET"; // using manufacturers own definition of specific problem here ( OSS/J ) alarmValueSpecification.setSpecificProblem(_logmsg); String _description = _openNMSalarm.getDescription(); if (null == _description) _description = "NOT_SET"; alarmValueSpecification.setAdditionalText(_description); } catch (Throwable e) { log.error( logheader + ": Problem setting description, logmessage or operator instrctions: ", e); } } // TODO replacement method to populate the alarm key try { // populate alarm key // TODO was AlarmKey ak = new OOSSAlarmKey(Integer.toString(_openNMSalarm.getId())); AlarmKey ak = alarmValueSpecification.getAlarmKey(); ak.setAlarmPrimaryKey(Integer.toString(_openNMSalarm.getId())); ak.setPrimaryKey(ak.getAlarmPrimaryKey()); } catch (Throwable e) { log.error(logheader + ": Problem setting AlarmKey: ", e); } if (log.isDebugEnabled()) log.debug(logheader + ": Alarm Populated"); return alarmValueSpecification; } // end populateAlarm()
/** * This method maps an OSS/J AlarmValue to OpenNMS alarm * * @param onmsAlarm OnmsAlarm object to be populated * @param alarmValue OSS/J AlarmValue data to use to populate OnmsAlarm * @param almUpdateBehaviour - determines how to treat the node name of the new alarm must be of * value; <code>USE_TYPE_INSTANCE</code> - populate nodeID with node having same asset type * and instance data as alarm or <code>SPECIFY_OUTSTATION</code> - populate nodeID with node * having same nodeLabel as defaultUpdateNodeLabel * @param defaultUpdateNodeLabel name of node to be updated if * almUpdateBehaviour==SPECIFY_OUTSTATION * @return the OnmsAlarm populated with OSS/J NotifyNewAlarmEvent data * @throws java.lang.IllegalArgumentException if any. * @throws javax.oss.UnsupportedAttributeException if any. */ public OnmsAlarm populateOnmsAlarmFromOssjAlarm( OnmsAlarm onmsAlarm, AlarmValue alarmValue, Integer almUpdateBehaviour, String defaultUpdateNodeLabel) throws IllegalArgumentException, UnsupportedAttributeException { ThreadCategory log = getLog(); String logheader = "\t\t" + this.getClass().getSimpleName() + "populateOnmsAlarmFromOssjAlarm():"; try { String ossPrimaryKey = alarmValue.getAlarmKey().getAlarmPrimaryKey(); String applicationDN = alarmValue.getAlarmKey().getApplicationDN(); if (log.isDebugEnabled()) log.debug( logheader + " - AlarmPrimaryKey: " + ossPrimaryKey + " ApplictionDN: " + applicationDN + " alarmRaisedTime: " + alarmValue.getAlarmRaisedTime()); if ((applicationDN == null) || (applicationDN.equals("")) || (ossPrimaryKey == null) || (ossPrimaryKey.equals(""))) { log.error(logheader + " ApplicatioDN or PrimaryKey not set"); } else { if (log.isDebugEnabled()) log.debug( logheader + ": trying to find existing alarm using getCurrentAlarmForUniqueKey"); onmsAlarm = ossDao.getCurrentAlarmForUniqueKey(applicationDN, ossPrimaryKey); if (onmsAlarm != null) { // already an alarm with this unique id - log error log.error(logheader + " Alarm Already exists with this Unique ID"); } else { onmsAlarm = new OnmsAlarm(); onmsAlarm.setUei(ossjAlarmTypeToUei(alarmValue.getAlarmType())); onmsAlarm.setX733AlarmType( (alarmValue.getAlarmType() == null) ? "" : alarmValue.getAlarmType()); onmsAlarm.setX733ProbableCause(alarmValue.getProbableCause()); onmsAlarm.setTTicketState(null); // needed? onmsAlarm.setTTicketId(""); // needed? onmsAlarm.setQosAlarmState(""); onmsAlarm.setSuppressedUser(""); // needed? onmsAlarm.setSuppressedUntil(new Date()); // needed? onmsAlarm.setSuppressedTime(new Date()); // needed? OnmsSeverity onmsseverity; try { onmsseverity = ossjSeveritytoOnmsSeverity(alarmValue.getPerceivedSeverity()); } catch (IllegalArgumentException iae) { log.error( logheader + " problem setting severity used default:'WARNING'. Exception:" + iae); onmsseverity = OnmsSeverity.WARNING; } onmsAlarm.setSeverity(onmsseverity); OnmsServiceType service = new OnmsServiceType(); service.setId(new Integer(-1)); onmsAlarm.setServiceType(new OnmsServiceType()); // needed? onmsAlarm.setReductionKey( ":managedObjectInstance:" + alarmValue.getManagedObjectInstance() + ":managedObjectType:" + alarmValue.getManagedObjectClass() + ":ossPrimaryKey:-" + ossPrimaryKey + ":applicationDN:-" + applicationDN); // must be unique because of alarm_reductionkey_idx onmsAlarm.setOssPrimaryKey(ossPrimaryKey); onmsAlarm.setOperInstruct(alarmValue.getProposedRepairActions()); // defaultvalue if search fails - will update node with ID 1 OnmsNode node = new OnmsNode(); // TODO remove ossDao.makeExtendedOnmsNode(); node.setId(new Integer(1)); // node id cannot be null onmsAlarm.setNode(node); // if (almUpdateBehaviour == null) { log.error( logheader + ": This receiver's alarmUpdateBehaviour is not set: defaulting to update nodeID:1"); } else { if (log.isDebugEnabled()) log.debug( logheader + " alarmUpdateBehaviour:" + almUpdateBehaviour + " " + getAlarmUpdateBehaviourForInt(almUpdateBehaviour)); if (almUpdateBehaviour.equals(SPECIFY_OUTSTATION)) { // this will look for first match of node label to callingAer.getName() // and set node id to this value. if (log.isDebugEnabled()) log.debug( logheader + " SPECIFY_OUTSTATION looking for node with nodelabel:" + defaultUpdateNodeLabel); try { // TODO temp remove ? try { node = ossDao.findNodeByLabel(defaultUpdateNodeLabel); } catch (Throwable ex) { log.error( logheader + " alarmUpdateBehaviour.equals(USE_TYPE_INSTANCE) Problem looking up Node " + ex); } if (node != null) { if (log.isDebugEnabled()) log.debug( logheader + " alarmUpdateBehaviour.equals(SPECIFY_OUTSTATION):" + "NODE FOUND for this name:" + defaultUpdateNodeLabel + " setting node id to NodeLabel:" + node.getLabel() + " NodeID:" + node.getId()); onmsAlarm.setNode( node); // maps into FIRST instance of node with the same managedObjectInstance // and managedObjectType } else { log.error( logheader + " alarmUpdateBehaviour.equals(SPECIFY_OUTSTATION):" + "NODE NOT FOUND for this name:" + defaultUpdateNodeLabel + " setting node id to default NodeID: 1"); node = new OnmsNode(); // TODO remove ossDao.makeExtendedOnmsNode(); node.setId(new Integer(1)); // node id cannot be null onmsAlarm.setNode(node); // } } catch (Throwable ex) { log.error( logheader + " alarmUpdateBehaviour.equals(USE_TYPE_INSTANCE) Problem looking up Node for alarm Set to default nodeID:1" + ex); } } else if (almUpdateBehaviour.equals(USE_TYPE_INSTANCE)) { // this will look for first match of node Managed object Instance and Managed Object // type // and set node id to this value. String managedObjectType = alarmValue.getManagedObjectClass(); String managedObjectInstance = alarmValue.getManagedObjectInstance(); if (log.isDebugEnabled()) log.debug( logheader + " USE_TYPE_INSTANCE looking for node with managedObjectType:" + managedObjectType + " managedObjectInstance:" + managedObjectInstance); try { node = ossDao.findNodeByInstanceAndType(managedObjectInstance, managedObjectType); if (node != null) { if (log.isDebugEnabled()) log.debug( logheader + " alarmUpdateBehaviour.equals(USE_TYPE_INSTANCE):" + "NODE FOUND for this RX Name:" + defaultUpdateNodeLabel + " setting node id to NodeLabel:" + node.getLabel() + " NodeID:" + node.getId()); onmsAlarm.setNode( node); // maps into FIRST instance of node with the same managedObjectInstance // and managedObjectType } else { log.error( logheader + " alarmUpdateBehaviour.equals(USE_TYPE_INSTANCE):" + "NODE NOT FOUND for this managedObjectType:" + managedObjectType + " managedObjectInstance:" + managedObjectInstance + " setting node id to default NodeID: 1"); node = new OnmsNode(); // TODO remove ossDao.makeExtendedOnmsNode(); node.setId(new Integer(1)); // node id cannot be null onmsAlarm.setNode(node); // } } catch (Throwable ex) { log.error( logheader + " alarmUpdateBehaviour.equals(USE_TYPE_INSTANCE) Problem looking up Node for alarm Set to default nodeID:1" + ex); } } else { log.error( logheader + " Invalid value for alarmUpdateBehaviour:" + almUpdateBehaviour + " " + getAlarmUpdateBehaviourForInt(almUpdateBehaviour) + " defaulting to update nodeID:1"); } } onmsAlarm.setMouseOverText(""); // needed? onmsAlarm.setManagedObjectType(alarmValue.getManagedObjectClass()); onmsAlarm.setManagedObjectInstance(alarmValue.getManagedObjectInstance()); onmsAlarm.setLogMsg(alarmValue.getSpecificProblem()); // NOTE - this has no effect here as .setLastEvent nulls value // alarm.setLastEventTime(nnae.getEventTime()); // TODO REMOVED - DO NOT CREATE EVENT WITH HIBERNATE AlarmDAo // OnmsEvent event= new OnmsEvent(); // //event.setId(new Integer(1)); // This is NOT set since unique constraint in // alarms table on Events table // onmsAlarm.setLastEvent(event); onmsAlarm.setIpAddr(InetAddressUtils.getLocalHostAddress()); // needed? onmsAlarm.setId(null); // set null as updating alarm onmsAlarm.setFirstEventTime(alarmValue.getAlarmRaisedTime()); onmsAlarm.setLastEventTime(alarmValue.getAlarmChangedTime()); // TODO removed - do create distpoller with hibernate dao // onmsAlarm.setDistPoller(new OnmsDistPoller("undefined","localhost")); //simple // constructor onmsAlarm.setDistPoller(distPollerDao.get("localhost")); onmsAlarm.setDescription( alarmValue.getAdditionalText()); // TODO need Qosd Not to generate this if remote onmsAlarm.setCounter(new Integer(1)); onmsAlarm.setApplicationDN(applicationDN); onmsAlarm.setAlarmType(new Integer(1)); // set to raise alarm // alarm.setAlarmAckUser(arg0); // alarm.setAlarmAckTime(arg0); if (log.isDebugEnabled()) log.debug(logheader + ": Creating Alarm: "); } } } catch (Throwable e) { log.error(logheader + " Error : ", e); } return onmsAlarm; }