double measurableValue(long timeMs) { synchronized (this.lock) { if (this.metricValueProvider instanceof Measurable) return ((Measurable) metricValueProvider).measure(config, timeMs); else return 0; } }
@Override public Object metricValue() { long now = time.milliseconds(); synchronized (this.lock) { if (this.metricValueProvider instanceof Measurable) return ((Measurable) metricValueProvider).measure(config, now); else if (this.metricValueProvider instanceof Gauge) return ((Gauge<?>) metricValueProvider).value(config, now); else throw new IllegalStateException("Not a valid metric: " + this.metricValueProvider.getClass()); } }
private Double measure(Measurable rate, MetricConfig config) { return rate.measure(config, time.milliseconds()); }
@Test public void testBooleanFrequencies() { MetricName metricTrue = name("true"); MetricName metricFalse = name("false"); Frequencies frequencies = Frequencies.forBooleanValues(metricFalse, metricTrue); final NamedMeasurable falseMetric = frequencies.stats().get(0); final NamedMeasurable trueMetric = frequencies.stats().get(1); // Record 2 windows worth of values for (int i = 0; i != 25; ++i) { frequencies.record(config, 0.0, time.milliseconds()); } for (int i = 0; i != 75; ++i) { frequencies.record(config, 1.0, time.milliseconds()); } assertEquals(0.25, falseMetric.stat().measure(config, time.milliseconds()), DELTA); assertEquals(0.75, trueMetric.stat().measure(config, time.milliseconds()), DELTA); // Record 2 more windows worth of values for (int i = 0; i != 40; ++i) { frequencies.record(config, 0.0, time.milliseconds()); } for (int i = 0; i != 60; ++i) { frequencies.record(config, 1.0, time.milliseconds()); } assertEquals(0.40, falseMetric.stat().measure(config, time.milliseconds()), DELTA); assertEquals(0.60, trueMetric.stat().measure(config, time.milliseconds()), DELTA); }
double value(long timeMs) { return this.measurable.measure(config, timeMs); }