package org.apereo.cas.monitor;
import java.util.Formatter;
/**
* Simple implementation of cache statistics.
*
* @author Marvin S. Addison
* @since 3.5.1
*/
public class SimpleCacheStatistics implements CacheStatistics {
private static final double BYTES_PER_MB = 1048510.0;
private static final int PERCENTAGE_VALUE = 100;
private long size;
private long capacity;
private long evictions;
private String name;
/**
* Creates a new instance with given parameters.
*
* @param size Current cache size (e.g. items, bytes, etc).
* @param capacity Current cache capacity (e.g. items, bytes, etc). The units of capacity must be equal to size
* in order to produce a meaningful value for {@link #getPercentFree}.
* @param evictions Number of evictions reported by cache.
*/
public SimpleCacheStatistics(final long size, final long capacity, final long evictions) {
this.size = size;
this.capacity = capacity;
this.evictions = evictions;
}
/**
* Creates a new named instance with given parameters.
*
* @param size Current cache size (e.g. items, bytes, etc).
* @param capacity Current cache capacity (e.g. items, bytes, etc). The units of capacity must be equal to size
* in order to produce a meaningful value for {@link #getPercentFree}.
* @param evictions Number of evictions reported by cache.
* @param name Name of cache instance to which statistics apply.
*/
public SimpleCacheStatistics(final long size, final long capacity, final long evictions, final String name) {
this.size = size;
this.capacity = capacity;
this.evictions = evictions;
this.name = name;
}
@Override
public long getSize() {
return this.size;
}
@Override
public long getCapacity() {
return this.capacity;
}
@Override
public long getEvictions() {
return this.evictions;
}
@Override
public int getPercentFree() {
if (this.capacity == 0) {
return 0;
}
return (int) ((this.capacity - this.size) * PERCENTAGE_VALUE / this.capacity);
}
@Override
public void toString(final StringBuilder builder) {
if (this.name != null) {
builder.append(this.name).append(':');
}
try (Formatter formatter = new Formatter(builder)) {
formatter.format("%.2f", this.size / BYTES_PER_MB);
builder.append("MB used, ");
builder.append(getPercentFree()).append("% free, ");
builder.append(this.evictions).append(" evictions");
}
}
/**
* Gets a descriptive name of the cache instance for which statistics apply.
*
* @return Name of cache instance/host to which statistics apply.
*/
@Override
public String getName() {
return this.name;
}
}