use of org.opennms.netmgt.model.events.DeleteEventVisitor in project opennms by OpenNMS.
the class OnmsNode method mergeIpInterfaces.
/**
* <p>mergeIpInterfaces</p>
*
* @param scannedNode a {@link org.opennms.netmgt.model.OnmsNode} object.
* @param eventForwarder a {@link org.opennms.netmgt.events.api.EventForwarder} object.
* @param deleteMissing a boolean.
*/
public void mergeIpInterfaces(OnmsNode scannedNode, EventForwarder eventForwarder, boolean deleteMissing) {
OnmsIpInterface oldPrimaryInterface = null;
OnmsIpInterface scannedPrimaryIf = null;
// build a map of ipAddrs to ipInterfaces for the scanned node
Map<InetAddress, OnmsIpInterface> ipInterfaceMap = new HashMap<InetAddress, OnmsIpInterface>();
for (OnmsIpInterface iface : scannedNode.getIpInterfaces()) {
if (scannedPrimaryIf == null && iface.isPrimary()) {
scannedPrimaryIf = iface;
} else if (iface.isPrimary()) {
iface.setIsSnmpPrimary(PrimaryType.SECONDARY);
}
ipInterfaceMap.put(iface.getIpAddress(), iface);
}
// for each ipInterface from the database
for (Iterator<OnmsIpInterface> it = getIpInterfaces().iterator(); it.hasNext(); ) {
OnmsIpInterface dbIface = it.next();
// find the corresponding scanned Interface
OnmsIpInterface scannedIface = ipInterfaceMap.get(dbIface.getIpAddress());
// if we can't find a scanned interface remove from the database
if (scannedIface == null) {
if (deleteMissing) {
it.remove();
dbIface.visit(new DeleteEventVisitor(eventForwarder));
} else if (scannedPrimaryIf != null && dbIface.isPrimary()) {
dbIface.setIsSnmpPrimary(PrimaryType.SECONDARY);
oldPrimaryInterface = dbIface;
}
} else {
// else update the database with scanned info
dbIface.mergeInterface(scannedIface, eventForwarder, deleteMissing);
if (scannedPrimaryIf != null && dbIface.isPrimary() && scannedPrimaryIf != scannedIface) {
dbIface.setIsSnmpPrimary(PrimaryType.SECONDARY);
oldPrimaryInterface = dbIface;
}
}
// now remove the interface from the map to indicate it was processed
ipInterfaceMap.remove(dbIface.getIpAddress());
}
// for any remaining scanned interfaces, add them to the database
for (OnmsIpInterface iface : ipInterfaceMap.values()) {
addIpInterface(iface);
if (iface.getIfIndex() != null) {
iface.setSnmpInterface(getSnmpInterfaceWithIfIndex(iface.getIfIndex()));
}
iface.visit(new AddEventVisitor(eventForwarder));
}
if (oldPrimaryInterface != null && scannedPrimaryIf != null) {
EventBuilder bldr = new EventBuilder(EventConstants.PRIMARY_SNMP_INTERFACE_CHANGED_EVENT_UEI, "Provisiond");
bldr.setIpInterface(scannedPrimaryIf);
bldr.setService("SNMP");
bldr.addParam(EventConstants.PARM_OLD_PRIMARY_SNMP_ADDRESS, InetAddressUtils.str(oldPrimaryInterface.getIpAddress()));
bldr.addParam(EventConstants.PARM_NEW_PRIMARY_SNMP_ADDRESS, InetAddressUtils.str(scannedPrimaryIf.getIpAddress()));
eventForwarder.sendNow(bldr.getEvent());
}
}
Aggregations