Improve caches endpoint format

This commit adds an intermediate "caches" element so that additional
cache manager attributes can be added in the future.

Closes gh-13079
pull/13117/head
Stephane Nicoll 7 years ago
parent d77c4c83a1
commit c72df104d8

@ -68,9 +68,9 @@ public class CachesEndpointDocumentationTests extends MockMvcEndpointDocumentati
.andDo(MockMvcRestDocumentation.document("caches/all", responseFields( .andDo(MockMvcRestDocumentation.document("caches/all", responseFields(
fieldWithPath("cacheManagers") fieldWithPath("cacheManagers")
.description("Cache managers keyed by id."), .description("Cache managers keyed by id."),
fieldWithPath("cacheManagers.*").description( fieldWithPath("cacheManagers.*.caches").description(
"Caches in the application context keyed by " + "name.")) "Caches in the application context keyed by " + "name."))
.andWithPrefix("cacheManagers.*.*.", .andWithPrefix("cacheManagers.*.caches.*.",
fieldWithPath("target").description( fieldWithPath("target").description(
"Fully qualified name of the native cache.")))); "Fully qualified name of the native cache."))));
} }

@ -67,7 +67,10 @@ public class CachesEndpoint {
cacheManagerDescriptors.put(cacheName, cacheManagerDescriptors.put(cacheName,
new CacheDescriptor(entry.getTarget())); new CacheDescriptor(entry.getTarget()));
}); });
return new CachesReport(descriptors); Map<String, CacheManagerDescriptor> cacheManagerDescriptors = new LinkedHashMap<>();
descriptors.forEach((name, entries) ->
cacheManagerDescriptors.put(name, new CacheManagerDescriptor(entries)));
return new CachesReport(cacheManagerDescriptors);
} }
/** /**
@ -160,18 +163,36 @@ public class CachesEndpoint {
*/ */
public static final class CachesReport { public static final class CachesReport {
private final Map<String, Map<String, CacheDescriptor>> cacheManagers; private final Map<String, CacheManagerDescriptor> cacheManagers;
public CachesReport(Map<String, Map<String, CacheDescriptor>> cacheManagers) { public CachesReport(Map<String, CacheManagerDescriptor> cacheManagers) {
this.cacheManagers = cacheManagers; this.cacheManagers = cacheManagers;
} }
public Map<String, Map<String, CacheDescriptor>> getCacheManagers() { public Map<String, CacheManagerDescriptor> getCacheManagers() {
return this.cacheManagers; return this.cacheManagers;
} }
} }
/**
* Description of a {@link CacheManager}, primarily intended for serialization to
* JSON.
*/
public static final class CacheManagerDescriptor {
private final Map<String, CacheDescriptor> caches;
public CacheManagerDescriptor(Map<String, CacheDescriptor> caches) {
this.caches = caches;
}
public Map<String, CacheDescriptor> getCaches() {
return this.caches;
}
}
/** /**
* Basic description of a {@link Cache}, primarily intended for serialization to JSON. * Basic description of a {@link Cache}, primarily intended for serialization to JSON.
*/ */

