package de.axone.cache.ng; import java.util.Formatter; import java.util.concurrent.atomic.AtomicLong; public class DefaultStats implements CacheNG.AutomaticClient.Stats { private AtomicLong accesses = new AtomicLong(), hits = new AtomicLong(); private CacheNG.AutomaticClient<?,?> cache; public DefaultStats( CacheNG.AutomaticClient<?,?> cache ){ this.cache = cache; } @Override public void hit(){ accesses.incrementAndGet(); hits.incrementAndGet(); } @Override public void miss(){ accesses.incrementAndGet(); } @Override public String toString(){ StringBuilder result = new StringBuilder(); try ( Formatter format = new Formatter( result ) ){ long hits = this.hits.get(); long accesses = this.accesses.get(); format.format( "Ratio: %d/%d hits = %.1f%%", hits, accesses, 100.0*hits/accesses ); if( cache.capacity() > 0 ){ format.format( " | Full: %d/%d entries = %.1f%%", cache.size(), cache.capacity(), 100.0*cache.size()/cache.capacity() ); } return result.toString(); } } }