From 3338f148292761825fffd09a73efe8fb4208b412 Mon Sep 17 00:00:00 2001 From: mvrueden Date: Wed, 23 Nov 2016 18:16:13 +0100 Subject: [PATCH 1/2] HZN-936: Only create a transaction when necessary (#1138) * HZN-936: Only create a transaction when necessary * HZN-936: Cleanup * HZN-936: Remove duplicate eventUtil bean * HZN-936: Include component-dao.xml in tests, otherwise an EventUtil implementation is missing * HZN-936: Fix failing test * HZN-936: Expose statistics from the event template cache. * HZN-936: Fix failed tests * HZN-936: Revert some changes and try another approach to make tests happy --- .../org/opennms/netmgt/bsm/daemon/BsmdIT.java | 1 - .../netmgt/eventd/AbstractEventUtil.java | 471 +++-------- .../org/opennms/netmgt/eventd/EventUtil.java | 66 +- .../netmgt/eventd/EventUtilDaoImpl.java | 34 +- .../ExpandableParameterResolverRegistry.java | 66 ++ .../StandardExpandableParameterResolvers.java | 730 ++++++++++++++++++ .../processor/expandable/EventTemplate.java | 137 ++++ .../expandable/ExpandableConstant.java | 61 ++ .../expandable/ExpandableParameter.java | 88 +++ .../ExpandableParameterResolver.java | 47 ++ .../processor/expandable/ExpandableToken.java | 55 ++ .../applicationContext-eventDaemon.xml | 2 - .../opennms/applicationContext-eventUtil.xml | 20 +- .../META-INF/opennms/component-dao.xml | 8 + .../src/main/resources/beanRefContext.xml | 1 - .../netmgt/eventd/EventUtilHibernateIT.java | 1 - .../opennms/netmgt/eventd/EventUtilIT.java | 50 +- .../org/opennms/netmgt/eventd/EventdIT.java | 1 - .../opennms/netmgt/eventd/EventdSpringIT.java | 1 - .../processor/HibernateEventWriterIT.java | 2 - .../netmgt/events/commands/StressCommand.java | 12 + ... => SyslogdBroadcastEventProcessorIT.java} | 6 +- .../ncs/CorrelationRulesITCase.java | 2 - .../ncs/DependencyLoadingRulesIT.java | 1 + .../correlation/ncs/DependencyRulesIT.java | 1 + .../correlation/ncs/EventMappingRulesIT.java | 2 + .../ncs/MonolithicDependencyRulesIT.java | 1 + .../opennms-home/etc/DependencyRules.drl | 0 .../opennms-home/etc/drools-engine.xml | 0 .../opennms-home/etc/jmx-config.xml | 0 ...ava => DefaultTicketerServiceLayerIT.java} | 4 +- .../applicationContext-configOverride.xml | 12 +- .../org/opennms/netmgt/vacuumd/VacuumdIT.java | 1 - .../src/main/filtered/etc/opennms.properties | 4 + .../opennms/applicationContext-mockEventd.xml | 4 +- .../opennms/applicationContext-notifd.xml | 2 - .../netmgt/mock/EventUtilJdbcImpl.java | 43 +- 37 files changed, 1451 insertions(+), 486 deletions(-) create mode 100644 features/events/daemon/src/main/java/org/opennms/netmgt/eventd/ExpandableParameterResolverRegistry.java create mode 100644 features/events/daemon/src/main/java/org/opennms/netmgt/eventd/StandardExpandableParameterResolvers.java create mode 100644 features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/EventTemplate.java create mode 100644 features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableConstant.java create mode 100644 features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameter.java create mode 100644 features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameterResolver.java create mode 100644 features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableToken.java create mode 100644 features/events/daemon/src/main/resources/META-INF/opennms/component-dao.xml rename features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/{SyslogdBroadcastEventProcessorTest.java => SyslogdBroadcastEventProcessorIT.java} (99%) rename features/ncs/ncs-drools/src/test/{ => resources}/opennms-home/etc/DependencyRules.drl (100%) rename features/ncs/ncs-drools/src/test/{ => resources}/opennms-home/etc/drools-engine.xml (100%) rename features/ncs/ncs-drools/src/test/{ => resources}/opennms-home/etc/jmx-config.xml (100%) rename features/ticketing/daemon/src/test/java/org/opennms/netmgt/ticketd/{DefaultTicketerServiceLayerIntegrationTest.java => DefaultTicketerServiceLayerIT.java} (97%) diff --git a/features/bsm/daemon/src/test/java/org/opennms/netmgt/bsm/daemon/BsmdIT.java b/features/bsm/daemon/src/test/java/org/opennms/netmgt/bsm/daemon/BsmdIT.java index 871bfba8ed97..ea9b4a170f34 100644 --- a/features/bsm/daemon/src/test/java/org/opennms/netmgt/bsm/daemon/BsmdIT.java +++ b/features/bsm/daemon/src/test/java/org/opennms/netmgt/bsm/daemon/BsmdIT.java @@ -88,7 +88,6 @@ "classpath*:/META-INF/opennms/component-dao.xml", "classpath*:/META-INF/opennms/component-service.xml", "classpath:/META-INF/opennms/applicationContext-daemon.xml", - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/mockEventIpcManager.xml", "classpath:/META-INF/opennms/applicationContext-databasePopulator.xml", "classpath:/META-INF/opennms/applicationContext-bsmd.xml" diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/AbstractEventUtil.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/AbstractEventUtil.java index 27df9ebcd752..965b7f6ffe9d 100644 --- a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/AbstractEventUtil.java +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/AbstractEventUtil.java @@ -28,26 +28,32 @@ package org.opennms.netmgt.eventd; -import java.net.InetAddress; -import java.sql.SQLException; -import java.text.DateFormat; -import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.function.Supplier; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.opennms.core.spring.BeanUtils; -import org.opennms.core.utils.WebSecurityUtils; +import org.opennms.netmgt.eventd.processor.expandable.EventTemplate; +import org.opennms.netmgt.eventd.processor.expandable.ExpandableParameterResolver; import org.opennms.netmgt.events.api.EventConstants; import org.opennms.netmgt.xml.event.Event; import org.opennms.netmgt.xml.event.Parm; -import org.opennms.netmgt.xml.event.Snmp; -import org.opennms.netmgt.xml.event.Tticket; import org.opennms.netmgt.xml.event.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.support.TransactionOperations; + +import com.codahale.metrics.Gauge; +import com.codahale.metrics.MetricRegistry; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; /** * EventUtil is used primarily for the event parm expansion - has methods used @@ -207,7 +213,7 @@ public abstract class AbstractEventUtil implements EventUtil { */ protected static final String TAG_MOUSEOVERTEXT = "mouseovertext"; - protected static final Object TAG_TTICKET_ID = "tticketid"; + protected static final String TAG_TTICKET_ID = "tticketid"; /** * The string that starts the expansion for an asset field - used to lookup values @@ -220,11 +226,6 @@ public abstract class AbstractEventUtil implements EventUtil { */ protected static final String ASSET_END_SUFFIX = "]"; - /** - * The '%' sign used to indicate parms to be expanded - */ - protected static final char PERCENT = '%'; - /** * The string that should be expanded to a list of all parm names */ @@ -371,239 +372,65 @@ public static String escape(String inStr, char delimchar) { return outBuffer.toString(); } - /** - * Get the value of the parm for the event - * - * @param parm - * the parm for which value is needed from the event - * @param event - * the event whose parm value is required - * @return value of the event parm/element - */ - @Override - public String getValueOfParm(String parm, Event event) { + @Autowired + private TransactionOperations transactionOperations; - String retParmVal = null; - final String ifString = event.getInterface(); - - if (parm.equals(TAG_UEI)) { - retParmVal = event.getUei(); - } - if (parm.equals(TAG_EVENT_DB_ID)) { - if (event.hasDbid()) { - retParmVal = Integer.toString(event.getDbid()); - } else { - retParmVal = "eventid-unknown"; - } - } else if (parm.equals(TAG_SOURCE)) { - retParmVal = event.getSource(); - } else if (parm.equals(TAG_DPNAME)) { - retParmVal = event.getDistPoller(); - } else if (parm.equals(TAG_DESCR)) { - retParmVal = event.getDescr(); - } else if (parm.equals(TAG_LOGMSG)) { - retParmVal = event.getLogmsg().getContent(); - } else if (parm.equals(TAG_NODEID)) { - retParmVal = Long.toString(event.getNodeid()); - } else if (parm.equals(TAG_NODELABEL)) { - retParmVal = Long.toString(event.getNodeid()); - String nodeLabel = null; - if (event.getNodeid() > 0) { - try { - nodeLabel = getNodeLabel(event.getNodeid()); - } catch (SQLException e) { - // do nothing - } - } - if (nodeLabel != null) - retParmVal = WebSecurityUtils.sanitizeString(nodeLabel); - else - retParmVal = "Unknown"; - } else if (parm.equals(TAG_FOREIGNSOURCE)) { - retParmVal = ""; - if (event.getNodeid() > 0) { - try { - String foreignSource = getForeignSource(event.getNodeid()); - if (foreignSource != null) { - retParmVal = WebSecurityUtils.sanitizeString(foreignSource); - } - } catch (SQLException e) { - // do nothing - } - } - } else if (parm.equals(TAG_FOREIGNID)) { - retParmVal = ""; - if (event.getNodeid() > 0) { - try { - String foreignId = getForeignId(event.getNodeid()); - if (foreignId != null) { - retParmVal = WebSecurityUtils.sanitizeString(foreignId); - } - } catch (SQLException ex) { - // do nothing - } - } - } else if (parm.equals(TAG_TIME)) { - Date eventTime = event.getTime(); //This will be in GMT - if (eventTime == null) { - retParmVal = null; - } else { - DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); - retParmVal = df.format(eventTime); - } - } else if (parm.equals(TAG_SHORT_TIME)) { - Date eventTime = event.getTime(); //This will be in GMT - if (eventTime == null) { - retParmVal = null; - } else { - DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); - retParmVal = df.format(eventTime); - } - } else if (parm.equals(TAG_HOST)) { - retParmVal = event.getHost(); - } else if (parm.equals(TAG_INTERFACE)) { - retParmVal = ifString; - } else if (parm.equals(TAG_IFINDEX)) { - if (event.hasIfIndex()) { - retParmVal = Integer.toString(event.getIfIndex()); - } else { - retParmVal = "N/A"; - } - } else if (parm.equals(TAG_INTERFACE_RESOLVE)) { - InetAddress addr = event.getInterfaceAddress(); - if (addr != null) retParmVal = addr.getHostName(); - } else if (parm.equals(TAG_IFALIAS)) { - String ifAlias = null; - if (event.getNodeid() > 0 && event.getInterface() != null) { - try { - ifAlias = getIfAlias(event.getNodeid(), ifString); - } catch (SQLException e) { - // do nothing - LOG.info("ifAlias Unavailable for {}:{}", event.getNodeid(), event.getInterface(), e); - } - } - if (ifAlias != null) - retParmVal = ifAlias; - else - retParmVal = ifString; - } else if (parm.equals(TAG_PERCENT_SIGN)) { - String pctSign = "%"; - retParmVal = pctSign; - } else if (parm.equals(TAG_SNMPHOST)) { - retParmVal = event.getSnmphost(); - } else if (parm.equals(TAG_SERVICE)) { - retParmVal = event.getService(); - } else if (parm.equals(TAG_SNMP)) { - Snmp info = event.getSnmp(); - if (info == null) - retParmVal = null; - else { - StringBuffer snmpStr = new StringBuffer(info.getId()); - if (info.getIdtext() != null) - snmpStr.append(ATTRIB_DELIM - + escape(info.getIdtext().trim(), ATTRIB_DELIM)); - else - snmpStr.append(ATTRIB_DELIM + "undefined"); - - snmpStr.append(ATTRIB_DELIM + info.getVersion()); - - if (info.hasSpecific()) - snmpStr.append(ATTRIB_DELIM - + Integer.toString(info.getSpecific())); - else - snmpStr.append(ATTRIB_DELIM + "undefined"); - - if (info.hasGeneric()) - snmpStr.append(ATTRIB_DELIM - + Integer.toString(info.getGeneric())); - else - snmpStr.append(ATTRIB_DELIM + "undefined"); - - if (info.getCommunity() != null) { - snmpStr.append(ATTRIB_DELIM + info.getCommunity().trim()); - } else - snmpStr.append(ATTRIB_DELIM + "undefined"); - - retParmVal = snmpStr.toString(); - } - } else if (parm.equals(TAG_SNMP_ID)) { - Snmp info = event.getSnmp(); - if (info != null) { - retParmVal = info.getId(); - } - } else if (parm.equals(TAG_SNMP_IDTEXT)) { - Snmp info = event.getSnmp(); - if (info != null && info.getIdtext() != null) { - retParmVal = info.getIdtext(); - } - } else if (parm.equals(TAG_SNMP_VERSION)) { - Snmp info = event.getSnmp(); - if (info != null) { - retParmVal = info.getVersion(); - } - } else if (parm.equals(TAG_SNMP_SPECIFIC)) { - Snmp info = event.getSnmp(); - if (info != null && info.hasSpecific()) { - retParmVal = Integer.toString(info.getSpecific()); - } - } else if (parm.equals(TAG_SNMP_GENERIC)) { - Snmp info = event.getSnmp(); - if (info != null && info.hasGeneric()) { - retParmVal = Integer.toString(info.getGeneric()); - } - } else if (parm.equals(TAG_SNMP_COMMUNITY)) { - Snmp info = event.getSnmp(); - if (info != null && info.getCommunity() != null) { - retParmVal = info.getCommunity(); - } - } else if (parm.equals(TAG_SEVERITY)) { - retParmVal = event.getSeverity(); - } else if (parm.equals(TAG_OPERINSTR)) { - retParmVal = event.getOperinstruct(); - } else if (parm.equals(TAG_MOUSEOVERTEXT)) { - retParmVal = event.getMouseovertext(); - } else if (parm.equals(TAG_TTICKET_ID)) { - Tticket ticket = event.getTticket(); - retParmVal = ticket == null ? "" : ticket.getContent(); - } else if (parm.equals(PARMS_VALUES)) { - retParmVal = getAllParmValues(event); - } else if (parm.equals(PARMS_NAMES)) { - retParmVal = getAllParmNames(event); - } else if (parm.equals(PARMS_ALL)) { - retParmVal = getAllParamValues(event); - } else if (parm.equals(NUM_PARMS_STR)) { - retParmVal = String.valueOf(event.getParmCollection().size()); - } else if (parm.startsWith(PARM_NUM_PREFIX)) { - retParmVal = getNumParmValue(parm, event); - } else if (parm.startsWith(PARM_NAME_NUMBERED_PREFIX)) { - retParmVal = getNumParmName(parm, event); - } else if (parm.startsWith(PARM_BEGIN)) { - if (parm.length() > PARM_BEGIN_LENGTH) { - retParmVal = getNamedParmValue(parm, event); - } - } else if (parm.startsWith(ASSET_BEGIN)) { - retParmVal = null; - String assetFieldValue = null; - if (event.getNodeid() > 0) { - assetFieldValue = getAssetFieldValue(parm, event.getNodeid()); - } - if (assetFieldValue != null) - retParmVal = assetFieldValue; - else - retParmVal = "Unknown"; - } else if (parm.startsWith(HARDWARE_BEGIN)) { - retParmVal = null; - String hwFieldValue = null; - if (event.getNodeid() > 0) { - hwFieldValue = getHardwareFieldValue(parm, event.getNodeid()); - } - if (hwFieldValue != null) - retParmVal = hwFieldValue; - else - retParmVal = "Unknown"; - } + private final LoadingCache eventTemplateCache; + + private final ExpandableParameterResolverRegistry resolverRegistry = new ExpandableParameterResolverRegistry(); + + public AbstractEventUtil() { + this(null); + } - return (retParmVal == null ? null : retParmVal.trim()); + public AbstractEventUtil(MetricRegistry registry) { + // Build the cache, and enable statistics collection if we've been given a metric registry + final long maximumCacheSize = Long.parseLong(System.getProperty("org.opennms.eventd.eventTemplateCacheSize", "1000")); + final CacheBuilder cacheBuilder = CacheBuilder.newBuilder() + .maximumSize(maximumCacheSize); + if (registry != null) { + cacheBuilder.recordStats(); + } + eventTemplateCache = cacheBuilder.build(new CacheLoader() { + public EventTemplate load(String key) throws Exception { + return new EventTemplate(key, AbstractEventUtil.this); + } + }); + + if (registry != null) { + // Expose the cache statistics via a series of gauges + registry.register(MetricRegistry.name("eventutil.cache.capacity"), + new Gauge() { + @Override + public Long getValue() { + return maximumCacheSize; + } + }); + + registry.register(MetricRegistry.name("eventutil.cache.size"), + new Gauge() { + @Override + public Long getValue() { + return eventTemplateCache.size(); + } + }); + + registry.register(MetricRegistry.name("eventutil.cache.evictioncount"), + new Gauge() { + @Override + public Long getValue() { + return eventTemplateCache.stats().evictionCount(); + } + }); + + registry.register(MetricRegistry.name("eventutil.cache.avgloadpenalty"), + new Gauge() { + @Override + public Double getValue() { + return eventTemplateCache.stats().averageLoadPenalty(); + } + }); + } } /** @@ -621,12 +448,10 @@ protected static String getAllParmValues(Event event) { for (Parm evParm : event.getParmCollection()) { Value parmValue = evParm.getValue(); - if (parmValue == null) - continue; + if (parmValue == null) continue; String parmValueStr = EventConstants.getValueAsString(parmValue); - if (parmValueStr == null) - continue; + if (parmValueStr == null) continue; if (ret.length() == 0) { ret.append(parmValueStr); @@ -858,8 +683,8 @@ public String getNamedParmValue(String parm, Event event) { // get parm value Value eparmval = evParm.getValue(); if (eparmval != null) { - retParmVal = EventConstants.getValueAsString(eparmval); - break; + retParmVal = EventConstants.getValueAsString(eparmval); + break; } } } @@ -923,7 +748,7 @@ public String expandParms(String inp, Event event) { * value of the parameter number 'num', if present - %parm[##]% is replaced * by the number of parameters * - * @param inp + * @param input * the input string in which parm values are to be expanded * @param decode * the varbind decode for this @@ -931,75 +756,21 @@ public String expandParms(String inp, Event event) { * otherwise * @param event a {@link org.opennms.netmgt.xml.event.Event} object. */ - public String expandParms(String inp, Event event, Map> decode) { - int index1 = -1; - int index2 = -1; - - if (inp == null) { + public String expandParms(String input, Event event, Map> decode) { + if (input == null) { return null; } - - StringBuffer ret = new StringBuffer(); - - String tempInp = inp; - int inpLen = inp.length(); - - // check input string to see if it has any %xxx% substring - while ((tempInp != null) && ((index1 = tempInp.indexOf(PERCENT)) != -1)) { - LOG.debug("checking input {}", tempInp); - // copy till first % - ret.append(tempInp.substring(0, index1)); - tempInp = tempInp.substring(index1); - - index2 = tempInp.indexOf(PERCENT, 1); - if (index2 != -1) { - // Get the value between the %s - String parm = tempInp.substring(1, index2); - LOG.debug("parm: {} found in value", parm); - - // If there's any whitespace in between the % signs, then do not try to - // expand it with a parameter value - if (parm.matches(".*\\s(?s).*")) { - ret.append(PERCENT); - tempInp = tempInp.substring(1); - LOG.debug("skipping parm: {} because whitespace found in value", parm); - continue; - } - - String parmVal = getValueOfParm(parm, event); - LOG.debug("value of parm: {}", parmVal); - - if (parmVal != null) { - if (decode != null && decode.containsKey(parm) && decode.get(parm).containsKey(parmVal)) { - ret.append(decode.get(parm).get(parmVal)); - ret.append("("); - ret.append(parmVal); - ret.append(")"); - } else { - ret.append(parmVal); - } - } - - if (index2 < (inpLen - 1)) { - tempInp = tempInp.substring(index2 + 1); - } else { - tempInp = null; - } - } - else { - break; + try { + final EventTemplate eventTemplate = eventTemplateCache.get(input); + Supplier expander = () -> eventTemplate.expand(event, decode); + if (eventTemplate.requiresTransaction()) { + Objects.requireNonNull(transactionOperations); + return transactionOperations.execute(session -> expander.get()); + } else { + return expander.get(); } - } - - if ((index1 == -1 || index2 == -1) && (tempInp != null)) { - ret.append(tempInp); - } - - String retStr = ret.toString(); - if (retStr != null && !retStr.equals(inp)) { - return retStr; - } else { - return null; + } catch (ExecutionException ex) { + throw new RuntimeException(ex); } } @@ -1007,7 +778,6 @@ public String expandParms(String inp, Event event, MapgetEventHost

* * @param event a {@link org.opennms.netmgt.xml.event.Event} object. - * @param connection a {@link java.sql.Connection} object. * @return a {@link java.lang.String} object. */ @Override @@ -1029,65 +799,8 @@ public String getEventHost(final Event event) { } } - /** - * Retrieve nodeLabel from the node table of the database given a particular - * nodeId. - * - * @param nodeId - * Node identifier - * - * @return nodeLabel Retreived nodeLabel - * - * @throws SQLException - * if database error encountered - */ - protected abstract String getNodeLabel(long nodeId) throws SQLException; - - /** - * Retrieve foreign source from the node table of the database given a particular - * nodeId. - * - * @param nodeId - * Node identifier - * - * @return foreignSource Retrieved foreign source - * - * @throws SQLException - * if database error encountered - */ - protected abstract String getForeignSource(long nodeId) throws SQLException; - - /** - * Retrieve foreign id from the node table of the database given a particular nodeId. - * - * @param nodeId Node identifier - * @return foreignId Retrieved foreign id - * @throws SQLException if database error encountered - */ - protected abstract String getForeignId(long nodeId) throws SQLException; - - /** - * Retrieve ifAlias from the snmpinterface table of the database given a particular - * nodeId and ipAddr. - * - * @param nodeId - * Node identifier - * @param ipAddr - * Interface IP address - * - * @return ifAlias Retreived ifAlias - * - * @throws SQLException - * if database error encountered - */ - protected abstract String getIfAlias(long nodeId, String ipaddr) throws SQLException; - - /** - * Helper method. - * - * @param parm - * @param event - * @return The value of an asset field based on the nodeid of the event - */ - protected abstract String getAssetFieldValue(String parm, long nodeId); + @Override + public ExpandableParameterResolver getResolver(String token) { + return resolverRegistry.getResolver(token); + } } diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtil.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtil.java index 1b8632c7d652..ed7118454296 100644 --- a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtil.java +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtil.java @@ -31,6 +31,7 @@ import java.sql.SQLException; import java.util.Map; +import org.opennms.netmgt.eventd.processor.expandable.ExpandableParameterResolver; import org.opennms.netmgt.xml.event.Event; /** @@ -54,10 +55,71 @@ public interface EventUtil { void expandMapValues(Map parmMap, Event event); - String getValueOfParm(String tagUei, Event m_svcLostEvent); - String getHostName(int nodeId, String hostip) throws SQLException; String getEventHost(Event event); + /** + * Retrieve ifAlias from the snmpinterface table of the database given a particular + * nodeId and ipAddr. + * + * @param nodeId + * Node identifier + * @param ipAddr + * Interface IP address + * + * @return ifAlias Retreived ifAlias + * + * @throws SQLException + * if database error encountered + */ + String getIfAlias(long nodeId, String ipAddr) throws SQLException; + + /** + * Helper method. + * + * @param parm + * @param nodeId + * @return The value of an asset field based on the nodeid of the event + */ + String getAssetFieldValue(String parm, long nodeId); + + /** + * Retrieve foreign id from the node table of the database given a particular nodeId. + * + * @param nodeId Node identifier + * @return foreignId Retrieved foreign id + * @throws SQLException if database error encountered + */ + String getForeignId(long nodeId) throws SQLException; + + /** + * Retrieve foreign source from the node table of the database given a particular + * nodeId. + * + * @param nodeId + * Node identifier + * + * @return foreignSource Retrieved foreign source + * + * @throws SQLException + * if database error encountered + */ + String getForeignSource(long nodeId) throws SQLException; + + /** + * Retrieve nodeLabel from the node table of the database given a particular + * nodeId. + * + * @param nodeId + * Node identifier + * + * @return nodeLabel Retreived nodeLabel + * + * @throws SQLException + * if database error encountered + */ + String getNodeLabel(long nodeId) throws SQLException; + + ExpandableParameterResolver getResolver(String token); } diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtilDaoImpl.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtilDaoImpl.java index 46297284206d..c9c1fba4deec 100644 --- a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtilDaoImpl.java +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/EventUtilDaoImpl.java @@ -39,16 +39,15 @@ import org.apache.commons.beanutils.PropertyUtils; import org.opennms.core.criteria.Alias; +import org.opennms.core.criteria.Alias.JoinType; import org.opennms.core.criteria.Criteria; import org.opennms.core.criteria.Order; -import org.opennms.core.criteria.Alias.JoinType; import org.opennms.core.criteria.restrictions.EqRestriction; import org.opennms.core.criteria.restrictions.LikeRestriction; import org.opennms.netmgt.dao.api.AssetRecordDao; import org.opennms.netmgt.dao.api.HwEntityDao; import org.opennms.netmgt.dao.api.IpInterfaceDao; import org.opennms.netmgt.dao.api.NodeDao; -import org.opennms.netmgt.dao.api.SnmpInterfaceDao; import org.opennms.netmgt.model.OnmsAssetRecord; import org.opennms.netmgt.model.OnmsHwEntity; import org.opennms.netmgt.model.OnmsIpInterface; @@ -57,7 +56,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; + +import com.codahale.metrics.MetricRegistry; public class EventUtilDaoImpl extends AbstractEventUtil { @@ -66,9 +66,6 @@ public class EventUtilDaoImpl extends AbstractEventUtil { @Autowired private NodeDao nodeDao; - @Autowired - private SnmpInterfaceDao snmpInterfaceDao; - @Autowired private AssetRecordDao assetRecordDao; @@ -86,27 +83,34 @@ public class EventUtilDaoImpl extends AbstractEventUtil { private final static Map hwEntityDescriptorsByName = getDescriptorsForStrings(OnmsHwEntity.class); + public EventUtilDaoImpl() { } + + public EventUtilDaoImpl(MetricRegistry registry) { + super(registry); + } + @Override - protected String getNodeLabel(long nodeId) { + public String getNodeLabel(long nodeId) { return nodeDao.getLabelForId(Integer.valueOf((int)nodeId)); } @Override - protected String getForeignSource(long nodeId) { + public String getForeignSource(long nodeId) { OnmsNode node = nodeDao.get((int)nodeId); - if (node != null) + if (node != null) { return node.getForeignSource(); + } return null; } @Override - protected String getForeignId(long nodeId) { + public String getForeignId(long nodeId) { OnmsNode node = nodeDao.get((int)nodeId); return node == null ? null : node.getForeignId(); } @Override - protected String getIfAlias(long nodeId, String ipaddr) { + public String getIfAlias(long nodeId, String ipaddr) { OnmsIpInterface iface = ipInterfaceDao.findByNodeIdAndIpAddress((int)nodeId, ipaddr); if (iface != null && iface.getSnmpInterface() != null) { return iface.getSnmpInterface().getIfAlias(); @@ -116,7 +120,7 @@ protected String getIfAlias(long nodeId, String ipaddr) { } @Override - protected String getAssetFieldValue(String parm, long nodeId) { + public String getAssetFieldValue(String parm, long nodeId) { final Matcher matcher = ASSET_PARM_PATTERN.matcher(parm); if (!matcher.matches()) { LOG.warn("Unsupported asset field parameter '{}'.", parm); @@ -209,15 +213,13 @@ public String getHostName(final int nodeId, final String hostip) { } @Override - @Transactional(readOnly=true) public String expandParms(String inp, Event event) { return super.expandParms(inp, event, null); } @Override - @Transactional(readOnly=true) - public String expandParms(String inp, Event event, Map> decode) { - return super.expandParms(inp, event, decode); + public String expandParms(String input, Event event, Map> decode) { + return super.expandParms(input, event, decode); } /** diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/ExpandableParameterResolverRegistry.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/ExpandableParameterResolverRegistry.java new file mode 100644 index 000000000000..5d454bf74e79 --- /dev/null +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/ExpandableParameterResolverRegistry.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2016 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2016 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.eventd; + +import org.opennms.netmgt.eventd.processor.expandable.ExpandableParameterResolver; +import org.opennms.netmgt.xml.event.Event; + +/** + * Knows about all existing {@link ExpandableParameterResolver}s. + * + * This is the entry point to add, e.g. OSGi-aware {@link ExpandableParameterResolver}s in the future. + */ +public class ExpandableParameterResolverRegistry { + + private static ExpandableParameterResolver NULL_RESOLVER = new ExpandableParameterResolver() { + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return null; + } + + @Override + public boolean matches(String parm) { + return false; + } + + @Override + public boolean requiresTransaction() { + return false; + } + }; + + public ExpandableParameterResolver getResolver(String token) { + for (StandardExpandableParameterResolvers parameters : StandardExpandableParameterResolvers.values()) { + if (parameters.matches(token)) { + return parameters; + } + } + return NULL_RESOLVER; + } +} diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/StandardExpandableParameterResolvers.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/StandardExpandableParameterResolvers.java new file mode 100644 index 000000000000..edaee445fe07 --- /dev/null +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/StandardExpandableParameterResolvers.java @@ -0,0 +1,730 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2016 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2016 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.eventd; + +import static org.opennms.netmgt.eventd.AbstractEventUtil.ATTRIB_DELIM; +import static org.opennms.netmgt.eventd.AbstractEventUtil.escape; + +import java.net.InetAddress; +import java.sql.SQLException; +import java.text.DateFormat; +import java.util.Date; + +import org.opennms.core.utils.WebSecurityUtils; +import org.opennms.netmgt.eventd.processor.expandable.ExpandableParameterResolver; +import org.opennms.netmgt.xml.event.Event; +import org.opennms.netmgt.xml.event.Snmp; +import org.opennms.netmgt.xml.event.Tticket; +import org.slf4j.LoggerFactory; + +public enum StandardExpandableParameterResolvers implements ExpandableParameterResolver { + + UEI { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_UEI.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getUei(); + } + }, + + DB_ID { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_EVENT_DB_ID.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + if (event.hasDbid()) { + return Integer.toString(event.getDbid()); + } else { + return "eventid-unknown"; + } + } + }, + + SOURCE { + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SOURCE.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getSource(); + } + }, + + DPNAME { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_DPNAME.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getDistPoller(); + } + }, + + DESCR { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_DESCR.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getDescr(); + } + }, + + LOGMSG { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_LOGMSG.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getLogmsg().getContent(); + } + }, + + NODE_ID { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_NODEID.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return Long.toString(event.getNodeid()); + } + }, + + TIME { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_TIME.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Date eventTime = event.getTime(); // This will be in GMT + if (eventTime != null) { + DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); + return df.format(eventTime); + } + return null; + } + }, + + SHORT_TIME { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SHORT_TIME.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Date eventTime = event.getTime(); //This will be in GMT + if (eventTime != null) { + DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); + return df.format(eventTime); + } + return null; + } + }, + + HOST { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_HOST.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getHost(); + } + }, + + INTERFACE { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_INTERFACE.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getInterface(); + } + }, + + IFINDEX { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_IFINDEX.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + if (event.hasIfIndex()) { + return Integer.toString(event.getIfIndex()); + } + return "N/A"; + } + }, + + INTERFACE_ADDRESS { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_INTERFACE_RESOLVE.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + InetAddress addr = event.getInterfaceAddress(); + if (addr != null) { + return addr.getHostName(); + } + return null; + } + }, + + SNMP_HOST { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMPHOST.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getSnmphost(); + } + }, + + SERVICE { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SERVICE.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getService(); + } + }, + + SNMP { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMP.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Snmp info = event.getSnmp(); + if (info != null) { + StringBuffer snmpStr = new StringBuffer(info.getId()); + if (info.getIdtext() != null) { + snmpStr.append(ATTRIB_DELIM + escape(info.getIdtext().trim(), ATTRIB_DELIM)); + } else { + snmpStr.append(ATTRIB_DELIM + "undefined"); + } + + snmpStr.append(ATTRIB_DELIM + info.getVersion()); + + if (info.hasSpecific()) { + snmpStr.append(ATTRIB_DELIM + Integer.toString(info.getSpecific())); + } else { + snmpStr.append(ATTRIB_DELIM + "undefined"); + } + + if (info.hasGeneric()) { + snmpStr.append(ATTRIB_DELIM + Integer.toString(info.getGeneric())); + } else { + snmpStr.append(ATTRIB_DELIM + "undefined"); + } + + if (info.getCommunity() != null) { + snmpStr.append(ATTRIB_DELIM + info.getCommunity().trim()); + } else { + snmpStr.append(ATTRIB_DELIM + "undefined"); + } + + return snmpStr.toString(); + } + return null; + } + }, + + SNMP_ID { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMP_ID.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Snmp info = event.getSnmp(); + if (info != null) { + return info.getId(); + } + return null; + } + }, + + SNMP_IDTEXT { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMP_IDTEXT.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Snmp info = event.getSnmp(); + if (info != null && info.getIdtext() != null) { + return info.getIdtext(); + } + return null; + } + }, + + SNMP_VERSION { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMP_VERSION.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Snmp info = event.getSnmp(); + if (info != null) { + return info.getVersion(); + } + return null; + } + }, + + SNMP_SPECIFIC { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMP_SPECIFIC.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Snmp info = event.getSnmp(); + if (info != null && info.hasSpecific()) { + return Integer.toString(info.getSpecific()); + } + return null; + } + }, + + SNMP_GENERIC { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMP_GENERIC.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Snmp info = event.getSnmp(); + if (info != null && info.hasGeneric()) { + return Integer.toString(info.getGeneric()); + } + return null; + } + }, + + SNMP_COMMUNITY { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SNMP_COMMUNITY.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Snmp info = event.getSnmp(); + if (info != null && info.getCommunity() != null) { + return info.getCommunity(); + } + return null; + } + }, + + SEVERITY { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_SEVERITY.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getSeverity(); + } + }, + + OPERINSTRUCT { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_OPERINSTR.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getOperinstruct(); + } + }, + + MOUSE_OVER_TEXT { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_MOUSEOVERTEXT.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return event.getMouseovertext(); + } + }, + + TTICKET_ID { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_TTICKET_ID.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + Tticket ticket = event.getTticket(); + return ticket == null ? "" : ticket.getContent(); + } + }, + + PARMS_VALUES { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.PARMS_VALUES.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return AbstractEventUtil.getAllParmValues(event); + } + }, + + PARMS_NAMES { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.PARMS_NAMES.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return AbstractEventUtil.getAllParmNames(event); + } + }, + + PARMS_ALL { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.PARMS_ALL.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return AbstractEventUtil.getAllParamValues(event); + } + }, + + NUM_PARAMS { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.NUM_PARMS_STR.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return String.valueOf(event.getParmCollection().size()); + } + }, + + PARM_NUM { + + @Override + public boolean matches(String parm) { + return parm.startsWith(AbstractEventUtil.PARM_NUM_PREFIX); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return AbstractEventUtil.getNumParmValue(parm, event); + } + }, + + PARM_NAME_NUMBERED { + + @Override + public boolean matches(String parm) { + return parm.startsWith(AbstractEventUtil.PARM_NAME_NUMBERED_PREFIX); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + return AbstractEventUtil.getNumParmName(parm, event); + } + }, + + PARM { + + @Override + public boolean matches(String parm) { + return parm.startsWith(AbstractEventUtil.PARM_BEGIN); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + if (parm.length() > AbstractEventUtil.PARM_BEGIN_LENGTH) { + return eventUtil.getNamedParmValue(parm, event); + } + return null; + } + }, + + HARDWARE { + + @Override + public boolean matches(String parm) { + return parm.startsWith(AbstractEventUtil.HARDWARE_BEGIN); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + if (event.getNodeid() != null) { + String hwFieldValue = eventUtil.getHardwareFieldValue(parm, event.getNodeid()); + if (hwFieldValue != null) { + return hwFieldValue; + } + } + return "Unknown"; + } + + @Override + public boolean requiresTransaction() { + return true; + } + }, + + ASSET { + + @Override + public boolean matches(String parm) { + return parm.startsWith(AbstractEventUtil.ASSET_BEGIN); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + if (event.getNodeid() != null) { + String assetFieldValue = eventUtil.getAssetFieldValue(parm, event.getNodeid()); + if (assetFieldValue != null) { + return assetFieldValue; + } + } + return "Unknown"; + } + + @Override + public boolean requiresTransaction() { + return true; + } + }, + + NODE_LABEL { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_NODELABEL.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + String nodeLabel = null; + if (event.hasNodeid()) { + try { + nodeLabel = eventUtil.getNodeLabel(event.getNodeid()); + } catch (SQLException e) { + // do nothing + LoggerFactory.getLogger(getClass()).info("Node Label unavailable for node with id: {}", event.getNodeid(), e); + } + } + if (nodeLabel != null) { + return WebSecurityUtils.sanitizeString(nodeLabel); + } else { + return "Unknown"; + } + } + + @Override + public boolean requiresTransaction() { + return true; + } + }, + + FOREIGN_SOURCE { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_FOREIGNSOURCE.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + if (event.hasNodeid()) { + try { + String foreignSource = eventUtil.getForeignSource(event.getNodeid()); + if (foreignSource != null) { + return WebSecurityUtils.sanitizeString(foreignSource); + } + } catch (SQLException ex) { + // do nothing + LoggerFactory.getLogger(getClass()).info("ForeignSource unavailable for node with id:", event.getNodeid(), ex); + } + } + return ""; + } + + @Override + public boolean requiresTransaction() { + return true; + } + }, + + FOREIGN_ID { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_FOREIGNID.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + if (event.hasNodeid()) { + try { + String foreignId = eventUtil.getForeignId(event.getNodeid()); + if (foreignId != null) { + return WebSecurityUtils.sanitizeString(foreignId); + } + } catch (SQLException ex) { + // do nothing + LoggerFactory.getLogger(getClass()).info("ForeignId unavailable for node with id:", event.getNodeid(), ex); + } + } + return ""; + } + + @Override + public boolean requiresTransaction() { + return true; + } + }, + + IF_ALIAS { + + @Override + public boolean matches(String parm) { + return AbstractEventUtil.TAG_IFALIAS.equals(parm); + } + + @Override + public String getValue(String parm, Event event, EventUtil eventUtil) { + String ifAlias = null; + if (event.getNodeid() > 0 && event.getInterface() != null) { + try { + return eventUtil.getIfAlias(event.getNodeid(), event.getInterface()); + } catch (SQLException e) { + // do nothing + LoggerFactory.getLogger(getClass()).info("ifAlias Unavailable for {}:{}", event.getNodeid(), event.getInterface(), e); + } + } + if (ifAlias != null) { + return ifAlias; + } + return event.getInterface(); + } + + @Override + public boolean requiresTransaction() { + return true; + } + + }; + + // By default we do not require a transaction + @Override + public boolean requiresTransaction() { + return false; + } + +} diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/EventTemplate.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/EventTemplate.java new file mode 100644 index 000000000000..9a7477dde67e --- /dev/null +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/EventTemplate.java @@ -0,0 +1,137 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2016 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2016 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.eventd.processor.expandable; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.opennms.netmgt.eventd.EventUtil; +import org.opennms.netmgt.xml.event.Event; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.collect.Lists; + +/** + * The {@link EventTemplate} represents the event input, containing place-holders, e.g. 'nodeLabel', + * and support to expand the template. + * + * For each placeholder in the {@link EventTemplate#input} a {@link ExpandableToken} is created. + * The expandable state of the {@link EventTemplate} is the expanded state of all tokens ({@link EventTemplate#tokens}. + */ +public class EventTemplate implements ExpandableToken { + + private static final Logger LOG = LoggerFactory.getLogger(EventTemplate.class); + + private static final char PERCENT = '%'; + + private static final Pattern WHITESPACE_PATTERN = Pattern.compile(".*\\s(?s).*"); + + private final String input; + + private final List tokens = Lists.newArrayList(); + + private final EventUtil eventUtil; + + private final boolean requiresTransaction; + + public EventTemplate(String input, EventUtil eventUtil) { + this.input = Objects.requireNonNull(input); + this.eventUtil = Objects.requireNonNull(eventUtil); + parse(); + this.requiresTransaction = tokens.stream().filter(t -> t.requiresTransaction()).findAny().isPresent(); + } + + /** + * Parses the input and creates {@link ExpandableToken} to expand it. + */ + private void parse() { + tokens.clear(); + String tempInp = input; + int inpLen = input.length(); + + int index1 = -1; + int index2 = -1; + + // check input string to see if it has any %xxx% substring + while ((tempInp != null) && ((index1 = tempInp.indexOf(PERCENT)) != -1)) { + + LOG.debug("checking input {}", tempInp); + // copy till first % + tokens.add(new ExpandableConstant(tempInp.substring(0, index1))); + tempInp = tempInp.substring(index1); + + index2 = tempInp.indexOf(PERCENT, 1); + if (index2 != -1) { + // Get the value between the %s + String parm = tempInp.substring(1, index2); + LOG.debug("parm: {} found in value", parm); + + // If there's any whitespace in between the % signs, then do not try to + // expand it with a parameter value + if (WHITESPACE_PATTERN.matcher(parm).matches()) { + tokens.add(new ExpandableConstant(PERCENT)); + tempInp = tempInp.substring(1); + LOG.debug("skipping parm: {} because whitespace found in value", parm); + continue; + } + + tokens.add(new ExpandableParameter(parm, eventUtil)); + + if (index2 < (inpLen - 1)) { + tempInp = tempInp.substring(index2 + 1); + } else { + tempInp = null; + } + } else { + break; + } + } + if ((index1 == -1 || index2 == -1) && (tempInp != null)) { + tokens.add(new ExpandableConstant(tempInp)); + } + } + + @Override + public String expand(Event event, Map> decode) { + final String collect = tokens.stream() + .map(t -> t.expand(event, decode)) + .collect(Collectors.joining()); + return collect; + } + + // If we find any token which requires a transaction, the template itself requires a transaction as well + @Override + public boolean requiresTransaction() { + return requiresTransaction; + } +} diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableConstant.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableConstant.java new file mode 100644 index 000000000000..1fba2167e831 --- /dev/null +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableConstant.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2016 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2016 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.eventd.processor.expandable; + +import java.util.Map; +import java.util.Objects; + +import org.opennms.netmgt.xml.event.Event; + +/** + * The simplest {@link ExpandableToken} is a "not" expandable token, or {@link ExpandableConstant}. + * + */ +public class ExpandableConstant implements ExpandableToken { + + private final String token; + + public ExpandableConstant(String token) { + this.token = Objects.requireNonNull(token); + } + + public ExpandableConstant(char c) { + this(String.valueOf(c)); + } + + @Override + public String expand(Event event, Map> decode) { + return token; + } + + @Override + public boolean requiresTransaction() { + return false; // no transaction for constants + } +} diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameter.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameter.java new file mode 100644 index 000000000000..87ce942d2201 --- /dev/null +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameter.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2016 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2016 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.eventd.processor.expandable; + +import java.util.Map; +import java.util.Objects; + +import org.opennms.netmgt.eventd.EventUtil; +import org.opennms.netmgt.eventd.ExpandableParameterResolverRegistry; +import org.opennms.netmgt.xml.event.Event; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * An {@link ExpandableParameter} requires the {@link #ExpandableParameter#parameter} to be replaced with an appropriate value. + * + * Each {@link ExpandableParameter#token} may be mapped to a {@link ExpandableParameterResolver} resolving the token to a value. + * If no resolver is found, null is returned. + * + * @see ExpandableParameterResolverRegistry + */ +public class ExpandableParameter implements ExpandableToken { + + private static final Logger LOG = LoggerFactory.getLogger(ExpandableParameter.class); + + private final String token; + private final ExpandableParameterResolver resolver; + private final EventUtil eventUtil; + + + public ExpandableParameter(String token, EventUtil eventUtil) { + this.token = Objects.requireNonNull(token); + this.resolver = Objects.requireNonNull(eventUtil.getResolver(token)); + this.eventUtil = Objects.requireNonNull(eventUtil); + } + + @Override + public String expand(Event event, Map> decode) { + String value = resolver.getValue(token, event, eventUtil); + LOG.debug("Value of token {}={}", token, value); + + if (value != null) { + if (decode != null && decode.containsKey(token) && decode.get(token).containsKey(value)) { + StringBuilder ret = new StringBuilder(); + ret.append(decode.get(token).get(value)); + ret.append("("); + ret.append(value); + ret.append(")"); + return ret.toString(); + } else { + return value; + } + } + return ""; + } + + @Override + public boolean requiresTransaction() { + return resolver.requiresTransaction(); + } +} diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameterResolver.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameterResolver.java new file mode 100644 index 000000000000..a7939a1f7977 --- /dev/null +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableParameterResolver.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2016 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2016 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.eventd.processor.expandable; + +import org.opennms.netmgt.eventd.StandardExpandableParameterResolvers; +import org.opennms.netmgt.eventd.EventUtil; +import org.opennms.netmgt.xml.event.Event; + +/** + * Allows to resolve an expandable parameter. + * + * @see StandardExpandableParameterResolvers + */ +public interface ExpandableParameterResolver { + + String getValue(String parm, Event event, EventUtil eventUtil); + + boolean matches(String parm); + + boolean requiresTransaction(); +} diff --git a/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableToken.java b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableToken.java new file mode 100644 index 000000000000..062342c0e2ac --- /dev/null +++ b/features/events/daemon/src/main/java/org/opennms/netmgt/eventd/processor/expandable/ExpandableToken.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * This file is part of OpenNMS(R). + * + * Copyright (C) 2016 The OpenNMS Group, Inc. + * OpenNMS(R) is Copyright (C) 1999-2016 The OpenNMS Group, Inc. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * OpenNMS(R) is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * OpenNMS(R) 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with OpenNMS(R). If not, see: + * http://www.gnu.org/licenses/ + * + * For more information contact: + * OpenNMS(R) Licensing + * http://www.opennms.org/ + * http://www.opennms.com/ + *******************************************************************************/ + +package org.opennms.netmgt.eventd.processor.expandable; + +import java.util.Map; + +import org.opennms.netmgt.xml.event.Event; + +/** + * A token, which may or may not expandable. + */ +public interface ExpandableToken { + + /** + * Expands a token. + * + * @param event An event, to expand the token from. May not be null. + * @param decode A Map, to help expanding the token. May be null. + * @return The expanded token. + */ + String expand(Event event, Map> decode); + + /** + * Defines if this {@link ExpandableToken} requires a transaction to be expanded. + * + * @return True if a transaction is required, False otherwise. + */ + boolean requiresTransaction(); +} diff --git a/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventDaemon.xml b/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventDaemon.xml index 17be449e6130..b93c1cb9a6ac 100644 --- a/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventDaemon.xml +++ b/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventDaemon.xml @@ -140,8 +140,6 @@ - - diff --git a/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventUtil.xml b/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventUtil.xml index 355115188483..87f6a713efcf 100644 --- a/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventUtil.xml +++ b/features/events/daemon/src/main/resources/META-INF/opennms/applicationContext-eventUtil.xml @@ -1,17 +1,17 @@ + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> - - + + - + + + diff --git a/features/events/daemon/src/main/resources/META-INF/opennms/component-dao.xml b/features/events/daemon/src/main/resources/META-INF/opennms/component-dao.xml new file mode 100644 index 000000000000..39e263e5a409 --- /dev/null +++ b/features/events/daemon/src/main/resources/META-INF/opennms/component-dao.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/features/events/daemon/src/main/resources/beanRefContext.xml b/features/events/daemon/src/main/resources/beanRefContext.xml index 9fbcc2fb5f0e..0562e86724e8 100644 --- a/features/events/daemon/src/main/resources/beanRefContext.xml +++ b/features/events/daemon/src/main/resources/beanRefContext.xml @@ -7,7 +7,6 @@ META-INF/opennms/applicationContext-eventDaemon.xml - META-INF/opennms/applicationContext-eventUtil.xml META-INF/opennms/applicationContext-daoEvents.xml diff --git a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilHibernateIT.java b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilHibernateIT.java index e907e048c539..1e0f544a0934 100644 --- a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilHibernateIT.java +++ b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilHibernateIT.java @@ -55,7 +55,6 @@ "classpath*:/META-INF/opennms/component-dao.xml", "classpath:/META-INF/opennms/applicationContext-commonConfigs.xml", "classpath:/META-INF/opennms/applicationContext-minimal-conf.xml", - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/applicationContext-eventDaemon.xml" }) @JUnitConfigurationEnvironment diff --git a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilIT.java b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilIT.java index 5b091a64858e..bc713a5067ae 100644 --- a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilIT.java +++ b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventUtilIT.java @@ -31,12 +31,14 @@ import static org.junit.Assert.assertEquals; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennms.core.test.OpenNMSJUnit4ClassRunner; import org.opennms.core.test.db.annotations.JUnitTemporaryDatabase; import org.opennms.core.utils.Base64; +import org.opennms.netmgt.eventd.processor.expandable.ExpandableParameter; import org.opennms.netmgt.events.api.EventConstants; import org.opennms.netmgt.mock.MockEventUtil; import org.opennms.netmgt.mock.MockNetwork; @@ -46,8 +48,11 @@ import org.opennms.netmgt.xml.event.Tticket; import org.opennms.netmgt.xml.event.Value; import org.opennms.test.JUnitConfigurationEnvironment; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; +import com.google.common.collect.Maps; + @RunWith(OpenNMSJUnit4ClassRunner.class) @ContextConfiguration(locations={ "classpath:/META-INF/opennms/applicationContext-soa.xml", @@ -55,7 +60,6 @@ "classpath*:/META-INF/opennms/component-dao.xml", "classpath:/META-INF/opennms/applicationContext-commonConfigs.xml", "classpath:/META-INF/opennms/applicationContext-minimal-conf.xml", - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml" }) @JUnitConfigurationEnvironment @JUnitTemporaryDatabase(dirtiesContext=false) @@ -67,6 +71,9 @@ public class EventUtilIT { private Event m_nodeDownEvent; private Event m_bgpBkTnEvent; + @Autowired + EventUtil eventUtil; + @Before public void setUp() throws Exception { m_network.createStandardNetwork(); @@ -100,20 +107,18 @@ public void testEscape() { assertEquals("m%onkeys%47rock", AbstractEventUtil.escape("m%onkeys/rock", '/')); } - /* - * Test method for 'org.opennms.netmgt.eventd.EventUtil.getValueOfParm(String, Event)' - */ @Test public void testGetValueOfParm() { - String testString = AbstractEventUtil.getInstance().getValueOfParm(AbstractEventUtil.TAG_UEI, m_svcLostEvent); + ExpandableParameterResolverRegistry registry = new ExpandableParameterResolverRegistry(); + String testString = new ExpandableParameter(AbstractEventUtil.TAG_UEI, eventUtil).expand(m_svcLostEvent, Maps.newHashMap()); assertEquals(EventConstants.NODE_LOST_SERVICE_EVENT_UEI, testString); m_svcLostEvent.setSeverity(OnmsSeverity.MINOR.getLabel()); - testString = AbstractEventUtil.getInstance().getValueOfParm(AbstractEventUtil.TAG_SEVERITY, m_svcLostEvent); + testString = new ExpandableParameter(AbstractEventUtil.TAG_SEVERITY, eventUtil).expand(m_svcLostEvent, Maps.newHashMap()); assertEquals("Minor", testString); Event event = MockEventUtil.createNodeLostServiceEvent("Test", m_svc, "noReasonAtAll"); - assertEquals("noReasonAtAll", AbstractEventUtil.getInstance().getNamedParmValue("parm["+EventConstants.PARM_LOSTSERVICE_REASON+"]", event)); + assertEquals("noReasonAtAll", eventUtil.getNamedParmValue("parm["+EventConstants.PARM_LOSTSERVICE_REASON+"]", event)); } /* @@ -123,7 +128,7 @@ public void testGetValueOfParm() { public void testExpandParms() { String testString = "%uei%:%dpname%:%nodeid%:%interface%:%service%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_svcLostEvent); + String newString = eventUtil.expandParms(testString, m_svcLostEvent); assertEquals(EventConstants.NODE_LOST_SERVICE_EVENT_UEI + "::1:192.168.1.1:SMTP", newString); } @@ -153,7 +158,7 @@ public void testLineWhitespaceParms(){ "uei.opennms.org/syslogd/local7/Warning\n"+ "syslogmessage=\"172.17.12.251: Mar 5 20:48:35.644: %SSH-4-SSH2_UNEXPECTED_MSG: Unexpected message type has arrived. Terminating the connection\" severity=\"Warning\" timestamp=\"Mar 05 14:48:47\" process=\"304806\" service=\"local7\"" + ":%dpname%:%nodeid%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); String validString = "http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition:" + " #description#\n"+ "

The interface 172.17.12.251 generated a Syslog Message.
\n"+ @@ -176,6 +181,13 @@ public void testLineWhitespaceParms(){ + "::1"; assertEquals(validString, newString); } + + @Test + public void testExpandParmsWithoutAnyParameterToExpand() { + String input = "I am fine the way I am. I don't want to be expanded (-:"; + Assert.assertEquals(input, eventUtil.expandParms(input, m_svcLostEvent)); + } + /** * Test method for extracting parm names rather than parm values */ @@ -183,7 +195,7 @@ public void testLineWhitespaceParms(){ public void testExpandParmNames() { String testString = "%uei%:%dpname%:%nodeid%:%parm[name-#1]%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); assertEquals("http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition::1:.1.3.6.1.2.1.15.3.1.7.128.64.32.16", newString); } @@ -194,7 +206,7 @@ public void testExpandParmNames() { public void testSplitAndExtractParmNamePositive() { String testString = "%uei%:%dpname%:%nodeid%:%parm[name-#1.1]%.%parm[name-#1.3]%.%parm[name-#1.5]%.%parm[name-#1.7]%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); assertEquals("http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition::1:1.6.2.15", newString); } @@ -205,7 +217,7 @@ public void testSplitAndExtractParmNamePositive() { public void testSplitAndExtractParmNameNegative() { String testString = "%uei%:%dpname%:%nodeid%:%parm[name-#1.-4]%.%parm[name-#1.-3]%.%parm[name-#1.-2]%.%parm[name-#1.-1]%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); assertEquals("http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition::1:128.64.32.16", newString); } @@ -216,7 +228,7 @@ public void testSplitAndExtractParmNameNegative() { public void testSplitAndExtractParmNameRangePositive() { String testString = "%uei%:%dpname%:%nodeid%:%parm[name-#1.1:4]%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); assertEquals("http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition::1:1.3.6.1", newString); } @@ -227,7 +239,7 @@ public void testSplitAndExtractParmNameRangePositive() { public void testSplitAndExtractParmNameRangePositiveToEnd() { String testString = "%uei%:%dpname%:%nodeid%:%parm[name-#1.5:]%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); assertEquals("http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition::1:2.1.15.3.1.7.128.64.32.16", newString); } @@ -238,7 +250,7 @@ public void testSplitAndExtractParmNameRangePositiveToEnd() { public void testSplitAndExtractParmNameRangeNegative() { String testString = "%uei%:%dpname%:%nodeid%:%parm[name-#1.-4:2]%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); assertEquals("http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition::1:128.64", newString); } @@ -249,7 +261,7 @@ public void testSplitAndExtractParmNameRangeNegative() { public void testSplitAndExtractParmNameRangeNegativeToEnd() { String testString = "%uei%:%dpname%:%nodeid%:%parm[name-#1.-5:]%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_bgpBkTnEvent); + String newString = eventUtil.expandParms(testString, m_bgpBkTnEvent); assertEquals("http://uei.opennms.org/standards/rfc1657/traps/bgpBackwardTransition::1:7.128.64.32.16", newString); } @@ -260,21 +272,21 @@ public void testSplitAndExtractParmNameRangeNegativeToEnd() { public void testNodeFields() { String testString = "%uei%:%dpname%:%nodeid%:%nodelabel%:%foreignsource%:%foreignid%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_svcLostEvent); + String newString = eventUtil.expandParms(testString, m_svcLostEvent); assertEquals(EventConstants.NODE_LOST_SERVICE_EVENT_UEI + "::1:Unknown::", newString); } @Test public void testExpandTticketId() { String testString = "%tticketid%"; - String newString = AbstractEventUtil.getInstance().expandParms(testString, m_nodeDownEvent); + String newString = eventUtil.expandParms(testString, m_nodeDownEvent); assertEquals("", newString); Tticket ticket = new Tticket(); ticket.setContent("777"); ticket.setState("1"); m_nodeDownEvent.setTticket(ticket); - newString = AbstractEventUtil.getInstance().expandParms(testString, m_nodeDownEvent); + newString = eventUtil.expandParms(testString, m_nodeDownEvent); assertEquals("777", newString); } diff --git a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdIT.java b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdIT.java index dcbe84e897db..639b1b32ae38 100644 --- a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdIT.java +++ b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdIT.java @@ -74,7 +74,6 @@ "classpath*:/META-INF/opennms/component-dao.xml", "classpath:/META-INF/opennms/applicationContext-commonConfigs.xml", "classpath:/META-INF/opennms/applicationContext-minimal-conf.xml", - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/applicationContext-eventDaemon.xml" }) @JUnitConfigurationEnvironment diff --git a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdSpringIT.java b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdSpringIT.java index ae32eee83b7a..a09a749479b7 100644 --- a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdSpringIT.java +++ b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/EventdSpringIT.java @@ -59,7 +59,6 @@ "classpath*:/META-INF/opennms/component-dao.xml", "classpath:/META-INF/opennms/applicationContext-commonConfigs.xml", "classpath:/META-INF/opennms/applicationContext-minimal-conf.xml", - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/applicationContext-eventDaemon.xml" }) @JUnitConfigurationEnvironment diff --git a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/processor/HibernateEventWriterIT.java b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/processor/HibernateEventWriterIT.java index 81e35c85d56f..0ac2225b5a53 100644 --- a/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/processor/HibernateEventWriterIT.java +++ b/features/events/daemon/src/test/java/org/opennms/netmgt/eventd/processor/HibernateEventWriterIT.java @@ -80,8 +80,6 @@ "classpath*:/META-INF/opennms/component-service.xml", "classpath:/META-INF/opennms/applicationContext-daemon.xml", "classpath:/META-INF/opennms/mockEventIpcManager.xml", - - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/applicationContext-eventDaemon.xml" }) @JUnitConfigurationEnvironment diff --git a/features/events/shell-commands/src/main/java/org/opennms/netmgt/events/commands/StressCommand.java b/features/events/shell-commands/src/main/java/org/opennms/netmgt/events/commands/StressCommand.java index 7ae3162fcff3..d0999ca52204 100644 --- a/features/events/shell-commands/src/main/java/org/opennms/netmgt/events/commands/StressCommand.java +++ b/features/events/shell-commands/src/main/java/org/opennms/netmgt/events/commands/StressCommand.java @@ -48,6 +48,7 @@ import org.apache.felix.gogo.commands.Command; import org.apache.felix.gogo.commands.Option; import org.apache.karaf.shell.console.OsgiCommandSupport; +import org.opennms.core.utils.InetAddressUtils; import org.opennms.netmgt.events.api.EventForwarder; import org.opennms.netmgt.model.events.EventBuilder; import org.opennms.netmgt.xml.event.Event; @@ -96,6 +97,11 @@ public class StressCommand extends OsgiCommandSupport { @Option(name="-b", aliases="--batch-size", description="The size of the log (batch size)", required=false, multiValued = false) int batchSize = 1; + @Option(name="-n", aliases="--node-id", description="The node id to associate with the generated event") + Integer eventNodeId = null; + + @Option(name="-i", aliases="--interface", description="The ip interface to associate with the generated event") + String eventIpInterface = null; @Option(name="-x", aliases="--sync", description="Use synchronous instead of asynchronous calls", required=false, multiValued = false) boolean isSynchronous = false; @@ -156,6 +162,12 @@ public void run() { public Event getNextEvent() { final EventBuilder eb = new EventBuilder(eventUei, EVENT_SOURCE); + if (eventNodeId != null) { + eb.setNodeid(eventNodeId.intValue()); + } + if (eventIpInterface != null) { + eb.setInterface(InetAddressUtils.addr(eventIpInterface)); + } return eb.getEvent(); } } diff --git a/features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdBroadcastEventProcessorTest.java b/features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdBroadcastEventProcessorIT.java similarity index 99% rename from features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdBroadcastEventProcessorTest.java rename to features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdBroadcastEventProcessorIT.java index 3e9b90b4da4d..17381ed27874 100644 --- a/features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdBroadcastEventProcessorTest.java +++ b/features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdBroadcastEventProcessorIT.java @@ -68,17 +68,17 @@ "classpath:/META-INF/opennms/applicationContext-minimal-conf.xml", "classpath:/META-INF/opennms/applicationContext-soa.xml", "classpath:/META-INF/opennms/applicationContext-dao.xml", + "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/applicationContext-daemon.xml", "classpath:/META-INF/opennms/applicationContext-databasePopulator.xml", - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/applicationContext-eventDaemon.xml", "classpath:/META-INF/opennms/applicationContext-daoEvents.xml" }) @JUnitConfigurationEnvironment @JUnitTemporaryDatabase -public class SyslogdBroadcastEventProcessorTest { +public class SyslogdBroadcastEventProcessorIT { - private static final Logger LOG = LoggerFactory.getLogger(SyslogdBroadcastEventProcessorTest.class); + private static final Logger LOG = LoggerFactory.getLogger(SyslogdBroadcastEventProcessorIT.class); private static final String SYSTEM_ID = DistPollerDao.DEFAULT_DIST_POLLER_ID; private static final String LOCATION = MonitoringLocationDao.DEFAULT_MONITORING_LOCATION_ID; diff --git a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/CorrelationRulesITCase.java b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/CorrelationRulesITCase.java index 88f7d0919743..a79b75e5f65d 100644 --- a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/CorrelationRulesITCase.java +++ b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/CorrelationRulesITCase.java @@ -45,7 +45,6 @@ import org.opennms.netmgt.events.api.EventConstants; import org.opennms.netmgt.model.events.EventBuilder; import org.opennms.netmgt.xml.event.Event; -import org.opennms.test.JUnitConfigurationEnvironment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; @@ -61,7 +60,6 @@ "classpath:META-INF/opennms/correlation-engine.xml", "classpath:test-context.xml" }) -@JUnitConfigurationEnvironment @Transactional @DirtiesContext public abstract class CorrelationRulesITCase { diff --git a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyLoadingRulesIT.java b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyLoadingRulesIT.java index 6c61f2a4bea5..f0b473bff96b 100644 --- a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyLoadingRulesIT.java +++ b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyLoadingRulesIT.java @@ -51,6 +51,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; +@Ignore("Broken since updating EventUtilDaoImpl. See NMS-8681.") public class DependencyLoadingRulesIT extends CorrelationRulesITCase { @Autowired diff --git a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyRulesIT.java b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyRulesIT.java index 263ac6c1d5c8..8b78e98fcbc2 100644 --- a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyRulesIT.java +++ b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/DependencyRulesIT.java @@ -57,6 +57,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; +@Ignore("Broken since updating EventUtilDaoImpl. See NMS-8681.") public class DependencyRulesIT extends CorrelationRulesITCase { private static interface Predicate { diff --git a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/EventMappingRulesIT.java b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/EventMappingRulesIT.java index 7f63efe990e3..098c6e39b1f7 100644 --- a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/EventMappingRulesIT.java +++ b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/EventMappingRulesIT.java @@ -38,6 +38,7 @@ import java.util.Set; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.opennms.netmgt.correlation.drools.DroolsCorrelationEngine; import org.opennms.netmgt.dao.api.DistPollerDao; @@ -58,6 +59,7 @@ import com.google.common.collect.Iterables; +@Ignore("Broken since updating EventUtilDaoImpl. See NMS-8681.") public class EventMappingRulesIT extends CorrelationRulesITCase { @Autowired diff --git a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/MonolithicDependencyRulesIT.java b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/MonolithicDependencyRulesIT.java index 3dd09c3c35f8..735dc2689bad 100644 --- a/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/MonolithicDependencyRulesIT.java +++ b/features/ncs/ncs-drools/src/test/java/org/opennms/netmgt/correlation/ncs/MonolithicDependencyRulesIT.java @@ -48,6 +48,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; +@Ignore("Broken since updating EventUtilDaoImpl. See NMS-8681.") public class MonolithicDependencyRulesIT extends CorrelationRulesITCase { @Autowired diff --git a/features/ncs/ncs-drools/src/test/opennms-home/etc/DependencyRules.drl b/features/ncs/ncs-drools/src/test/resources/opennms-home/etc/DependencyRules.drl similarity index 100% rename from features/ncs/ncs-drools/src/test/opennms-home/etc/DependencyRules.drl rename to features/ncs/ncs-drools/src/test/resources/opennms-home/etc/DependencyRules.drl diff --git a/features/ncs/ncs-drools/src/test/opennms-home/etc/drools-engine.xml b/features/ncs/ncs-drools/src/test/resources/opennms-home/etc/drools-engine.xml similarity index 100% rename from features/ncs/ncs-drools/src/test/opennms-home/etc/drools-engine.xml rename to features/ncs/ncs-drools/src/test/resources/opennms-home/etc/drools-engine.xml diff --git a/features/ncs/ncs-drools/src/test/opennms-home/etc/jmx-config.xml b/features/ncs/ncs-drools/src/test/resources/opennms-home/etc/jmx-config.xml similarity index 100% rename from features/ncs/ncs-drools/src/test/opennms-home/etc/jmx-config.xml rename to features/ncs/ncs-drools/src/test/resources/opennms-home/etc/jmx-config.xml diff --git a/features/ticketing/daemon/src/test/java/org/opennms/netmgt/ticketd/DefaultTicketerServiceLayerIntegrationTest.java b/features/ticketing/daemon/src/test/java/org/opennms/netmgt/ticketd/DefaultTicketerServiceLayerIT.java similarity index 97% rename from features/ticketing/daemon/src/test/java/org/opennms/netmgt/ticketd/DefaultTicketerServiceLayerIntegrationTest.java rename to features/ticketing/daemon/src/test/java/org/opennms/netmgt/ticketd/DefaultTicketerServiceLayerIT.java index 686559984845..24baa9b7acc5 100644 --- a/features/ticketing/daemon/src/test/java/org/opennms/netmgt/ticketd/DefaultTicketerServiceLayerIntegrationTest.java +++ b/features/ticketing/daemon/src/test/java/org/opennms/netmgt/ticketd/DefaultTicketerServiceLayerIT.java @@ -73,9 +73,9 @@ }) @JUnitConfigurationEnvironment(systemProperties={ // Set opennms.ticketer.plugin to a value for unit testing - "opennms.ticketer.plugin=org.opennms.netmgt.ticketd.DefaultTicketerServiceLayerIntegrationTest.TestTicketerPlugin" + "opennms.ticketer.plugin=org.opennms.netmgt.ticketd.DefaultTicketerServiceLayerIT.TestTicketerPlugin" }) -public class DefaultTicketerServiceLayerIntegrationTest implements InitializingBean { +public class DefaultTicketerServiceLayerIT implements InitializingBean { @Autowired private TicketerServiceLayer m_ticketerServiceLayer; diff --git a/features/ticketing/daemon/src/test/resources/org/opennms/netmgt/ticketd/applicationContext-configOverride.xml b/features/ticketing/daemon/src/test/resources/org/opennms/netmgt/ticketd/applicationContext-configOverride.xml index 32cc54b7e35d..86f4d89d3694 100644 --- a/features/ticketing/daemon/src/test/resources/org/opennms/netmgt/ticketd/applicationContext-configOverride.xml +++ b/features/ticketing/daemon/src/test/resources/org/opennms/netmgt/ticketd/applicationContext-configOverride.xml @@ -1,10 +1,14 @@ - + xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> + + + + true - diff --git a/opennms-alarms/daemon/src/test/java/org/opennms/netmgt/vacuumd/VacuumdIT.java b/opennms-alarms/daemon/src/test/java/org/opennms/netmgt/vacuumd/VacuumdIT.java index 558739b7e1ef..9fd9ade05982 100644 --- a/opennms-alarms/daemon/src/test/java/org/opennms/netmgt/vacuumd/VacuumdIT.java +++ b/opennms-alarms/daemon/src/test/java/org/opennms/netmgt/vacuumd/VacuumdIT.java @@ -98,7 +98,6 @@ "classpath:/META-INF/opennms/applicationContext-dao.xml", "classpath*:/META-INF/opennms/component-dao.xml", "classpath:/META-INF/opennms/applicationContext-daemon.xml", - "classpath:/META-INF/opennms/applicationContext-eventUtil.xml", "classpath:/META-INF/opennms/mockEventIpcManager.xml", "classpath:/META-INF/opennms/applicationContext-alarmd.xml", "classpath:/META-INF/opennms/applicationContext-commonConfigs.xml", diff --git a/opennms-base-assembly/src/main/filtered/etc/opennms.properties b/opennms-base-assembly/src/main/filtered/etc/opennms.properties index b6c04702ba5c..079249aa24f5 100644 --- a/opennms-base-assembly/src/main/filtered/etc/opennms.properties +++ b/opennms-base-assembly/src/main/filtered/etc/opennms.properties @@ -430,6 +430,10 @@ gnu.io.SerialPorts=/dev/ttyACM0:/dev/ttyACM1:/dev/ttyACM2:/dev/ttyACM3:/dev/ttyA # you will get a phone timed out exception smslib.serial.polling=true +###### EVENTD OPTIONS ###### +# This property is used to define the size of the event parsing cache. The size must be >= 0, where 0 disables caching. +#org.opennms.eventd.eventTemplateCacheSize = 1000 + ###### PROVISIOND OPTIONS ###### # # This property is used to enable/disable the handling of new suspect events diff --git a/opennms-dao-mock/src/main/resources/META-INF/opennms/applicationContext-mockEventd.xml b/opennms-dao-mock/src/main/resources/META-INF/opennms/applicationContext-mockEventd.xml index 9087e60f9a2f..35d3b8c22817 100644 --- a/opennms-dao-mock/src/main/resources/META-INF/opennms/applicationContext-mockEventd.xml +++ b/opennms-dao-mock/src/main/resources/META-INF/opennms/applicationContext-mockEventd.xml @@ -55,8 +55,6 @@ - - @@ -70,4 +68,6 @@ + + diff --git a/opennms-services/src/main/resources/META-INF/opennms/applicationContext-notifd.xml b/opennms-services/src/main/resources/META-INF/opennms/applicationContext-notifd.xml index f57ef26bb40e..2af9f4d5cf71 100644 --- a/opennms-services/src/main/resources/META-INF/opennms/applicationContext-notifd.xml +++ b/opennms-services/src/main/resources/META-INF/opennms/applicationContext-notifd.xml @@ -62,8 +62,6 @@ - - diff --git a/opennms-services/src/test/java/org/opennms/netmgt/mock/EventUtilJdbcImpl.java b/opennms-services/src/test/java/org/opennms/netmgt/mock/EventUtilJdbcImpl.java index 882bad3a6450..7ac7056d3f76 100644 --- a/opennms-services/src/test/java/org/opennms/netmgt/mock/EventUtilJdbcImpl.java +++ b/opennms-services/src/test/java/org/opennms/netmgt/mock/EventUtilJdbcImpl.java @@ -74,7 +74,8 @@ public final class EventUtilJdbcImpl extends AbstractEventUtil { * @throws SQLException * if database error encountered */ - protected String getNodeLabel(long nodeId) throws SQLException { + @Override + public String getNodeLabel(long nodeId) throws SQLException { String nodeLabel = null; java.sql.Connection dbConn = null; @@ -117,22 +118,8 @@ protected String getNodeLabel(long nodeId) throws SQLException { return nodeLabel; } - /** - * Retrieve ifAlias from the snmpinterface table of the database given a particular - * nodeId and ipAddr. - * - * @deprecated Replace with standard DAO calls instead of using JDBC - * @param nodeId - * Node identifier - * @param ipAddr - * Interface IP address - * - * @return ifAlias Retreived ifAlias - * - * @throws SQLException - * if database error encountered - */ - protected String getIfAlias(long nodeId, String ipaddr) throws SQLException { + @Override + public String getIfAlias(long nodeId, String ipaddr) throws SQLException { String ifAlias = null; java.sql.Connection dbConn = null; @@ -171,15 +158,8 @@ protected String getIfAlias(long nodeId, String ipaddr) throws SQLException { return ifAlias; } - /** - * Helper method. - * - * @deprecated Replace with standard DAO calls instead of using JDBC - * @param parm - * @param event - * @return The value of an asset field based on the nodeid of the event - */ - protected String getAssetFieldValue(String parm, long nodeId) { + @Override + public String getAssetFieldValue(String parm, long nodeId) { String retParmVal = null; int end = parm.lastIndexOf(ASSET_END_SUFFIX); // The "asset[" start of this parameter is 6 characters long @@ -223,14 +203,7 @@ protected String getAssetFieldValue(String parm, long nodeId) { return retParmVal; } - /** - * Helper method. - * - * @deprecated Replace with standard DAO calls instead of using JDBC - * @param parm - * @param event - * @return The value of a hardware field based on the nodeid of the event - */ + @Override public String getHardwareFieldValue(String parm, long nodeId) { String retParmVal = null; int end = parm.lastIndexOf(HARDWARE_END_SUFFIX); @@ -349,7 +322,7 @@ public String getHostName(final int nodeId, final String hostip) throws SQLExcep * if database error encountered */ @Override - protected String getForeignSource(long nodeId) throws SQLException { + public String getForeignSource(long nodeId) throws SQLException { String foreignSource = null; java.sql.Connection dbConn = null; try { From 1fb7bdcafa43455ef88ef269d317a7357e284744 Mon Sep 17 00:00:00 2001 From: Benjamin Reed Date: Wed, 23 Nov 2016 12:19:26 -0500 Subject: [PATCH 2/2] HZN-954 make `RUNAS` root until kernel >= 3.11 is more common --- opennms-assemblies/minion/src/main/filtered/etc/minion.conf | 2 +- opennms-assemblies/minion/src/main/filtered/etc/minion.init | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/opennms-assemblies/minion/src/main/filtered/etc/minion.conf b/opennms-assemblies/minion/src/main/filtered/etc/minion.conf index 44b7cc67fb1f..c97215440c16 100644 --- a/opennms-assemblies/minion/src/main/filtered/etc/minion.conf +++ b/opennms-assemblies/minion/src/main/filtered/etc/minion.conf @@ -1,7 +1,7 @@ # OpenNMS Minion Startup Configuration # the user to run minion as -# export RUNAS=minion +# export RUNAS=root # minimum amount of memory for the Minion Karaf container to allocate # export JAVA_MIN_MEM=128M diff --git a/opennms-assemblies/minion/src/main/filtered/etc/minion.init b/opennms-assemblies/minion/src/main/filtered/etc/minion.init index 6e99590cb7e1..23c89b473656 100755 --- a/opennms-assemblies/minion/src/main/filtered/etc/minion.init +++ b/opennms-assemblies/minion/src/main/filtered/etc/minion.init @@ -23,7 +23,7 @@ DESC="Minion" PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin MINION_HOME="/opt/minion" SYSCONFDIR="${MINION_HOME}/etc" -RUNAS=minion +RUNAS=root STOP_RETRIES=10 STOP_WAIT=5