public long hits() { return stats.hitCount(); }
private static void checkStats(CacheStats stats, long requestCount, long hitCount, double hitRate, long missCount, double missRate, long loadSuccessCount, long loadFailureCount, double loadExceptionRate, long loadCount, long totalLoadTime, double averageLoadPenalty, long evictionCount, long evictionWeight) { assertThat(stats.requestCount(), is(requestCount)); assertThat(stats.hitCount(), is(hitCount)); assertThat(stats.hitRate(), is(hitRate)); assertThat(stats.missCount(), is(missCount)); assertThat(stats.missRate(), is(missRate)); assertThat(stats.loadSuccessCount(), is(loadSuccessCount)); assertThat(stats.loadFailureCount(), is(loadFailureCount)); assertThat(stats.loadFailureRate(), is(loadExceptionRate)); assertThat(stats.totalLoadTime(), is(totalLoadTime)); assertThat(stats.averageLoadPenalty(), is(averageLoadPenalty)); assertThat(stats.evictionCount(), is(evictionCount)); assertThat(stats.evictionWeight(), is(evictionWeight)); }
@Override public CacheStats stats() { com.github.benmanes.caffeine.cache.stats.CacheStats stats = cache.stats(); return new CacheStats(stats.hitCount(), stats.missCount(), stats.loadSuccessCount(), stats.loadFailureCount(), stats.totalLoadTime(), stats.evictionCount()); }
@Override public org.apache.druid.client.cache.CacheStats getStats() { final CacheStats stats = cache.stats(); final long size = cache .policy().eviction() .map(eviction -> eviction.isWeighted() ? eviction.weightedSize() : OptionalLong.empty()) .orElse(OptionalLong.empty()).orElse(-1); return new org.apache.druid.client.cache.CacheStats( stats.hitCount(), stats.missCount(), cache.estimatedSize(), size, stats.evictionCount(), 0, stats.loadFailureCount() ); }
statsForGarbageCollected[HIT_COUNT.ordinal()] += stats.hitCount(); statsForGarbageCollected[MISS_COUNT.ordinal()] += stats.missCount(); statsForGarbageCollected[EVICTION_COUNT.ordinal()] += stats.evictionCount();
@Override public long hitCount() { return stats.hitCount(); }
/** * Increments all counters by the values in {@code other}. * * @param other the counter to increment from */ public void incrementBy(@NonNull StatsCounter other) { CacheStats otherStats = other.snapshot(); hitCount.add(otherStats.hitCount()); missCount.add(otherStats.missCount()); loadSuccessCount.add(otherStats.loadSuccessCount()); loadFailureCount.add(otherStats.loadFailureCount()); totalLoadTime.add(otherStats.totalLoadTime()); evictionCount.add(otherStats.evictionCount()); evictionWeight.add(otherStats.evictionWeight()); }
CaffeineMetrics(MeterRegistry parent, MeterIdPrefix idPrefix) { this.parent = requireNonNull(parent, "parent"); this.idPrefix = requireNonNull(idPrefix, "idPrefix"); final String requests = idPrefix.name("requests"); parent.more().counter(requests, idPrefix.tags("result", "hit"), this, func(HIT_COUNT, ref -> ref.cacheStats.hitCount())); parent.more().counter(requests, idPrefix.tags("result", "miss"), this, func(MISS_COUNT, ref -> ref.cacheStats.missCount())); parent.more().counter(idPrefix.name("evictions"), idPrefix.tags(), this, func(EVICTION_COUNT, ref -> ref.cacheStats.evictionCount())); parent.more().counter(idPrefix.name("evictionWeight"), idPrefix.tags(), this, func(EVICTION_WEIGHT, ref -> ref.cacheStats.evictionWeight())); parent.gauge(idPrefix.name("estimatedSize"), idPrefix.tags(), this, func(null, ref -> ref.estimatedSize)); }
@Override protected boolean matchesSafely(CacheContext context, Description description) { if (!context.isRecordingStats()) { return true; } CacheStats stats = context.stats(); desc = new DescriptionBuilder(description); ForkJoinPool.commonPool().awaitQuiescence(10, TimeUnit.SECONDS); switch (type) { case HIT: return desc.expectThat(type.name(), stats.hitCount(), is(count)).matches(); case MISS: return desc.expectThat(type.name(), stats.missCount(), is(count)).matches(); case EVICTION_COUNT: return desc.expectThat(type.name(), stats.evictionCount(), is(count)).matches(); case EVICTION_WEIGHT: return desc.expectThat(type.name(), stats.evictionWeight(), is(count)).matches(); case LOAD_SUCCESS: return desc.expectThat(type.name(), stats.loadSuccessCount(), is(count)).matches(); case LOAD_FAILURE: return desc.expectThat(type.name(), stats.loadFailureCount(), is(count)).matches(); default: throw new AssertionError("Unknown stats type"); } }
/** * Gets the number of times cache look up for a compiled script returned a cached value. */ public long getClassCacheHitCount() { return classMap.stats().hitCount(); }
public void testEmpty() { CacheStats stats = new CacheStats(0, 0, 0, 0, 0, 0, 0); assertEquals(0, stats.requestCount()); assertEquals(0, stats.hitCount()); assertEquals(1.0, stats.hitRate()); assertEquals(0, stats.missCount()); assertEquals(0.0, stats.missRate()); assertEquals(0, stats.loadSuccessCount()); assertEquals(0, stats.loadFailureCount()); assertEquals(0.0, stats.loadFailureRate()); assertEquals(0, stats.loadCount()); assertEquals(0, stats.totalLoadTime()); assertEquals(0.0, stats.averageLoadPenalty()); assertEquals(0, stats.evictionCount()); }
public void testSingle() { CacheStats stats = new CacheStats(11, 13, 17, 19, 23, 27, 54); assertEquals(24, stats.requestCount()); assertEquals(11, stats.hitCount()); assertEquals(11.0/24, stats.hitRate()); assertEquals(13, stats.missCount()); assertEquals(13.0/24, stats.missRate()); assertEquals(17, stats.loadSuccessCount()); assertEquals(19, stats.loadFailureCount()); assertEquals(19.0/36, stats.loadFailureRate()); assertEquals(17 + 19, stats.loadCount()); assertEquals(23, stats.totalLoadTime()); assertEquals(23.0/(17 + 19), stats.averageLoadPenalty()); assertEquals(27, stats.evictionCount()); assertEquals(54, stats.evictionWeight()); }
public void testPlus() { CacheStats one = new CacheStats(11, 13, 15, 13, 11, 9, 18); CacheStats two = new CacheStats(53, 47, 41, 39, 37, 35, 70); CacheStats sum = two.plus(one); assertEquals(124, sum.requestCount()); assertEquals(64, sum.hitCount()); assertEquals(64.0/124, sum.hitRate()); assertEquals(60, sum.missCount()); assertEquals(60.0/124, sum.missRate()); assertEquals(56, sum.loadSuccessCount()); assertEquals(52, sum.loadFailureCount()); assertEquals(52.0/108, sum.loadFailureRate()); assertEquals(56 + 52, sum.loadCount()); assertEquals(48, sum.totalLoadTime()); assertEquals(48.0/(56 + 52), sum.averageLoadPenalty()); assertEquals(44, sum.evictionCount()); assertEquals(88, sum.evictionWeight()); assertEquals(sum, one.plus(two)); } }
public void testMinus() { CacheStats one = new CacheStats(11, 13, 17, 19, 23, 27, 54); CacheStats two = new CacheStats(53, 47, 43, 41, 37, 31, 62); CacheStats diff = two.minus(one); assertEquals(76, diff.requestCount()); assertEquals(42, diff.hitCount()); assertEquals(42.0/76, diff.hitRate()); assertEquals(34, diff.missCount()); assertEquals(34.0/76, diff.missRate()); assertEquals(26, diff.loadSuccessCount()); assertEquals(22, diff.loadFailureCount()); assertEquals(22.0/48, diff.loadFailureRate()); assertEquals(26 + 22, diff.loadCount()); assertEquals(14, diff.totalLoadTime()); assertEquals(14.0/(26 + 22), diff.averageLoadPenalty()); assertEquals(4, diff.evictionCount()); assertEquals(8, diff.evictionWeight()); assertEquals(new CacheStats(0, 0, 0, 0, 0, 0, 0), one.minus(two)); }
cacheHitTotal.addMetric(cacheName, stats.hitCount()); cacheMissTotal.addMetric(cacheName, stats.missCount()); cacheRequestsTotal.addMetric(cacheName, stats.requestCount());
/** * Increments all counters by the values in {@code other}. * * @param other the counter to increment from */ public void incrementBy(@Nonnull StatsCounter other) { CacheStats otherStats = other.snapshot(); hitCount.add(otherStats.hitCount()); missCount.add(otherStats.missCount()); loadSuccessCount.add(otherStats.loadSuccessCount()); loadFailureCount.add(otherStats.loadFailureCount()); totalLoadTime.add(otherStats.totalLoadTime()); evictionCount.add(otherStats.evictionCount()); evictionWeight.add(otherStats.evictionWeight()); }
/** * The cache should continue to hit, even if variables not used in the cached expression change. */ @Test public void testUnrelatedVariableChange() { // expect miss Object result = execute("TO_UPPER(name)", contextWithCache); assertEquals("BLAH", result); assertEquals(1, cache.stats().requestCount()); assertEquals(1, cache.stats().missCount()); assertEquals(0, cache.stats().hitCount()); // add an irrelevant variable that is not used in the expression fields.put("unrelated_var_1", "true"); fields.put("unrelated_var_2", 22); // still expect a hit result = execute("TO_UPPER(name)", contextWithCache); assertEquals("BLAH", result); assertEquals(2, cache.stats().requestCount()); assertEquals(1, cache.stats().missCount()); assertEquals(1, cache.stats().hitCount()); }
/** * Running the same expression multiple times should hit the cache. */ @Test public void testWithCache() { Object result = execute("TO_UPPER(name)", contextWithCache); assertEquals("BLAH", result); assertEquals(1, cache.stats().requestCount()); assertEquals(1, cache.stats().missCount()); assertEquals(0, cache.stats().hitCount()); result = execute("TO_UPPER(name)", contextWithCache); assertEquals("BLAH", result); assertEquals(2, cache.stats().requestCount()); assertEquals(1, cache.stats().missCount()); assertEquals(1, cache.stats().hitCount()); result = execute("TO_UPPER(name)", contextWithCache); assertEquals("BLAH", result); assertEquals(3, cache.stats().requestCount()); assertEquals(1, cache.stats().missCount()); assertEquals(2, cache.stats().hitCount()); }
@Override public CacheStats stats() { com.github.benmanes.caffeine.cache.stats.CacheStats stats = cache.stats(); return new CacheStats(stats.hitCount(), stats.missCount(), stats.loadSuccessCount(), stats.loadFailureCount(), stats.totalLoadTime(), stats.evictionCount()); }
@Override protected void doHealthCheck(Health.Builder builder) throws Exception { CacheStats stats = this.cache.stats(); builder.up().withDetail("evictionCount", stats.evictionCount()); builder.up().withDetail("hitRate", stats.hitRate()); builder.up().withDetail("missRate", stats.missRate()); builder.up().withDetail("hitCount", stats.hitCount()); } }