Search in sources :

Example 21 with NodeLevelResource

use of org.opennms.netmgt.collection.support.builder.NodeLevelResource in project opennms by OpenNMS.

the class WSManCollectorTest method canGenerateManyResources.

/**
 * NMS-8924: Verifies that the generated collection set includes a resource
 * for every node (XML) in the response.
 */
@Test
public void canGenerateManyResources() {
    // Define our resource type, and create a supplier that returns a new instance on every call
    NodeLevelResource node = mock(NodeLevelResource.class);
    ResourceType rt = new ResourceType();
    rt.setName("wsProcIndex");
    rt.setLabel("Processor (wsman)");
    rt.setResourceLabel("Processor (${wmiOSCpuName})");
    StorageStrategy strategy = new StorageStrategy();
    strategy.setClazz(SiblingColumnStorageStrategy.class.getCanonicalName());
    strategy.addParameter(new Parameter("sibling-column-name", "wmiOSCpuName"));
    rt.setStorageStrategy(strategy);
    PersistenceSelectorStrategy pstrategy = new PersistenceSelectorStrategy();
    pstrategy.setClazz(PersistAllSelectorStrategy.class.getCanonicalName());
    rt.setPersistenceSelectorStrategy(pstrategy);
    final AtomicInteger instanceId = new AtomicInteger();
    Supplier<Resource> resourceSupplier = () -> {
        return new GenericTypeResource(node, rt, Integer.toString(instanceId.getAndIncrement()));
    };
    // Define our group
    Group group = new Group();
    group.setName("windows-os-wmi-processor");
    addAttribute(group, "Name", "wmiOSCpuName", AttributeType.STRING);
    addAttribute(group, "InterruptsPersec", "wmiOSCpuIntsPerSec", AttributeType.GAUGE);
    addAttribute(group, "PercentProcessorTime", "wmiOSCpuPctProcTime", AttributeType.GAUGE);
    addAttribute(group, "PercentDPCTime", "wmiOSCpuPctDPCTime", AttributeType.GAUGE);
    addAttribute(group, "PercentInterruptTime", "wmiOSCpuPctIntrTime", AttributeType.GAUGE);
    addAttribute(group, "PercentUserTime", "wmiOSCpuPctUserTime", AttributeType.GAUGE);
    // Mock the agent
    CollectionAgent agent = mock(CollectionAgent.class);
    when(agent.getStorageResourcePath()).thenReturn(ResourcePath.get());
    CollectionSetBuilder builder = new CollectionSetBuilder(agent);
    // Sample data
    XMLTag xmlTag = XMLDoc.newDocument(true).addRoot("body").addTag("Win32_PerfFormattedData_PerfOS_Processor").addTag("Name").setText("c0").addTag("InterruptsPersec").setText("95").gotoRoot().addTag("Win32_PerfFormattedData_PerfOS_Processor").addTag("Name").setText("c1").addTag("InterruptsPersec").setText("100");
    List<Node> nodes = xmlTag.gotoRoot().getChildElement().stream().map(el -> (Node) el).collect(Collectors.toList());
    // Process the data and generate the collection set
    WsManCollector.processEnumerationResults(group, builder, resourceSupplier, nodes);
    // Verify the result
    CollectionSet collectionSet = builder.build();
    assertEquals(Arrays.asList("wsProcIndex/c0/windows-os-wmi-processor/wmiOSCpuName[c0,null]", "wsProcIndex/c0/windows-os-wmi-processor/wmiOSCpuIntsPerSec[null,95.0]", "wsProcIndex/c1/windows-os-wmi-processor/wmiOSCpuName[c1,null]", "wsProcIndex/c1/windows-os-wmi-processor/wmiOSCpuIntsPerSec[null,100.0]"), CollectionSetUtils.flatten(collectionSet));
    assertEquals(Sets.newHashSet("c0", "c1"), CollectionSetUtils.getResourcesByLabel(collectionSet).keySet());
}
Also used : StorageStrategy(org.opennms.netmgt.config.datacollection.StorageStrategy) CollectionAgent(org.opennms.netmgt.collection.api.CollectionAgent) WSManDataCollectionConfigDao(org.opennms.netmgt.dao.WSManDataCollectionConfigDao) Arrays(java.util.Arrays) CollectionStatus(org.opennms.netmgt.collection.api.CollectionStatus) ResourceType(org.opennms.netmgt.config.datacollection.ResourceType) WSManConfigDao(org.opennms.netmgt.dao.WSManConfigDao) Supplier(java.util.function.Supplier) CollectionSetBuilder(org.opennms.netmgt.collection.support.builder.CollectionSetBuilder) XMLDoc(com.mycila.xmltool.XMLDoc) SiblingColumnStorageStrategy(org.opennms.netmgt.dao.support.SiblingColumnStorageStrategy) CollectionException(org.opennms.netmgt.collection.api.CollectionException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) Node(org.w3c.dom.Node) AttributeType(org.opennms.netmgt.collection.api.AttributeType) GenericTypeResource(org.opennms.netmgt.collection.support.builder.GenericTypeResource) Collection(org.opennms.netmgt.config.wsman.Collection) Attrib(org.opennms.netmgt.config.wsman.Attrib) OnmsNode(org.opennms.netmgt.model.OnmsNode) Resource(org.opennms.netmgt.collection.support.builder.Resource) NodeDao(org.opennms.netmgt.dao.api.NodeDao) InetAddressUtils(org.opennms.core.utils.InetAddressUtils) CollectionAttribute(org.opennms.netmgt.collection.api.CollectionAttribute) WSManClientFactory(org.opennms.core.wsman.WSManClientFactory) XMLTag(com.mycila.xmltool.XMLTag) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Group(org.opennms.netmgt.config.wsman.Group) Collectors(java.util.stream.Collectors) Maps(com.google.common.collect.Maps) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) Sets(com.google.common.collect.Sets) Definition(org.opennms.netmgt.config.wsman.Definition) Matchers.any(org.mockito.Matchers.any) PersistenceSelectorStrategy(org.opennms.netmgt.config.datacollection.PersistenceSelectorStrategy) CollectionInitializationException(org.opennms.netmgt.collection.api.CollectionInitializationException) List(java.util.List) PersistAllSelectorStrategy(org.opennms.netmgt.collection.support.PersistAllSelectorStrategy) Assert.assertFalse(org.junit.Assert.assertFalse) CollectionSetUtils(org.opennms.core.collection.test.CollectionSetUtils) ResourcePath(org.opennms.netmgt.model.ResourcePath) CollectionSet(org.opennms.netmgt.collection.api.CollectionSet) Parameter(org.opennms.netmgt.config.datacollection.Parameter) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) Group(org.opennms.netmgt.config.wsman.Group) StorageStrategy(org.opennms.netmgt.config.datacollection.StorageStrategy) SiblingColumnStorageStrategy(org.opennms.netmgt.dao.support.SiblingColumnStorageStrategy) PersistAllSelectorStrategy(org.opennms.netmgt.collection.support.PersistAllSelectorStrategy) CollectionSetBuilder(org.opennms.netmgt.collection.support.builder.CollectionSetBuilder) GenericTypeResource(org.opennms.netmgt.collection.support.builder.GenericTypeResource) Node(org.w3c.dom.Node) OnmsNode(org.opennms.netmgt.model.OnmsNode) GenericTypeResource(org.opennms.netmgt.collection.support.builder.GenericTypeResource) Resource(org.opennms.netmgt.collection.support.builder.Resource) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) XMLTag(com.mycila.xmltool.XMLTag) ResourceType(org.opennms.netmgt.config.datacollection.ResourceType) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) CollectionSet(org.opennms.netmgt.collection.api.CollectionSet) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Parameter(org.opennms.netmgt.config.datacollection.Parameter) CollectionAgent(org.opennms.netmgt.collection.api.CollectionAgent) SiblingColumnStorageStrategy(org.opennms.netmgt.dao.support.SiblingColumnStorageStrategy) PersistenceSelectorStrategy(org.opennms.netmgt.config.datacollection.PersistenceSelectorStrategy) Test(org.junit.Test)

