diff --git a/implementations/micrometer-registry-health/src/main/java/io/micrometer/health/ServiceLevelObjective.java b/implementations/micrometer-registry-health/src/main/java/io/micrometer/health/ServiceLevelObjective.java index a2bc4e5e43..44ba735d0b 100644 --- a/implementations/micrometer-registry-health/src/main/java/io/micrometer/health/ServiceLevelObjective.java +++ b/implementations/micrometer-registry-health/src/main/java/io/micrometer/health/ServiceLevelObjective.java @@ -40,7 +40,10 @@ import static io.micrometer.health.QueryUtils.SUM_OR_NAN; /** + * Service level objective. + * * @author Jon Schneider + * @author Johnny Lim * @since 1.6.0 */ public abstract class ServiceLevelObjective { @@ -240,7 +243,7 @@ public final NumericQuery count(Function search) { } else if (m instanceof FunctionTimer) { return ((FunctionTimer) m).count(); } else if (m instanceof FunctionCounter) { - ((FunctionCounter) m).count(); + return ((FunctionCounter) m).count(); } else if (m instanceof LongTaskTimer) { return (double) ((LongTaskTimer) m).activeTasks(); } diff --git a/implementations/micrometer-registry-health/src/test/java/io/micrometer/health/QueryTest.java b/implementations/micrometer-registry-health/src/test/java/io/micrometer/health/QueryTest.java index 1d816ebf3d..4519eba789 100644 --- a/implementations/micrometer-registry-health/src/test/java/io/micrometer/health/QueryTest.java +++ b/implementations/micrometer-registry-health/src/test/java/io/micrometer/health/QueryTest.java @@ -15,6 +15,7 @@ */ package io.micrometer.health; +import io.micrometer.core.instrument.FunctionCounter; import io.micrometer.core.instrument.MockClock; import io.micrometer.core.instrument.Timer; import io.micrometer.core.instrument.util.TimeUtils; @@ -27,12 +28,20 @@ import static io.micrometer.core.instrument.MockClock.clock; import static org.assertj.core.api.Assertions.assertThat; +/** + * Tests for queries. + * + * @author Jon Schneider + * @author Johnny Lim + */ class QueryTest { HealthMeterRegistry registry = HealthMeterRegistry .builder(HealthConfig.DEFAULT) // just so my.timer doesn't get filtered out eagerly .serviceLevelObjectives(ServiceLevelObjective.build("timer") .count(s -> s.name("my.timer")).isGreaterThan(0)) + .serviceLevelObjectives(ServiceLevelObjective.build("function.counter") + .count(s -> s.name("my.function.counter")).isGreaterThan(0)) .clock(new MockClock()) .build(); @@ -44,6 +53,8 @@ void before() { t2.record(2, TimeUnit.SECONDS); t2.record(2, TimeUnit.SECONDS); + FunctionCounter.builder("my.function.counter", 1d, Number::doubleValue).register(registry); + clock(registry).addSeconds(10); registry.tick(); } @@ -58,6 +69,15 @@ void count() { ).isEqualTo(3); } + @Test + void countWhenMeterIsFunctionCounter() { + assertThat( + ServiceLevelObjective.build("function.counter.objective") + .count(s -> s.name("my.function.counter")) + .getValue(registry) + ).isEqualTo(1); + } + @Test void max() { assertThat(