2 * Copyright (c) 2016 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.bgp.rib.impl.stats.peer.route;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.base.Preconditions;
15 import java.util.concurrent.ConcurrentHashMap;
16 import java.util.concurrent.atomic.LongAdder;
17 import javax.annotation.Nonnull;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
22 public final class PerTableTypeRouteCounter {
23 private static final Logger LOG = LoggerFactory.getLogger(PerTableTypeRouteCounter.class);
25 private final Map<TablesKey, LongAdder> counters = new ConcurrentHashMap<>();
27 public PerTableTypeRouteCounter(@Nonnull final Set<TablesKey> tablesKeySet) {
31 public PerTableTypeRouteCounter() {
34 private synchronized void init(@Nonnull final Set<TablesKey> tablesKeySet) {
35 tablesKeySet.forEach(this::init);
38 public final synchronized LongAdder init(@Nonnull final TablesKey tablesKey) {
39 LongAdder counter = this.counters.get(requireNonNull(tablesKey));
40 if (counter == null) {
41 counter = new LongAdder();
42 this.counters.put(tablesKey, counter);
44 LOG.debug("Initializing route counter for tablesKey {}", tablesKey);
50 * Get the counter for given tablesKey. Return an empty counter if it doesn't exist
51 * NOTE: the created empty counter won't be put into the original map
55 @Nonnull public final LongAdder getCounterOrDefault(@Nonnull final TablesKey tablesKey) {
56 return this.counters.getOrDefault(requireNonNull(tablesKey), new LongAdder());
60 * Get the counter with given tablesKey. Create an empty counter if it doesn't exist
61 * This method will put the created empty counter back to map
65 public final LongAdder getCounterOrSetDefault(@Nonnull final TablesKey tablesKey) {
66 if (!this.counters.containsKey(tablesKey)) {
67 return init(tablesKey);
70 return this.counters.get(requireNonNull(tablesKey));
73 public final Map<TablesKey, LongAdder> getCounters() {
77 public final void resetAll() {
78 LOG.debug("Resetting all route counters..");
79 this.counters.values().forEach(LongAdder::reset);
82 public void setValueToCounterOrSetDefault(final TablesKey tablesKey, final int size) {
83 final LongAdder counter = getCounterOrSetDefault(tablesKey);