/*********************************************************************************** * * Copyright (c) 2014 Kamil Baczkowicz * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * * Kamil Baczkowicz - initial API and implementation and/or initial documentation * */ package pl.baczkowicz.mqttspy.stats; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Connection statistics for a single interval. */ public class ConnectionIntervalStats { public Map<String, Double> messageCount = new HashMap<>(); public double overallCount = 0; public void add(final String topic) { overallCount++; if (messageCount.get(topic) == null) { messageCount.put(topic, (double) 1); } else { messageCount.put(topic, messageCount.get(topic) + 1); } } public void add(final List<String> topics) { overallCount++; for (final String topic : topics) { if (messageCount.get(topic) == null) { messageCount.put(topic, (double) 1); } else { messageCount.put(topic, messageCount.get(topic) + 1); } } } public void reset() { overallCount = 0; messageCount.clear(); } public void resetTopic(final String topic) { messageCount.put(topic, (double) 0); } public ConnectionIntervalStats average(final int interval) { final ConnectionIntervalStats avg = new ConnectionIntervalStats(); avg.overallCount = overallCount / interval; for (final String topic : messageCount.keySet()) { avg.messageCount.put(topic, messageCount.get(topic) / interval); } return avg; } public void plus(final ConnectionIntervalStats cs) { overallCount = overallCount + cs.overallCount; for (final String topic : cs.messageCount.keySet()) { if (messageCount.containsKey(topic)) { messageCount.put(topic, messageCount.get(topic) + cs.messageCount.get(topic)); } else { messageCount.put(topic, cs.messageCount.get(topic)); } } } public void minus(final ConnectionIntervalStats cs) { overallCount = overallCount - cs.overallCount; for (final String topic : cs.messageCount.keySet()) { if (messageCount.containsKey(topic)) { messageCount.put(topic, messageCount.get(topic) - cs.messageCount.get(topic)); } } } }