Search in sources :

Example 6 with DeleteEventVisitor

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());
    }
}
Also used : AddEventVisitor(org.opennms.netmgt.model.events.AddEventVisitor) EventBuilder(org.opennms.netmgt.model.events.EventBuilder) HashMap(java.util.HashMap) InetAddress(java.net.InetAddress) DeleteEventVisitor(org.opennms.netmgt.model.events.DeleteEventVisitor)

Aggregations

DeleteEventVisitor (org.opennms.netmgt.model.events.DeleteEventVisitor)6 Transactional (org.springframework.transaction.annotation.Transactional)4 OnmsIpInterface (org.opennms.netmgt.model.OnmsIpInterface)3 OnmsNode (org.opennms.netmgt.model.OnmsNode)3 HashMap (java.util.HashMap)2 AddEventVisitor (org.opennms.netmgt.model.events.AddEventVisitor)2 InetAddress (java.net.InetAddress)1 OnmsMonitoredService (org.opennms.netmgt.model.OnmsMonitoredService)1 EventBuilder (org.opennms.netmgt.model.events.EventBuilder)1