Polish "Stop MetricsEndpoint from summing up same metrics"

See gh-14497
This commit is contained in:
Phillip Webb
2018-10-11 14:37:44 -07:00
parent 950480dc1c
commit 30ab4f9691
2 changed files with 24 additions and 38 deletions
@@ -16,6 +16,7 @@
package org.springframework.boot.actuate.metrics;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -115,19 +116,17 @@ public class MetricsEndpoint {
private Collection<Meter> findFirstMatchingMeters(MeterRegistry registry, String name,
Iterable<Tag> tags) {
if (registry instanceof CompositeMeterRegistry) {
return ((CompositeMeterRegistry) registry).getRegistries().stream()
.map((r) -> findFirstMatchingMeters(r, name, tags))
.filter((match) -> !match.isEmpty()).findFirst()
.orElse(Collections.emptyList());
return findFirstMatchingMeters((CompositeMeterRegistry) registry, name, tags);
}
return registry.find(name).tags(tags).meters();
}
}
else {
Collection<Meter> metersFound = registry.find(name).tags(tags).meters();
if (!metersFound.isEmpty()) {
return metersFound;
}
}
return Collections.emptyList();
private Collection<Meter> findFirstMatchingMeters(CompositeMeterRegistry composite,
String name, Iterable<Tag> tags) {
return composite.getRegistries().stream()
.map((registry) -> findFirstMatchingMeters(registry, name, tags))
.filter((matching) -> !matching.isEmpty()).findFirst()
.orElse(Collections.emptyList());
}
private Map<Statistic, Double> getSamples(Collection<Meter> meters) {
@@ -98,30 +98,21 @@ public class MetricsEndpointTests {
@Test
public void findFirstMatchingMetersFromNestedRegistries() {
CompositeMeterRegistry composite = new CompositeMeterRegistry();
SimpleMeterRegistry reg1 = new SimpleMeterRegistry();
CompositeMeterRegistry reg2 = new CompositeMeterRegistry();
SimpleMeterRegistry reg3 = new SimpleMeterRegistry();
// 1st level nesting
composite.add(reg1);
// 2st level nesting
reg2.add(reg3);
composite.add(reg2);
// 2nd level registry has metrics
reg3.counter("cache", "result", "hit", "host", "1").increment(2);
reg3.counter("cache", "result", "miss", "host", "1").increment(2);
reg3.counter("cache", "result", "hit", "host", "2").increment(2);
SimpleMeterRegistry firstLevel0 = new SimpleMeterRegistry();
CompositeMeterRegistry firstLevel1 = new CompositeMeterRegistry();
SimpleMeterRegistry secondLevel = new SimpleMeterRegistry();
composite.add(firstLevel0);
composite.add(firstLevel1);
firstLevel1.add(secondLevel);
secondLevel.counter("cache", "result", "hit", "host", "1").increment(2);
secondLevel.counter("cache", "result", "miss", "host", "1").increment(2);
secondLevel.counter("cache", "result", "hit", "host", "2").increment(2);
MetricsEndpoint endpoint = new MetricsEndpoint(composite);
MetricsEndpoint.MetricResponse response = endpoint.metric("cache",
Collections.emptyList());
assertThat(response.getName()).isEqualTo("cache");
assertThat(availableTagKeys(response)).containsExactly("result", "host");
assertThat(getCount(response)).hasValue(6.0);
response = endpoint.metric("cache", Collections.singletonList("result:hit"));
assertThat(availableTagKeys(response)).containsExactly("host");
assertThat(getCount(response)).hasValue(4.0);
@@ -130,15 +121,11 @@ public class MetricsEndpointTests {
@Test
public void matchingMeterNotFoundInNestedRegistries() {
CompositeMeterRegistry composite = new CompositeMeterRegistry();
CompositeMeterRegistry reg2 = new CompositeMeterRegistry();
SimpleMeterRegistry reg3 = new SimpleMeterRegistry();
// nested registries
reg2.add(reg3);
composite.add(reg2);
CompositeMeterRegistry firstLevel = new CompositeMeterRegistry();
SimpleMeterRegistry secondLevel = new SimpleMeterRegistry();
composite.add(firstLevel);
firstLevel.add(secondLevel);
MetricsEndpoint endpoint = new MetricsEndpoint(composite);
MetricsEndpoint.MetricResponse response = endpoint.metric("invalid.metric.name",
Collections.emptyList());
assertThat(response).isNull();