Example 22 with NodeLevelResource

use of org.opennms.netmgt.collection.support.builder.NodeLevelResource in project opennms by OpenNMS.

the class ThresholdingVisitorIT method testThresholdFiltersOnGenericResourceWithSiblingColumnStorageStrategy.

/**
 * Verifies that we are able to generate thresholds for CollectionSets
 * using GenericTypeResource resources that use the SiblingColumnStorageStrategy.
 *
 * Resources of this type are commonly used by the WS-Man collector,
 * where data is returned in a tabular format and the resource name is set using
 * the SiblingColumnStorageStrategy.
 *
 * In the case of the WS-Man collector, the instance ids are generated systematically
 * and will differ from one collection run to another. For this reason, it's important
 * that the thresholder keys it's state based off of the resource label, and not
 * the instance id - this test will validate this.
 */
@Test
public void testThresholdFiltersOnGenericResourceWithSiblingColumnStorageStrategy() throws Exception {
    initFactories("/threshd-configuration.xml", "/test-thresholds-wsman.xml");
    ThresholdingVisitor visitor = createVisitor();
    SnmpCollectionAgent agent = createCollectionAgent();
    NodeLevelResource nodeResource = new NodeLevelResource(agent.getNodeId());
    org.opennms.netmgt.config.datacollection.ResourceType wmiLogicalDisk = createWmiLogicalDiskResourceType();
    // Expect a low threshold event (as configured in test-thresholds-wsman.xml)
    addEvent(// uei
    "uei.opennms.org/threshold/lowThresholdExceededWSManLogStorage", // ipaddr
    "127.0.0.1", // service
    "SNMP", // trigger
    2, // threshold
    10240.0, // rearm
    12288.0, // value
    1.0, // label
    "HarddiskVolume16", // instance
    "volume16-1", // ds
    "wmiLDPctFreeMBytes", // iflabel
    null, // ifindex
    null, m_anticipator, m_anticipatedEvents);
    // Visit the collection set twice (the trigger is set to 2)
    for (int i = 0; i < 2; i++) {
        // A resource for each drive, with a unique instance on each iteration
        GenericTypeResource volume16 = new GenericTypeResource(nodeResource, wmiLogicalDisk, "volume16-" + i);
        GenericTypeResource iDrive = new GenericTypeResource(nodeResource, wmiLogicalDisk, "iDrive" + i);
        // Create the entries in strings.properties
        ResourcePath path = ResourcePath.get("snmp", "1", "wmiLogicalDisk", "HarddiskVolume16");
        m_resourceStorageDao.setStringAttribute(path, "wmiLDName", "HarddiskVolume16");
        path = ResourcePath.get("snmp", "1", "wmiLogicalDisk", "I");
        m_resourceStorageDao.setStringAttribute(path, "wmiLDName", "I");
        // Build a collection set containing attributes for both resources
        CollectionSet collectionSet = new CollectionSetBuilder(agent).withStringAttribute(volume16, "windows-os-wmi-LogicalDisk", "wmiLDName", "HarddiskVolume16").withNumericAttribute(volume16, "windows-os-wmi-LogicalDisk", "wmiLDPctFreeMBytes", 1.0, AttributeType.GAUGE).withNumericAttribute(volume16, "windows-os-wmi-LogicalDisk", "wmiLDPctFreeSpace", 10, AttributeType.GAUGE).withStringAttribute(iDrive, "windows-os-wmi-LogicalDisk", "wmiLDName", "I").withNumericAttribute(iDrive, "windows-os-wmi-LogicalDisk", "wmiLDPctFreeMBytes", 2668498.0, AttributeType.GAUGE).withNumericAttribute(iDrive, "windows-os-wmi-LogicalDisk", "wmiLDPctFreeSpace", 10, AttributeType.GAUGE).build();
        collectionSet.visit(visitor);
    }
    // Verify!
    verifyEvents(0);
}
Also used : ResourcePath(org.opennms.netmgt.model.ResourcePath) CollectionSetBuilder(org.opennms.netmgt.collection.support.builder.CollectionSetBuilder) SnmpCollectionAgent(org.opennms.netmgt.collectd.SnmpCollectionAgent) GenericTypeResource(org.opennms.netmgt.collection.support.builder.GenericTypeResource) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) CollectionSet(org.opennms.netmgt.collection.api.CollectionSet) Test(org.junit.Test)

