package org.stagemonitor.ehcache; import static org.stagemonitor.core.metrics.metrics2.MetricName.name; import java.util.HashMap; import java.util.Map; import com.codahale.metrics.Gauge; import com.codahale.metrics.Metric; import com.codahale.metrics.RatioGauge; import net.sf.ehcache.Ehcache; import org.stagemonitor.core.metrics.metrics2.Metric2Set; import org.stagemonitor.core.metrics.metrics2.MetricName; /** * An instrumented {@link net.sf.ehcache.Ehcache} instance. */ public class EhCacheMetricSet implements Metric2Set { private final String cacheName; private final Ehcache cache; private final StagemonitorCacheUsageListener cacheUsageListener; public EhCacheMetricSet(String cacheName, Ehcache cache, StagemonitorCacheUsageListener cacheUsageListener) { this.cacheName = cacheName; this.cache = cache; this.cacheUsageListener = cacheUsageListener; } @Override public Map<MetricName, Metric> getMetrics() { final Map<MetricName, Metric> metrics = new HashMap<MetricName, Metric>(); metrics.put(name("cache_hit_ratio").tag("cache_name", cacheName).tier("All").build(), new RatioGauge() { @Override public Ratio getRatio() { return cacheUsageListener.getHitRatio1Min(); } }); metrics.put(name("cache_size_count").tag("cache_name", cacheName).tier("All").build(), new Gauge<Long>() { @Override public Long getValue() { return cache.getLiveCacheStatistics().getSize(); } }); metrics.put(name("cache_size_bytes").tag("cache_name", cacheName).tier("All").build(), new Gauge<Long>() { @Override public Long getValue() { return cache.getLiveCacheStatistics().getLocalDiskSizeInBytes() + cache.getLiveCacheStatistics().getLocalHeapSizeInBytes() + cache.getLiveCacheStatistics().getLocalOffHeapSizeInBytes(); } }); return metrics; } }