From d2871b2d417e4d02e36606470fc37003cc0586cb Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Thu, 3 Dec 2015 22:47:11 +0100 Subject: [PATCH] Improve AbstractHealthAggregator to allow customization of aggregated details --- .../actuate/health/AbstractHealthAggregator.java | 15 +++++++++++---- .../actuate/health/OrderedHealthAggregator.java | 8 ++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthAggregator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthAggregator.java index 82e799bbc9dd..8b77fb869fa1 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthAggregator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthAggregator.java @@ -17,7 +17,6 @@ package org.springframework.boot.actuate.health; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -26,6 +25,7 @@ * aggregating the {@link Status} instances and not deal with contextual details etc. * * @author Christian Dupuis + * @author Vedran Pavic * @since 1.1.0 */ public abstract class AbstractHealthAggregator implements HealthAggregator { @@ -33,12 +33,11 @@ public abstract class AbstractHealthAggregator implements HealthAggregator { @Override public final Health aggregate(Map healths) { List statusCandidates = new ArrayList(); - Map details = new LinkedHashMap(); for (Map.Entry entry : healths.entrySet()) { - details.put(entry.getKey(), entry.getValue()); statusCandidates.add(entry.getValue().getStatus()); } - return new Health.Builder(aggregateStatus(statusCandidates), details).build(); + return new Health.Builder( + aggregateStatus(statusCandidates), aggregateDetails(healths)).build(); } /** @@ -49,4 +48,12 @@ public final Health aggregate(Map healths) { */ protected abstract Status aggregateStatus(List candidates); + /** + * Return the map of 'aggregate' details that should be used from the specified + * healths. + * @param healths the health instances to aggregate + * @return a map of details + */ + protected abstract Map aggregateDetails(Map healths); + } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/OrderedHealthAggregator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/OrderedHealthAggregator.java index bebf0c544598..c73041adbbde 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/OrderedHealthAggregator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/OrderedHealthAggregator.java @@ -20,7 +20,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import org.springframework.util.Assert; @@ -32,6 +34,7 @@ * can be set by calling {@link #setStatusOrder(List)}. * * @author Christian Dupuis + * @author Vedran Pavic * @since 1.1.0 */ public class OrderedHealthAggregator extends AbstractHealthAggregator { @@ -84,6 +87,11 @@ protected Status aggregateStatus(List candidates) { return filteredCandidates.get(0); } + @Override + protected Map aggregateDetails(Map healths) { + return new LinkedHashMap(healths); + } + /** * {@link Comparator} used to order {@link Status}. */