Example 23 with NodeLevelResource

use of org.opennms.netmgt.collection.support.builder.NodeLevelResource in project opennms by OpenNMS.

the class AbstractXmlCollectionHandler method getCollectionResource.

/**
 * Gets the collection resource.
 *
 * @param agent the collection agent
 * @param instance the resource instance
 * @param resourceType the resource type
 * @param timestamp the timestamp
 * @return the collection resource
 */
protected Resource getCollectionResource(CollectionAgent agent, String instance, String resourceType, Date timestamp) {
    final NodeLevelResource nodeResource = new NodeLevelResource(agent.getNodeId());
    if (CollectionResource.RESOURCE_TYPE_NODE.equalsIgnoreCase(resourceType)) {
        return nodeResource;
    } else {
        DeferredGenericTypeResource resource = new DeferredGenericTypeResource(nodeResource, resourceType, FALLBACK_RESOURCE_TYPE_NAME, instance);
        if (timestamp != null) {
            LOG.debug("getCollectionResource: the date that will be used when updating the RRDs is {}", timestamp);
            resource.setTimestamp(timestamp);
        }
        return resource;
    }
}
Also used : DeferredGenericTypeResource(org.opennms.netmgt.collection.support.builder.DeferredGenericTypeResource) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource)

Example 24 with NodeLevelResource

