@Override public <T extends Number> void reportGaugeValue(String name, T value) { Exceptions.checkNotNullOrEmpty(name, "name"); Preconditions.checkNotNull(value); Gauge newGauge = null; String gaugeName = name + ".Gauge"; if (value instanceof Float) { newGauge = underlying.registerGauge(gaugeName, value::floatValue); } else if (value instanceof Double) { newGauge = underlying.registerGauge(gaugeName, value::doubleValue); } else if (value instanceof Byte) { newGauge = underlying.registerGauge(gaugeName, value::byteValue); } else if (value instanceof Short) { newGauge = underlying.registerGauge(gaugeName, value::shortValue); } else if (value instanceof Integer) { newGauge = underlying.registerGauge(gaugeName, value::intValue); } else if (value instanceof Long) { newGauge = underlying.registerGauge(gaugeName, value::longValue); } if (null == newGauge) { log.error("Unsupported Number type: {}.", value.getClass().getName()); } else { gaugesCache.put(gaugeName, newGauge); } }
@Override public <T extends Number> Gauge registerGauge(String name, Supplier<T> value) { return getOrSet(this.gauges, name, metricName -> this.statsLoggerRef.get().registerGauge(metricName, value), (metric, proxyName, c) -> new GaugeProxy(metric, proxyName, value, c)); }
void setLogger(StatsLogger logger) { this.statsLoggerRef.set(logger); this.opStatsLoggers.values().forEach(v -> v.updateInstance(this.statsLoggerRef.get().createStats(v.getProxyName()))); this.counters.values().forEach(v -> v.updateInstance(this.statsLoggerRef.get().createCounter(v.getProxyName()))); this.meters.values().forEach(v -> v.updateInstance(this.statsLoggerRef.get().createMeter(v.getProxyName()))); this.gauges.values().forEach(v -> v.updateInstance(this.statsLoggerRef.get().registerGauge(v.getProxyName(), v.getValueSupplier()))); }
/** * Test gauge registered and worked well with StatsLogger. */ @Test public void testGauge() { AtomicInteger value = new AtomicInteger(1); statsLogger.registerGauge("testGauge", value::get); value.set(2); assertEquals(value.get(), MetricRegistryUtils.getGauge("pravega.testStatsLogger.testGauge").getValue()); for (int i = 1; i < 10; i++) { dynamicLogger.reportGaugeValue("dynamicGauge", i); assertEquals(i, MetricRegistryUtils.getGauge("pravega.dynamicGauge.Gauge").getValue()); } dynamicLogger.freezeGaugeValue("dynamicGauge"); assertEquals(null, MetricRegistryUtils.getGauge("pravega.dynamicGauge.Gauge")); }