use of org.opennms.netmgt.snmp.SnmpObjId in project opennms by OpenNMS.
the class InstanceStrategy method call.
@Override
public OnmsAccessPointCollection call() throws IOException {
OnmsAccessPointCollection apsUp = new OnmsAccessPointCollection();
InetAddress ipaddr = m_iface.getIpAddress();
// Retrieve this interface's SNMP peer object
SnmpAgentConfig agentConfig = getAgentConfig(ipaddr);
final String hostAddress = InetAddressUtils.str(ipaddr);
LOG.debug("poll: setting SNMP peer attribute for interface {}", hostAddress);
// Get configuration parameters
String oid = ParameterMap.getKeyedString(m_parameters, "oid", null);
if (oid == null) {
throw new IllegalStateException("oid parameter is not set.");
}
String operator = ParameterMap.getKeyedString(m_parameters, "operator", null);
String operand = ParameterMap.getKeyedString(m_parameters, "operand", null);
String matchstr = ParameterMap.getKeyedString(m_parameters, "match", "true");
LOG.debug("InstanceStrategy.poll: SnmpAgentConfig address= {}", agentConfig);
// Establish SNMP session with interface
try {
SnmpObjId snmpObjectId = SnmpObjId.get(oid);
Map<SnmpInstId, SnmpValue> map = SnmpUtils.getOidValues(agentConfig, "AccessPointMonitor::InstanceStrategy", snmpObjectId);
if (map.size() <= 0) {
throw new IOException("No entries found in table (possible timeout).");
}
for (Map.Entry<SnmpInstId, SnmpValue> entry : map.entrySet()) {
boolean isUp = false;
SnmpInstId instance = entry.getKey();
SnmpValue value = entry.getValue();
// Check the value against the configured criteria
if (meetsCriteria(value, operator, operand)) {
if ("true".equals(matchstr)) {
isUp = true;
}
} else if ("false".equals(matchstr)) {
isUp = true;
}
// of online APs
if (isUp) {
String physAddr = getPhysAddrFromInstance(instance);
LOG.debug("AP at instance '{}' with MAC '{}' is considered to be ONLINE on controller '{}'", instance, physAddr, m_iface.getIpAddress());
OnmsAccessPoint ap = m_accessPointDao.get(physAddr);
if (ap != null) {
if (ap.getPollingPackage().compareToIgnoreCase(getPackage().getName()) == 0) {
// Save the controller's IP address
ap.setControllerIpAddress(ipaddr);
apsUp.add(ap);
} else {
LOG.info("AP with MAC '{}' is in a different package.", physAddr);
}
} else {
LOG.info("No matching AP in database for instance '{}'.", instance);
}
}
}
} catch (NumberFormatException e) {
LOG.error("Number operator used on a non-number ", e);
} catch (IllegalArgumentException e) {
LOG.error("Invalid SNMP Criteria ", e);
} catch (InterruptedException e) {
LOG.error("Interrupted while polling {}", hostAddress, e);
}
return apsUp;
}
Aggregations