From 10d5c1436d13ed9eb7c11628af246c1da50fb16b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20K=C3=B6ninger?= Date: Tue, 19 Jul 2022 10:57:49 +0200 Subject: [PATCH] fix(#2068): polling health status does not include details (#2070) --- .../admin/server/domain/values/StatusInfo.java | 15 ++++++++++++++- .../server/domain/values/StatusInfoTest.java | 9 +++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/StatusInfo.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/StatusInfo.java index bf27ae8b9b6..0a4a4b5eabb 100644 --- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/StatusInfo.java +++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/domain/values/StatusInfo.java @@ -124,7 +124,20 @@ public static Comparator severity() { @SuppressWarnings("unchecked") public static StatusInfo from(Map body) { - return StatusInfo.valueOf((String) (body).get("status"), (Map) body.get("details")); + Map details = Collections.emptyMap(); + + /* + * Key "details" is present when accessing Spring Boot Actuator Health + * using Accept-Header {@link org.springframework.boot.actuate.endpoint.ApiVersion#V2}. + */ + if (body.containsKey("details")) { + details = (Map) body.get("details"); + } + else if (body.containsKey("components")) { + details = (Map) body.get("components"); + } + + return StatusInfo.valueOf((String) body.get("status"), details); } } diff --git a/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/StatusInfoTest.java b/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/StatusInfoTest.java index ba16800a7b0..75b5b37fdee 100644 --- a/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/StatusInfoTest.java +++ b/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/domain/values/StatusInfoTest.java @@ -79,6 +79,15 @@ public void from_map_should_return_same_result() { assertThat(StatusInfo.from(map)).isEqualTo(StatusInfo.ofUp(singletonMap("foo", "bar"))); } + @Test + public void when_first_level_key_is_components() { + Map map = new HashMap<>(); + map.put("status", "UP"); + map.put("components", singletonMap("foo", "bar")); + + assertThat(StatusInfo.from(map)).isEqualTo(StatusInfo.ofUp(singletonMap("foo", "bar"))); + } + @Test public void should_sort_by_status_order() { List unordered = asList(STATUS_OUT_OF_SERVICE, STATUS_UNKNOWN, STATUS_OFFLINE, STATUS_DOWN, STATUS_UP,