use of org.opennms.netmgt.collection.support.builder.NodeLevelResource in project opennms by OpenNMS.

the class NSClientCollector method collect.

/**
 * {@inheritDoc}
 */
@Override
public CollectionSet collect(CollectionAgent agent, Map<String, Object> parameters) {
    CollectionSetBuilder builder = new CollectionSetBuilder(agent);
    builder.withStatus(CollectionStatus.FAILED);
    // Find attributes to collect - check groups in configuration. For each,
    // check scheduled nodes to see if that group should be collected
    NsclientCollection collection = (NsclientCollection) parameters.get(NSCLIENT_COLLECTION_KEY);
    NSClientAgentConfig agentConfig = (NSClientAgentConfig) parameters.get(NSCLIENT_AGENT_CONFIG_KEY);
    NSClientAgentState agentState = new NSClientAgentState(agent.getAddress(), parameters, agentConfig);
    if (collection.getWpms().getWpm().size() < 1) {
        LOG.info("No groups to collect.");
        builder.withStatus(CollectionStatus.SUCCEEDED);
        return builder.build();
    }
    // All node resources for NSClient; nothing of interface or "indexed resource" type
    NodeLevelResource nodeResource = new NodeLevelResource(agent.getNodeId());
    for (Wpm wpm : collection.getWpms().getWpm()) {
        // A wpm consists of a list of attributes, identified by name
        if (agentState.shouldCheckAvailability(wpm.getName(), wpm.getRecheckInterval())) {
            LOG.debug("Checking availability of group {}", wpm.getName());
            NsclientManager manager = null;
            try {
                manager = agentState.getManager();
                manager.init();
                NsclientCheckParams params = new NsclientCheckParams(wpm.getKeyvalue());
                NsclientPacket result = manager.processCheckCommand(NsclientManager.CHECK_COUNTER, params);
                manager.close();
                boolean isAvailable = (result.getResultCode() == NsclientPacket.RES_STATE_OK);
                agentState.setGroupIsAvailable(wpm.getName(), isAvailable);
                LOG.debug("Group {} is {}available ", wpm.getName(), (isAvailable ? "" : "not"));
            } catch (NsclientException e) {
                LOG.error("Error checking group ({}) availability", wpm.getName(), e);
                agentState.setGroupIsAvailable(wpm.getName(), false);
            } finally {
                if (manager != null) {
                    manager.close();
                }
            }
        }
        if (agentState.groupIsAvailable(wpm.getName())) {
            // Collect the data
            try {
                NsclientManager manager = agentState.getManager();
                // Open the connection, then do each
                manager.init();
                for (Attrib attrib : wpm.getAttrib()) {
                    NsclientPacket result = null;
                    try {
                        NsclientCheckParams params = new NsclientCheckParams(attrib.getName());
                        result = manager.processCheckCommand(NsclientManager.CHECK_COUNTER, params);
                    } catch (NsclientException e) {
                        LOG.info("unable to collect params for attribute '{}'", attrib.getName(), e);
                    }
                    if (result != null) {
                        if (result.getResultCode() != NsclientPacket.RES_STATE_OK) {
                            LOG.info("not writing parameters for attribute '{}', state is not 'OK'", attrib.getName());
                        } else {
                            // Only numeric data comes back from NSClient in data collection
                            builder.withNumericAttribute(nodeResource, wpm.getName(), attrib.getAlias(), NumericAttributeUtils.parseNumericValue(result.getResponse()), attrib.getType());
                        }
                    }
                }
                builder.withStatus(CollectionStatus.SUCCEEDED);
                // Only close once all the attribs have
                manager.close();
            // been done (optimizing as much as
            // possible with NSClient)
            } catch (NsclientException e) {
                LOG.error("Error collecting data", e);
            }
        }
    }
    return builder.build();
}
Also used : NSClientAgentConfig(org.opennms.protocols.nsclient.NSClientAgentConfig) NsclientPacket(org.opennms.protocols.nsclient.NsclientPacket) CollectionSetBuilder(org.opennms.netmgt.collection.support.builder.CollectionSetBuilder) Wpm(org.opennms.netmgt.config.datacollction.nsclient.Wpm) NsclientCheckParams(org.opennms.protocols.nsclient.NsclientCheckParams) NsclientException(org.opennms.protocols.nsclient.NsclientException) NsclientCollection(org.opennms.netmgt.config.datacollction.nsclient.NsclientCollection) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) NsclientManager(org.opennms.protocols.nsclient.NsclientManager) Attrib(org.opennms.netmgt.config.datacollction.nsclient.Attrib)

Example 25 with NodeLevelResource

use of org.opennms.netmgt.collection.support.builder.NodeLevelResource in project opennms by OpenNMS.

the class StressCommand method generateAndPersistCollectionSets.

private Callable<Void> generateAndPersistCollectionSets(ServiceParameters params, RrdRepository repository, int generatorThreadId, int sleepTimeInMillisBetweenNodes) {
    return new Callable<Void>() {

        @Override
        public Void call() throws Exception {
            for (int nodeId = 0; nodeId < numberOfNodes; nodeId++) {
                if (nodeId % numberOfGeneratorThreads != generatorThreadId) {
                    // A different generator will handle this node
                    continue;
                }
                // Build the node resource
                CollectionAgent agent = new MockCollectionAgent(nodeId);
                NodeLevelResource nodeResource = new NodeLevelResource(nodeId);
                // Don't reuse the persister instance across nodes to help simulate collectd's actual behavior
                Persister persister = persisterFactory.createPersister(params, repository);
                for (int interfaceId = 0; interfaceId < numberOfInterfacesPerNode; interfaceId++) {
                    // Return immediately if the abort flag is set
                    if (abort.get()) {
                        return null;
                    }
                    // Build the interface resource
                    InterfaceLevelResource interfaceResource = new InterfaceLevelResource(nodeResource, "tap" + interfaceId);
                    // Generate the collection set
                    CollectionSet collectionSet = generateCollectionSet(agent, nodeId, interfaceId, interfaceResource);
                    // Persist
                    collectionSet.visit(persister);
                }
                Thread.sleep(sleepTimeInMillisBetweenNodes);
            }
            return null;
        }
    };
}
Also used : InterfaceLevelResource(org.opennms.netmgt.collection.support.builder.InterfaceLevelResource) Persister(org.opennms.netmgt.collection.api.Persister) CollectionAgent(org.opennms.netmgt.collection.api.CollectionAgent) NodeLevelResource(org.opennms.netmgt.collection.support.builder.NodeLevelResource) Callable(java.util.concurrent.Callable) CollectionSet(org.opennms.netmgt.collection.api.CollectionSet)

Aggregations

NodeLevelResource (org.opennms.netmgt.collection.support.builder.NodeLevelResource)28 CollectionSetBuilder (org.opennms.netmgt.collection.support.builder.CollectionSetBuilder)18 CollectionSet (org.opennms.netmgt.collection.api.CollectionSet)10 GenericTypeResource (org.opennms.netmgt.collection.support.builder.GenericTypeResource)10 Test (org.junit.Test)8 CollectionAgent (org.opennms.netmgt.collection.api.CollectionAgent)8 DeferredGenericTypeResource (org.opennms.netmgt.collection.support.builder.DeferredGenericTypeResource)8 Resource (org.opennms.netmgt.collection.support.builder.Resource)8 InterfaceLevelResource (org.opennms.netmgt.collection.support.builder.InterfaceLevelResource)7 Date (java.util.Date)5 AttributeType (org.opennms.netmgt.collection.api.AttributeType)5 ResourcePath (org.opennms.netmgt.model.ResourcePath)5 HashMap (java.util.HashMap)4 List (java.util.List)3 ResourceType (org.opennms.netmgt.collection.api.ResourceType)3 File (java.io.File)2 MalformedURLException (java.net.MalformedURLException)2 RemoteException (java.rmi.RemoteException)2 Map (java.util.Map)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2