use of org.opennms.netmgt.config.datacollection.Groups in project opennms by OpenNMS.
the class DefaultDataCollectionConfigDao method translateConfig.
@Override
protected DatacollectionConfig translateConfig(final DatacollectionConfig config) {
final DataCollectionConfigParser parser = new DataCollectionConfigParser(getConfigDirectory());
resourceTypes.clear();
final Map<String, DatacollectionGroup> externalGroupMap = parser.getExternalGroupMap();
// 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>());
// Save external Resource Types
for (IncludeCollection include : collection.getIncludeCollections()) {
if (include.getDataCollectionGroup() != null) {
DatacollectionGroup group = externalGroupMap.get(include.getDataCollectionGroup());
for (final ResourceType rt : group.getResourceTypes()) {
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;
}
use of org.opennms.netmgt.config.datacollection.Groups in project opennms by OpenNMS.
the class DefaultDataCollectionConfigDao method validateResourceTypes.
private void validateResourceTypes(final Collection<SnmpCollection> snmpCollections, final Set<String> allowedResourceTypes) {
final String configuredString;
if (allowedResourceTypes.size() == 0) {
configuredString = "(none)";
} else {
configuredString = StringUtils.join(allowedResourceTypes, ", ");
}
final String allowableValues = "any positive number, 'ifIndex', or any of the configured resourceTypes: " + configuredString;
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;
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);
}
}
}
}
}
use of org.opennms.netmgt.config.datacollection.Groups in project opennms by OpenNMS.
the class DefaultDataCollectionConfigDao method getCollectionGroupMap.
private static Map<String, Map<String, Group>> getCollectionGroupMap(FileReloadContainer<DatacollectionConfig> container) {
// Build collection map which is a hash map of Collection
// objects indexed by collection name...also build
// collection group map which is a hash map indexed
// by collection name with a hash map as the value
// containing a map of the collections's group names
// to the Group object containing all the information
// for that group. So the associations are:
//
// CollectionMap
// collectionName -> Collection
//
// CollectionGroupMap
// collectionName -> groupMap
//
// GroupMap
// groupMapName -> Group
//
// This is parsed and built at initialization for
// faster processing at run-timne.
//
final Map<String, Map<String, Group>> collectionGroupMap = new HashMap<String, Map<String, Group>>();
for (final SnmpCollection collection : container.getObject().getSnmpCollections()) {
// Build group map for this collection
final Map<String, Group> groupMap = new HashMap<String, Group>();
final Groups groups = collection.getGroups();
if (groups != null) {
for (final Group group : groups.getGroups()) {
groupMap.put(group.getName(), group);
}
}
collectionGroupMap.put(collection.getName(), groupMap);
}
return Collections.unmodifiableMap(collectionGroupMap);
}
Aggregations