@ -26,8 +26,8 @@ import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.springframework.boot.actuate.cache.CachesEndpoint.CacheDescriptor;
import org.springframework.boot.actuate.cache.CachesEndpoint.CacheEntry; import org.springframework.boot.actuate.cache.CachesEndpoint.CacheEntry;
import org.springframework.boot.actuate.cache.CachesEndpoint.CacheManagerDescriptor;
import org.springframework.cache.Cache; import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import org.springframework.cache.concurrent.ConcurrentMapCacheManager; import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
@ -53,14 +53,14 @@ public class CachesEndpointTests {
public void allCachesWithSingleCacheManager() { public void allCachesWithSingleCacheManager() {
CachesEndpoint endpoint = new CachesEndpoint(Collections.singletonMap("test", CachesEndpoint endpoint = new CachesEndpoint(Collections.singletonMap("test",
new ConcurrentMapCacheManager("a", "b"))); new ConcurrentMapCacheManager("a", "b")));
Map<String, Map<String, CacheDescriptor>> allDescriptors = endpoint.caches() Map<String, CacheManagerDescriptor> allDescriptors = endpoint.caches()
.getCacheManagers(); .getCacheManagers();
assertThat(allDescriptors).containsOnlyKeys("test"); assertThat(allDescriptors).containsOnlyKeys("test");
Map<String, CacheDescriptor> descriptors = allDescriptors.get("test"); CacheManagerDescriptor descriptors = allDescriptors.get("test");
assertThat(descriptors).containsOnlyKeys("a", "b"); assertThat(descriptors.getCaches()).containsOnlyKeys("a", "b");
assertThat(descriptors.get("a").getTarget()) assertThat(descriptors.getCaches().get("a").getTarget())
.isEqualTo(ConcurrentHashMap.class.getName()); .isEqualTo(ConcurrentHashMap.class.getName());
assertThat(descriptors.get("b").getTarget()) assertThat(descriptors.getCaches().get("b").getTarget())
.isEqualTo(ConcurrentHashMap.class.getName()); .isEqualTo(ConcurrentHashMap.class.getName());
} }
@ -70,11 +70,11 @@ public class CachesEndpointTests {
cacheManagers.put("test", new ConcurrentMapCacheManager("a", "b")); cacheManagers.put("test", new ConcurrentMapCacheManager("a", "b"));
cacheManagers.put("another", new ConcurrentMapCacheManager("a", "c")); cacheManagers.put("another", new ConcurrentMapCacheManager("a", "c"));
CachesEndpoint endpoint = new CachesEndpoint(cacheManagers); CachesEndpoint endpoint = new CachesEndpoint(cacheManagers);
Map<String, Map<String, CacheDescriptor>> allDescriptors = endpoint.caches() Map<String, CacheManagerDescriptor> allDescriptors = endpoint.caches()
.getCacheManagers(); .getCacheManagers();
assertThat(allDescriptors).containsOnlyKeys("test", "another"); assertThat(allDescriptors).containsOnlyKeys("test", "another");
assertThat(allDescriptors.get("test")).containsOnlyKeys("a", "b"); assertThat(allDescriptors.get("test").getCaches()).containsOnlyKeys("a", "b");
assertThat(allDescriptors.get("another")).containsOnlyKeys("a", "c"); assertThat(allDescriptors.get("another").getCaches()).containsOnlyKeys("a", "c");
} }
@Test @Test

@ -49,13 +49,13 @@ public class CachesEndpointWebIntegrationTests {
@Test @Test
public void allCaches() { public void allCaches() {
client.get().uri("/actuator/caches").exchange().expectStatus().isOk().expectBody() client.get().uri("/actuator/caches").exchange().expectStatus().isOk().expectBody()
.jsonPath("cacheManagers.one.a.target") .jsonPath("cacheManagers.one.caches.a.target")
.isEqualTo(ConcurrentHashMap.class.getName()) .isEqualTo(ConcurrentHashMap.class.getName())
.jsonPath("cacheManagers.one.b.target") .jsonPath("cacheManagers.one.caches.b.target")
.isEqualTo(ConcurrentHashMap.class.getName()) .isEqualTo(ConcurrentHashMap.class.getName())
.jsonPath("cacheManagers.two.a.target") .jsonPath("cacheManagers.two.caches.a.target")
.isEqualTo(ConcurrentHashMap.class.getName()) .isEqualTo(ConcurrentHashMap.class.getName())
.jsonPath("cacheManagers.two.c.target") .jsonPath("cacheManagers.two.caches.c.target")
.isEqualTo(ConcurrentHashMap.class.getName()); .isEqualTo(ConcurrentHashMap.class.getName());
} }

Loading…
Cancel
Save