Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/OpenNMS/opennms
Browse files Browse the repository at this point in the history
  • Loading branch information
soleger committed Jul 28, 2014
2 parents beebcbe + ed8a015 commit 672c313
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 60 deletions.
Expand Up @@ -55,7 +55,6 @@
import org.opennms.netmgt.rrd.RrdRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;

/**
* DefaultDataCollectionConfigDao
Expand All @@ -72,43 +71,48 @@ public class DefaultDataCollectionConfigDao extends AbstractJaxbConfigDao<Dataco

private String m_configDirectory;

// have we validated the config since last reloading?
private boolean m_validated = false;
private RuntimeException m_validationException = null;

private List<String> dataCollectionGroups = new ArrayList<String>();
private Map<String, ResourceType> resourceTypes = new HashMap<String, ResourceType>();

public DefaultDataCollectionConfigDao() {
super(DatacollectionConfig.class, "data-collection");
}

@Override
protected DatacollectionConfig loadConfig(final Resource resource) {
m_validated = false;
m_validationException = null;
return super.loadConfig(resource);
}

@Override
protected DatacollectionConfig translateConfig(final DatacollectionConfig config) {
final DataCollectionConfigParser parser = new DataCollectionConfigParser(getConfigDirectory());
resourceTypes.clear();

// Create a special collection to hold all resource types, because they should be defined only once.
final SnmpCollection resourceTypeCollection = new SnmpCollection();
resourceTypeCollection.setName("__resource_type_collection");

// Updating Configured Collections
for (final SnmpCollection collection : config.getSnmpCollections()) {
parser.parseCollection(collection);
// Save local resource types
for (final ResourceType rt : collection.getResourceTypes()) {
resourceTypeCollection.addResourceType(rt);
resourceTypes.put(rt.getName(), rt);
}
// Remove local resource types
collection.setResourceTypes(new ArrayList<ResourceType>());
}

// Create a special collection to hold all resource types, because they should be defined only once.
final SnmpCollection resourceTypeCollection = new SnmpCollection();
resourceTypeCollection.setName("__resource_type_collection");
// Save external Resource Types
for (final ResourceType rt : parser.getAllResourceTypes()) {
resourceTypeCollection.addResourceType(rt);
resourceTypes.put(rt.getName(), rt);
}

resourceTypeCollection.setGroups(new Groups());
resourceTypeCollection.setSystems(new Systems());
config.insertSnmpCollection(resourceTypeCollection);
dataCollectionGroups.clear();
dataCollectionGroups.addAll(parser.getExternalGroupMap().keySet());

validateResourceTypes(config.getSnmpCollections(), resourceTypes.keySet());

return config;
}

Expand Down Expand Up @@ -287,30 +291,7 @@ public List<MibObject> getMibObjectList(final String cName, final String aSysoid

@Override
public Map<String, ResourceType> getConfiguredResourceTypes() {
final Map<String,ResourceType> map = new HashMap<String,ResourceType>();

final Collection<SnmpCollection> snmpCollections = getContainer().getObject().getSnmpCollections();
for (final SnmpCollection collection : snmpCollections) {
for (final ResourceType resourceType : collection.getResourceTypes()) {
map.put(resourceType.getName(), resourceType);
}
}

// FIXME: I guarantee there's a cleaner way to do this, but I didn't want to refactor everything
// that calls this just to optimize out validation.
if (!m_validated) {
try {
validateResourceTypes(getContainer(), map.keySet());
} catch (final RuntimeException e) {
m_validationException = e;
throw e;
}
} else {
if (m_validationException != null) {
throw m_validationException;
}
}
return Collections.unmodifiableMap(map);
return Collections.unmodifiableMap(resourceTypes);
}

@Override
Expand Down Expand Up @@ -569,7 +550,7 @@ private static Map<String,Map<String,Group>> getCollectionGroupMap(FileReloadCon
return Collections.unmodifiableMap(collectionGroupMap);
}

private static void validateResourceTypes(final FileReloadContainer<DatacollectionConfig> container, final Set<String> allowedResourceTypes) {
private void validateResourceTypes(final Collection<SnmpCollection> snmpCollections, final Set<String> allowedResourceTypes) {
final String configuredString;
if (allowedResourceTypes.size() == 0) {
configuredString = "(none)";
Expand All @@ -578,26 +559,26 @@ private static void validateResourceTypes(final FileReloadContainer<Datacollecti
}

final String allowableValues = "any positive number, 'ifIndex', or any of the configured resourceTypes: " + configuredString;
for (final SnmpCollection collection : container.getObject().getSnmpCollections()) {
for (final SnmpCollection collection : snmpCollections) {
final Groups groups = collection.getGroups();
if (groups != null) {
for (final Group group : groups.getGroups()) {
for (final MibObj mibObj : group.getMibObjs()) {
final String instance = mibObj.getInstance();
if (instance == null) continue;
for (final Group group : groups.getGroups()) {
for (final MibObj mibObj : group.getMibObjs()) {
final String instance = mibObj.getInstance();
if (instance == null) continue;
if (MibObject.INSTANCE_IFINDEX.equals(instance)) continue;
if (allowedResourceTypes.contains(instance)) continue;
try {
// Check to see if the value is a non-negative integer
if (Integer.parseInt(instance.trim()) >= 0) {
continue;
}
} catch (NumberFormatException e) {}

// XXX this should be a better exception
throw new IllegalArgumentException("instance '" + instance + "' invalid in mibObj definition for OID '" + mibObj.getOid() + "' in collection '" + collection.getName() + "' for group '" + group.getName() + "'. Allowable instance values: " + allowableValues);
}
}
try {
// Check to see if the value is a non-negative integer
if (Integer.parseInt(instance.trim()) >= 0) {
continue;
}
} catch (NumberFormatException e) {}

// XXX this should be a better exception
throw new IllegalArgumentException("instance '" + instance + "' invalid in mibObj definition for OID '" + mibObj.getOid() + "' in collection '" + collection.getName() + "' for group '" + group.getName() + "'. Allowable instance values: " + allowableValues);
}
}
}
}
}
Expand Down
Expand Up @@ -31,11 +31,9 @@
import org.junit.Assert;
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.test.JUnitConfigurationEnvironment;

import org.springframework.test.context.ContextConfiguration;

@RunWith(OpenNMSJUnit4ClassRunner.class)
Expand All @@ -54,4 +52,15 @@ public void testDefaultReloadInterval() {
Assert.assertTrue(config instanceof DefaultDataCollectionConfigDao);
Assert.assertEquals(new Long(60000), ((DefaultDataCollectionConfigDao) config).getReloadCheckInterval());
}

@Test
public void testResourceTypes() {
long start = System.nanoTime();
DataCollectionConfigDao config = DataCollectionConfigFactory.getInstance();
for (int i=0; i<1000; i++) {
Assert.assertNotNull(config.getConfiguredResourceTypes().get("hrStorageIndex"));
}
long end = System.nanoTime();
System.err.println("Test took " + ((end - start)/1000) + " us");
}
}
2 changes: 1 addition & 1 deletion opennms-webapp/src/main/webapp/element/index.jsp
Expand Up @@ -74,7 +74,7 @@
<form action="element/nodeList.htm" method="get">
<p align="right">TCP/IP Address like:
<input type="hidden" name="listInterfaces" value="false"/>
<input type="text" name="iplike" value="*.*.*.*" />
<input type="text" name="iplike" value="" placeholder="*.*.*.*" />
<input type="submit" value="Search"/></p>
</form>

Expand Down
Expand Up @@ -59,7 +59,7 @@
<form action="element/nodeList.htm" method="get">
<font style="font-size: 70%; line-height: 1.25em; align=left">TCP/IP Address like:</font><br />
<input type="hidden" name="listInterfaces" value="false"/>
<input type="text" name="iplike" value="*.*.*.*" />
<input type="text" name="iplike" value="" placeholder="*.*.*.*" />
<input type="submit" value="Search"/>
</form>
<form action="element/nodeList.htm" method="get">
Expand Down

0 comments on commit 672c313

Please sign in to comment.