diff --git a/src/main/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetrics.java b/src/main/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetrics.java index 592eafab..ffade70e 100644 --- a/src/main/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetrics.java +++ b/src/main/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetrics.java @@ -23,6 +23,18 @@ public class AppendOnlyStoreWithMetrics implements AppendOnlyStore { public static final String SCAN_BYTES_METER_METRIC_NAME = "scanBytesMeter"; public static final String SCAN_KEYS_METER_METRIC_NAME = "scanKeysMeter"; + public static final String FLUSHED_KEY_COUNT_GAUGE_METRIC_NAME = "flushedKeyCountGauge"; + public static final String FLUSH_COUNT_GAUGE_METRIC_NAME = "flushCountGauge"; + public static final String FLUSH_TIMER_GAUGE_METRIC_NAME = "flushTimerGauge"; + public static final String LOOKUP_MISS_COUNT_GAUGE_METRIC_NAME = "lookupMissCountGauge"; + public static final String LOOKUP_HIT_COUNT_GAUGE_METRIC_NAME = "lookupHitCountGauge"; + public static final String CACHE_MISS_COUNT_GAUGE_METRIC_NAME = "cacheMissCountGauge"; + public static final String CACHE_HIT_COUNT_GAUGE_METRIC_NAME = "cacheHitCountGauge"; + public static final String FIND_KEY_TIMER_GAUGE_METRIC_NAME = "findKeyTimerGauge"; + public static final String AVG_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME = "avgLookupDataSizeGauge"; + public static final String MAX_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME = "maxLookupDataSizeGauge"; + public static final String SUM_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME = "sumLookupDataSizeGauge"; + public static final String UPPEND_APPEND_STORE = "uppendAppendStore"; private final AppendOnlyStore store; @@ -66,6 +78,40 @@ public AppendOnlyStoreWithMetrics(AppendOnlyStore store, MetricRegistry metrics, readBytesMeter = metrics.meter(MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), READ_BYTES_METER_METRIC_NAME)); scanBytesMeter = metrics.meter(MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), SCAN_BYTES_METER_METRIC_NAME)); scanKeysMeter = metrics.meter(MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), SCAN_KEYS_METER_METRIC_NAME)); + + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), FLUSHED_KEY_COUNT_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getFlushedKeyCount); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), FLUSH_COUNT_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getFlushCount); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), FLUSH_TIMER_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getFlushTimer); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), LOOKUP_MISS_COUNT_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getLookupMissCount); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), LOOKUP_HIT_COUNT_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getLookupHitCount); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), CACHE_MISS_COUNT_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getCacheMissCount); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), CACHE_HIT_COUNT_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getCacheHitCount); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), FIND_KEY_TIMER_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getFindKeyTimer); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), AVG_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getAvgLookupDataSize); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), MAX_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getMaxLookupDataSize); + metrics.register( + MetricRegistry.name(rootName, UPPEND_APPEND_STORE, store.getName(), SUM_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME), + (Gauge) getLookupDataMetrics()::getSumLookupDataSize); } @Override diff --git a/src/main/java/com/upserve/uppend/metrics/LookupDataMetrics.java b/src/main/java/com/upserve/uppend/metrics/LookupDataMetrics.java index 204abd18..49a599dd 100644 --- a/src/main/java/com/upserve/uppend/metrics/LookupDataMetrics.java +++ b/src/main/java/com/upserve/uppend/metrics/LookupDataMetrics.java @@ -76,6 +76,50 @@ private LookupDataMetrics( this.sumLookupDataSize = sumLookupDataSize; } + public long getFlushedKeyCount() { + return flushedKeyCount; + } + + public long getFlushCount() { + return flushCount; + } + + public long getFlushTimer() { + return flushTimer; + } + + public long getLookupMissCount() { + return lookupMissCount; + } + + public long getLookupHitCount() { + return lookupHitCount; + } + + public long getCacheMissCount() { + return cacheMissCount; + } + + public long getCacheHitCount() { + return cacheHitCount; + } + + public long getFindKeyTimer() { + return findKeyTimer; + } + + public double getAvgLookupDataSize() { + return avgLookupDataSize; + } + + public long getMaxLookupDataSize() { + return maxLookupDataSize; + } + + public long getSumLookupDataSize() { + return sumLookupDataSize; + } + @Override public String toString() { return "LookupDataMetrics{" + diff --git a/src/test/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetricsTest.java b/src/test/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetricsTest.java index f0d9bb2b..9e1b0aa8 100644 --- a/src/test/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetricsTest.java +++ b/src/test/java/com/upserve/uppend/metrics/AppendOnlyStoreWithMetricsTest.java @@ -33,6 +33,8 @@ public class AppendOnlyStoreWithMetricsTest { public void before() { metrics = new MetricRegistry(); when(store.getName()).thenReturn("testStore"); + LookupDataMetrics lookupDataMetrics = new LookupDataMetrics(new LookupDataMetrics.Adders(), new LongSummaryStatistics()); + when(store.getLookupDataMetrics()).thenReturn(lookupDataMetrics); instance = new AppendOnlyStoreWithMetrics(store, metrics, "MetricsRoot"); } @@ -174,6 +176,22 @@ public void testGetBlockLongStats() { assertEquals(v, instance.getBlockedLongMetrics()); } + @Test + public void testGaugeMetrics() { + // The underlying store is mocked, so just test that these are registered + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), FLUSHED_KEY_COUNT_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), FLUSH_COUNT_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), FLUSH_TIMER_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), LOOKUP_MISS_COUNT_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), LOOKUP_HIT_COUNT_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), CACHE_MISS_COUNT_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), CACHE_HIT_COUNT_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), FIND_KEY_TIMER_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0.0, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), AVG_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), MAX_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME), null).getValue()); + assertEquals(0L, metrics.gauge(MetricRegistry.name("MetricsRoot", UPPEND_APPEND_STORE, store.getName(), SUM_LOOKUP_DATA_SIZE_GAUGE_METRIC_NAME), null).getValue()); + } + @Test public void testKeyCount() { when(store.keyCount()).thenReturn(5L);