/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.node.stats;
import freenet.store.StoreCallback;
/**
* This class wraps StoreCallback instance to provide methods required to display stats
*
* @author nikotyan
*/
public class StoreCallbackStats implements DataStoreStats {
private final StoreCallback<?> storeStats;
private final StoreLocationStats nodeStats;
public final StoreAccessStats sessionAccessStats;
/** If the store type does not support this, it will be null, to avoid producing bogus
* numbers. */
public final StoreAccessStats totalAccessStats;
public StoreCallbackStats(StoreCallback<?> delegate, StoreLocationStats nodeStats) {
this.storeStats = delegate;
this.nodeStats = nodeStats;
this.sessionAccessStats = delegate.getSessionAccessStats();
this.totalAccessStats = delegate.getTotalAccessStats();
}
@Override
public long keys() {
return storeStats.keyCount();
}
@Override
public long capacity() {
return storeStats.getMaxKeys();
}
@Override
public long dataSize() {
return keys() * storeStats.dataLength();
}
@Override
public double avgLocation() throws StatsNotAvailableException {
return nodeStats.avgLocation();
}
@Override
public double utilization() {
return (1.0 * keys() / capacity());
}
@Override
public double avgSuccess() throws StatsNotAvailableException {
return nodeStats.avgSuccess();
}
@Override
public double furthestSuccess() throws StatsNotAvailableException {
return nodeStats.furthestSuccess();
}
@Override
public double avgDist() throws StatsNotAvailableException {
return nodeStats.avgDist();
}
@Override
public double distanceStats() throws StatsNotAvailableException {
return nodeStats.distanceStats();
}
@Override
public StoreAccessStats getSessionAccessStats() {
return sessionAccessStats;
}
@Override
public StoreAccessStats getTotalAccessStats() throws StatsNotAvailableException {
if(totalAccessStats == null) throw new StatsNotAvailableException();
return totalAccessStats;
}
}