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 com.google.common.collect.ImmutableMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.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.network.instance.protocol.PeerGroupStateAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.PeerGroupStateAugmentationBuilder;
import org.opendaylight.yangtools.yang.common.Uint32;

/**
 * Util for create OpenConfig Peer group with corresponding openConfig state.
 */
public final class PeerGroupUtil {
    private PeerGroupUtil() {
        // Hidden on purpose
    }

    /**
     * Build Openconfig PeerGroups containing Peer group stats from a list of BGPPeerGroupState.
     *
     * @param bgpStateConsumer providing BGPPeerGroupState
     * @return PeerGroups containing Peer group stats
     */

    public static @Nullable PeerGroups buildPeerGroups(final @NonNull List bgpStateConsumer) {
        final Map> peerGroups = bgpStateConsumer.stream()
                .filter(state -> state.getGroupId() != null)
                .collect(Collectors.groupingBy(BGPPeerState::getGroupId));
        if (peerGroups.isEmpty()) {
            return null;
        }

        return new PeerGroupsBuilder()
                .setPeerGroup(peerGroups.entrySet().stream()
                    .map(entry -> buildPeerGroupState(entry.getKey(), entry.getValue()))
                    .collect(ImmutableMap.toImmutableMap(PeerGroup::key, Function.identity())))
                .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
     */
    public static @NonNull PeerGroup buildPeerGroupState(final @NonNull String groupId,
            final @NonNull List groups) {
        final PeerGroupStateAugmentation groupState = new PeerGroupStateAugmentationBuilder()
                .setTotalPrefixes(Uint32.saturatedOf(groups.stream().mapToLong(BGPPeerState::getTotalPrefixes).sum()))
                .setTotalPaths(Uint32.saturatedOf(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(groupState).build()).build();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy