use of org.opennms.netmgt.collection.api.CollectionAttribute in project opennms by OpenNMS.
the class WSManCollectorTest method canCollectFromMultivaluedKeyUsingIndexOf.
@Test
public void canCollectFromMultivaluedKeyUsingIndexOf() {
/* The iDrac provides the following keys in the DCIM_ComputerSystem entry:
* <n1:IdentifyingDescriptions>CIM:GUID</n1:IdentifyingDescriptions>
* <n1:IdentifyingDescriptions>CIM:Tag</n1:IdentifyingDescriptions>
* <n1:IdentifyingDescriptions>DCIM:ServiceTag</n1:IdentifyingDescriptions>
* <n1:OtherIdentifyingInfo>44454C4C-3700-104A-8052-C3C04BB25031</n1:OtherIdentifyingInfo>
* <n1:OtherIdentifyingInfo>mainsystemchassis</n1:OtherIdentifyingInfo>
* <n1:OtherIdentifyingInfo>C7BBBP1</n1:OtherIdentifyingInfo>
*
* We want to be able to collect the value of 'OtherIdentifyingInfo' at the same
* index where 'IdentifyingDescriptions' has the value of 'DCIM:ServiceTag'.
*/
Group group = new Group();
group.setName("DCIM_ComputerSystem");
Attrib attr = new Attrib();
attr.setName("OtherIdentifyingInfo");
attr.setAlias("ServiceTag");
attr.setIndexOf("#IdentifyingDescriptions matches '.*ServiceTag'");
attr.setType(AttributeType.STRING);
group.addAttrib(attr);
CollectionAgent agent = mock(CollectionAgent.class);
when(agent.getStorageResourcePath()).thenReturn(ResourcePath.get());
CollectionSetBuilder builder = new CollectionSetBuilder(agent);
Supplier<Resource> resourceSupplier = () -> mock(NodeLevelResource.class);
XMLTag xmlTag = XMLDoc.newDocument(true).addRoot("body").addTag("DCIM_ComputerSystem").addTag("IdentifyingDescriptions").setText("CIM:GUID").addTag("IdentifyingDescriptions").setText("DCIM:ServiceTag").addTag("IdentifyingDescriptions").setText("CIM:Tag").addTag("OtherIdentifyingInfo").setText("44454C4C-3700-104A-8052-C3C04BB25031").addTag("OtherIdentifyingInfo").setText("C7BBBP1").addTag("OtherIdentifyingInfo").setText("mainsystemchassis");
List<Node> nodes = xmlTag.gotoRoot().getChildElement().stream().map(el -> (Node) el).collect(Collectors.toList());
WsManCollector.processEnumerationResults(group, builder, resourceSupplier, nodes);
// Verify
Map<String, CollectionAttribute> attributesByName = CollectionSetUtils.getAttributesByName(builder.build());
assertEquals("C7BBBP1", attributesByName.get("ServiceTag").getStringValue());
}
use of org.opennms.netmgt.collection.api.CollectionAttribute in project opennms by OpenNMS.
the class AliasedGroup method visit.
/**
* {@inheritDoc}
*/
@Override
public void visit(CollectionSetVisitor visitor) {
visitor.visitGroup(this);
for (CollectionAttribute attr : getAttributes()) {
AliasedAttribute aliased = new AliasedAttribute(getResource(), (SnmpAttribute) attr);
LOG.debug("visiting at aliased = {}", aliased);
aliased.visit(visitor);
}
visitor.completeGroup(this);
}
use of org.opennms.netmgt.collection.api.CollectionAttribute in project opennms by OpenNMS.
the class SnmpAttributeTest method testPersisting.
@Ignore
private void testPersisting(String matchValue, SnmpValue snmpValue) throws Exception {
OnmsNode node = new OnmsNode();
node.setId(3);
OnmsIpInterface ipInterface = new OnmsIpInterface();
ipInterface.setId(1);
ipInterface.setNode(node);
ipInterface.setIpAddress(InetAddressUtils.addr("192.168.1.1"));
// It used to be 3, but I think it is more correct to use getStoreDir from DefaultCollectionAgentService on DefaultCollectionAgent (NMS-7516)
expect(m_ipInterfaceDao.load(1)).andReturn(ipInterface).times(5);
expect(m_rrdStrategy.getDefaultFileExtension()).andReturn(".myLittleEasyMockedStrategyAndMe").anyTimes();
expect(m_rrdStrategy.createDefinition(isA(String.class), isA(String.class), isA(String.class), anyInt(), isAList(RrdDataSource.class), isAList(String.class))).andReturn(new Object());
m_rrdStrategy.createFile(isA(Object.class));
expect(m_rrdStrategy.openFile(isA(String.class))).andReturn(new Object());
m_rrdStrategy.updateFile(isA(Object.class), isA(String.class), matches(".*:" + matchValue));
m_rrdStrategy.closeFile(isA(Object.class));
m_mocks.replayAll();
SnmpCollectionAgent agent = DefaultSnmpCollectionAgent.create(ipInterface.getId(), m_ipInterfaceDao, new MockPlatformTransactionManager());
OnmsSnmpCollection snmpCollection = new OnmsSnmpCollection(agent, new ServiceParameters(new HashMap<String, Object>()), new MockDataCollectionConfig(), m_locationAwareSnmpClient);
NodeResourceType resourceType = new NodeResourceType(agent, snmpCollection);
NodeInfo nodeInfo = resourceType.getNodeInfo();
MibObject mibObject = new MibObject();
mibObject.setOid(".1.3.6.1.4.1.12238.55.9997.4.1.2.9.116.101.109.112.95.117.108.107.111");
mibObject.setInstance("1");
mibObject.setAlias("temp_ulko");
mibObject.setType("gauge");
NumericAttributeType attributeType = new NumericAttributeType(resourceType, snmpCollection.getName(), mibObject, new AttributeGroupType("foo", AttributeGroupType.IF_TYPE_IGNORE));
attributeType.storeResult(new SnmpCollectionSet(agent, snmpCollection, m_locationAwareSnmpClient), null, new SnmpResult(mibObject.getSnmpObjId(), new SnmpInstId(mibObject.getInstance()), snmpValue));
RrdRepository repository = createRrdRepository();
repository.setRraList(Collections.singletonList("RRA:AVERAGE:0.5:1:2016"));
RrdPersisterFactory persisterFactory = new RrdPersisterFactory();
persisterFactory.setRrdStrategy(m_rrdStrategy);
persisterFactory.setResourceStorageDao(m_resourceStorageDao);
CollectionSetVisitor persister = persisterFactory.createPersister(new ServiceParameters(Collections.emptyMap()), repository);
final AtomicInteger count = new AtomicInteger(0);
nodeInfo.visit(new CollectionSetVisitorWrapper(persister) {
@Override
public void visitAttribute(CollectionAttribute attribute) {
super.visitAttribute(attribute);
count.incrementAndGet();
}
});
assertEquals(1, count.get());
}
use of org.opennms.netmgt.collection.api.CollectionAttribute in project opennms by OpenNMS.
the class BasePersisterTest method testPersistStringAttributeUsingBuilder.
/**
* Test for bug #1817 where a string attribute will get persisted to
* both strings.properties and an RRD file if it is a numeric value.
*/
@Test
public void testPersistStringAttributeUsingBuilder() throws Exception {
initPersister();
File nodeDir = m_fileAnticipator.expecting(getSnmpRrdDirectory(), m_node.getId().toString());
m_fileAnticipator.expecting(nodeDir, RrdResourceAttributeUtils.STRINGS_PROPERTIES_FILE_NAME);
CollectionAttribute attribute = buildStringAttribute();
m_persister.pushShouldPersist(attribute.getResource());
m_persister.pushShouldPersist(attribute);
m_persister.setBuilder(m_persister.createBuilder(attribute.getResource(), attribute.getName(), Sets.newHashSet(attribute.getAttributeType())));
// This will end up calling m_persister.persistStringAttribute(attribute);
m_persister.storeAttribute(attribute);
m_persister.commitBuilder();
m_persister.popShouldPersist();
}
use of org.opennms.netmgt.collection.api.CollectionAttribute in project opennms by OpenNMS.
the class CollectionResourceWrapperIT method addAttributeToCollectionResource.
private SnmpAttribute addAttributeToCollectionResource(SnmpCollectionResource resource, String attributeName, AttributeType attributeType, String attributeInstance, String value) {
MibObject object = createMibObject(attributeType, attributeName, attributeInstance);
SnmpAttributeType objectType = null;
SnmpValue snmpValue = null;
if (AttributeType.STRING.equals(attributeType)) {
objectType = new SnmpAttributeType(resource.getResourceType(), "default", object, new AttributeGroupType("mibGroup", AttributeGroupType.IF_TYPE_IGNORE)) {
@Override
public AttributeType getType() {
return AttributeType.STRING;
}
@Override
public void storeAttribute(CollectionAttribute attribute, Persister persister) {
persister.persistStringAttribute(attribute);
}
};
snmpValue = SnmpUtils.getValueFactory().getOctetString(value.getBytes());
} else {
objectType = new NumericAttributeType(resource.getResourceType(), "default", object, new AttributeGroupType("mibGroup", AttributeGroupType.IF_TYPE_IGNORE));
long v = Long.parseLong(value);
snmpValue = AttributeType.COUNTER.equals(attributeType) ? SnmpUtils.getValueFactory().getCounter32(v) : SnmpUtils.getValueFactory().getGauge32(v);
}
resource.setAttributeValue(objectType, snmpValue);
return new SnmpAttribute(resource, objectType, snmpValue);
}
Aggregations