mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-05-02 19:30:23 +01:00
Polish "Stop MetricsEndpoint from summing up same metrics"
See gh-14497
This commit is contained in:
+11
-12
@@ -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) {
|
||||
|
||||
+13
-26
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user