Statistics.java
/*
* 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.commons.jcs3.jcache;
import java.util.concurrent.atomic.AtomicLong;
public class Statistics
{
private volatile boolean active = true;
private final AtomicLong removals = new AtomicLong();
private final AtomicLong expiries = new AtomicLong();
private final AtomicLong puts = new AtomicLong();
private final AtomicLong hits = new AtomicLong();
private final AtomicLong misses = new AtomicLong();
private final AtomicLong evictions = new AtomicLong();
private final AtomicLong putTimeTaken = new AtomicLong();
private final AtomicLong getTimeTaken = new AtomicLong();
private final AtomicLong removeTimeTaken = new AtomicLong();
public long getHits()
{
return hits.get();
}
public long getMisses()
{
return misses.get();
}
public long getPuts()
{
return puts.get();
}
public long getRemovals()
{
return removals.get();
}
public long getEvictions()
{
return evictions.get();
}
public long getTimeTakenForGets()
{
return getTimeTaken.get();
}
public long getTimeTakenForPuts()
{
return putTimeTaken.get();
}
public long getTimeTakenForRemovals()
{
return removeTimeTaken.get();
}
public void increaseRemovals(final long number)
{
increment(removals, number);
}
public void increaseExpiries(final long number)
{
increment(expiries, number);
}
public void increasePuts(final long number)
{
increment(puts, number);
}
public void increaseHits(final long number)
{
increment(hits, number);
}
public void increaseMisses(final long number)
{
increment(misses, number);
}
public void increaseEvictions(final long number)
{
increment(evictions, number);
}
public void addGetTime(final long duration)
{
increment(duration, getTimeTaken);
}
public void addPutTime(final long duration)
{
increment(duration, putTimeTaken);
}
public void addRemoveTime(final long duration)
{
increment(duration, removeTimeTaken);
}
private void increment(final AtomicLong counter, final long number)
{
if (!active)
{
return;
}
counter.addAndGet(number);
}
private void increment(final long duration, final AtomicLong counter)
{
if (!active)
{
return;
}
if (counter.get() < Long.MAX_VALUE - duration)
{
counter.addAndGet(duration);
}
else
{
reset();
counter.set(duration);
}
}
public void reset()
{
puts.set(0);
misses.set(0);
removals.set(0);
expiries.set(0);
hits.set(0);
evictions.set(0);
getTimeTaken.set(0);
putTimeTaken.set(0);
removeTimeTaken.set(0);
}
public void setActive(final boolean active)
{
this.active = active;
}
}