/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.qpid.jms.provider.mock;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.qpid.jms.meta.JmsResource;
/**
* Statistics gathering class used to track activity in all MockProvider
* instances created from the MockProviderFactory.
*/
public class MockProviderStats {
private final MockProviderStats parent;
private final AtomicInteger providersCreated = new AtomicInteger();
private final AtomicInteger connectionAttempts = new AtomicInteger();
private final AtomicInteger closeAttempts = new AtomicInteger();
private final AtomicInteger createResourceCalls = new AtomicInteger();
private final AtomicInteger startResourceCalls = new AtomicInteger();
private final AtomicInteger stopResourceCalls = new AtomicInteger();
private final AtomicInteger destroyResourceCalls = new AtomicInteger();
private final AtomicInteger sendCalls = new AtomicInteger();
private final AtomicInteger acknowledgeCalls = new AtomicInteger();
private final AtomicInteger sessionAcknowledgeCalls = new AtomicInteger();
private final AtomicInteger commitCalls = new AtomicInteger();
private final AtomicInteger rollbackCalls = new AtomicInteger();
private final AtomicInteger recoverCalls = new AtomicInteger();
private final AtomicInteger unsubscribeCalls = new AtomicInteger();
private final AtomicInteger pullCalls = new AtomicInteger();
private final ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger> resourceCreateCalls =
new ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger>();
private final ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger> resourceStartCalls =
new ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger>();
private final ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger> resourceStopCalls =
new ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger>();
private final ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger> resourceDestroyCalls =
new ConcurrentHashMap<Class<? extends JmsResource>, AtomicInteger>();
public MockProviderStats() {
this(null);
}
public MockProviderStats(MockProviderStats parent) {
this.parent = parent;
}
public int getProvidersCreated() {
return providersCreated.get();
}
public void recordProviderCreated() {
if (parent != null) {
parent.recordProviderCreated();
}
providersCreated.incrementAndGet();
}
public int getConnectionAttempts() {
return connectionAttempts.get();
}
public void recordConnectAttempt() {
if (parent != null) {
parent.recordConnectAttempt();
}
connectionAttempts.incrementAndGet();
}
public int getCloseAttempts() {
return closeAttempts.get();
}
public void recordCloseAttempt() {
if (parent != null) {
parent.recordCloseAttempt();
}
closeAttempts.incrementAndGet();
}
public int getCreateResourceCalls() {
return createResourceCalls.get();
}
public int getCreateResourceCalls(Class<? extends JmsResource> resourceType) {
AtomicInteger count = resourceCreateCalls.get(resourceType);
if (count != null) {
return count.get();
}
return 0;
}
public void recordCreateResourceCall(JmsResource resource) {
if (parent != null) {
parent.recordCreateResourceCall(resource);
}
createResourceCalls.incrementAndGet();
AtomicInteger count = resourceCreateCalls.get(resource);
if (count != null) {
count.incrementAndGet();
} else {
resourceCreateCalls.putIfAbsent(resource.getClass(), new AtomicInteger(1));
}
}
public int getStartResourceCalls() {
return startResourceCalls.get();
}
public int getStartResourceCalls(Class<? extends JmsResource> resourceType) {
AtomicInteger count = resourceStartCalls.get(resourceType);
if (count != null) {
return count.get();
}
return 0;
}
public void recordStartResourceCall(JmsResource resource) {
if (parent != null) {
parent.recordStartResourceCall(resource);
}
startResourceCalls.incrementAndGet();
AtomicInteger count = resourceStartCalls.get(resource);
if (count != null) {
count.incrementAndGet();
} else {
resourceStartCalls.putIfAbsent(resource.getClass(), new AtomicInteger(1));
}
}
public int getStopResourceCalls() {
return stopResourceCalls.get();
}
public int getStopResourceCalls(Class<? extends JmsResource> resourceType) {
AtomicInteger count = resourceStopCalls.get(resourceType);
if (count != null) {
return count.get();
}
return 0;
}
public void recordStopResourceCall(JmsResource resource) {
if (parent != null) {
parent.recordStopResourceCall(resource);
}
stopResourceCalls.incrementAndGet();
AtomicInteger count = resourceStopCalls.get(resource);
if (count != null) {
count.incrementAndGet();
} else {
resourceStopCalls.putIfAbsent(resource.getClass(), new AtomicInteger(1));
}
}
public int getDestroyResourceCalls() {
return destroyResourceCalls.get();
}
public int getDestroyResourceCalls(Class<? extends JmsResource> resourceType) {
AtomicInteger count = resourceDestroyCalls.get(resourceType);
if (count != null) {
return count.get();
}
return 0;
}
public void recordDestroyResourceCall(JmsResource resource) {
if (parent != null) {
parent.recordDestroyResourceCall(resource);
}
destroyResourceCalls.incrementAndGet();
AtomicInteger count = resourceDestroyCalls.get(resource);
if (count != null) {
count.incrementAndGet();
} else {
resourceDestroyCalls.putIfAbsent(resource.getClass(), new AtomicInteger(1));
}
}
public int getSendCalls() {
return sendCalls.get();
}
public void recordSendCall() {
if (parent != null) {
parent.recordSendCall();
}
sendCalls.incrementAndGet();
}
public int getAcnkowledgeCalls() {
return acknowledgeCalls.get();
}
public void recoordAcknowledgeCall() {
if (parent != null) {
parent.recoordAcknowledgeCall();
}
acknowledgeCalls.incrementAndGet();
}
public int getSessopmAcknowledgeCalls() {
return sessionAcknowledgeCalls.get();
}
public void recoordSessionAcknowledgeCall() {
if (parent != null) {
parent.recoordSessionAcknowledgeCall();
}
sessionAcknowledgeCalls.incrementAndGet();
}
public int getCommitCalls() {
return commitCalls.get();
}
public void recordCommitCall() {
if (parent != null) {
parent.recordCommitCall();
}
commitCalls.incrementAndGet();
}
public int getRollbackCalls() {
return rollbackCalls.get();
}
public void recordRollbackCall() {
if (parent != null) {
parent.recordRollbackCall();
}
commitCalls.incrementAndGet();
}
public int getRecoverCalls() {
return recoverCalls.get();
}
public void recordRecoverCall() {
if (parent != null) {
parent.recordRecoverCall();
}
recoverCalls.incrementAndGet();
}
public int getUnsubscribeCalls() {
return unsubscribeCalls.get();
}
public void recordUnsubscribeCall() {
if (parent != null) {
parent.recordUnsubscribeCall();
}
unsubscribeCalls.incrementAndGet();
}
public int getPullCalls() {
return pullCalls.get();
}
public void recordPullCall() {
if (parent != null) {
parent.recordPullCall();
}
pullCalls.incrementAndGet();
}
public void reset() {
providersCreated.set(0);
connectionAttempts.set(0);
closeAttempts.set(0);
createResourceCalls.set(0);
startResourceCalls.set(0);
stopResourceCalls.set(0);
destroyResourceCalls.set(0);
sendCalls.set(0);
acknowledgeCalls.set(0);
sessionAcknowledgeCalls.set(0);
commitCalls.set(0);
rollbackCalls.set(0);
recoverCalls.set(0);
unsubscribeCalls.set(0);
pullCalls.set(0);
resourceCreateCalls.clear();
resourceStartCalls.clear();
resourceStopCalls.clear();
resourceDestroyCalls.clear();
}
}