package com.feedly.cassandra.dao; import java.util.concurrent.atomic.AtomicLong; class OperationStatistics { private final AtomicLong _numCassandraOps = new AtomicLong(); private final AtomicLong _numOps = new AtomicLong(); private final AtomicLong _numRows = new AtomicLong(); private final AtomicLong _numCols = new AtomicLong(); private final AtomicLong _totalTime = new AtomicLong(); private final CircularLongQueue _timings; public OperationStatistics(int timingsSize) { _timings = new CircularLongQueue(timingsSize); } public void reset() { _numCassandraOps.set(0); _numOps.set(0); _numRows.set(0); _numCols.set(0); _totalTime.set(0); _timings.reset(); } public void addRecentTiming(long measurement) { _totalTime.addAndGet(measurement); _timings.add(measurement); } public void incrNumRows(long incr) { _numRows.addAndGet(incr); } public void incrNumCols(long incr) { _numCols.addAndGet(incr); } public void incrNumCassandraOps(long incr) { _numCassandraOps.addAndGet(incr); } public void incrNumOps(long incr) { _numOps.addAndGet(incr); } public long getNumCassandraOps() { return _numCassandraOps.get(); } public long getNumOps() { return _numOps.get(); } public long getNumCols() { return _numCols.get(); } public long getNumRows() { return _numRows.get(); } public long getTotalTime() { return _totalTime.get(); } public long[] getRecentTimings() { return _timings.timings(); } }