All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opendaylight.protocol.bgp.state.PeerGroupUtil Maven / Gradle / Ivy

There is a newer version: 0.22.6
Show newest version
/*
 * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */

package org.opendaylight.protocol.bgp.state;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opendaylight.protocol.bgp.rib.spi.state.BGPPeerState;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroup;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroupBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.PeerGroups;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.PeerGroupsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.PeerGroupStateAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.PeerGroupStateAugmentationBuilder;

/**
 * Util for create OpenConfig Peer group with corresponding openConfig state.
 */
public final class PeerGroupUtil {
    private PeerGroupUtil() {
        throw new UnsupportedOperationException();
    }

    /**
     * Build Openconfig PeerGroups containing Peer group stats from a list of BGPPeerGroupState.
     *
     * @param bgpStateConsumer providing BGPPeerGroupState
     * @return PeerGroups containing Peer group stats
     */
    @Nullable
    public static PeerGroups buildPeerGroups(@Nonnull final List bgpStateConsumer) {
        final Map> peerGroups = bgpStateConsumer.stream()
                .filter(state -> state.getGroupId() != null)
                .collect(Collectors.groupingBy(BGPPeerState::getGroupId));
        if (peerGroups.isEmpty()) {
            return null;
        }

        final List peerGroupsList = peerGroups.entrySet().stream()
                .map(entry -> buildPeerGroupState(entry.getKey(), entry.getValue()))
                .collect(Collectors.toList());
        return new PeerGroupsBuilder().setPeerGroup(peerGroupsList).build();
    }

    /**
     * Build Openconfig PeerGroup containing Peer group stats from BGPPeerGroupState.
     *
     * @param groupId Peer group Id
     * @param groups  providing state of the group
     * @return PeerGroups containing Peer group stats
     */
    @Nonnull
    public static PeerGroup buildPeerGroupState(@Nonnull final String groupId, @Nonnull List groups) {
        final PeerGroupStateAugmentation groupState = new PeerGroupStateAugmentationBuilder()
                .setTotalPrefixes(groups.stream().mapToLong(BGPPeerState::getTotalPrefixes).sum())
                .setTotalPaths(groups.stream().mapToLong(BGPPeerState::getTotalPathsCount).sum())
                .build();

        return new PeerGroupBuilder()
                .setPeerGroupName(groupId)
                .setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group
                        .StateBuilder().addAugmentation(PeerGroupStateAugmentation.class, groupState).build()).build();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy