From db74d27ea0fb8c2b6ae1b2a5b0c7ecf9f43e16f2 Mon Sep 17 00:00:00 2001 From: Christian Dupuis Date: Thu, 22 May 2014 18:01:35 +0200 Subject: [PATCH] Extract AbstractHealthIndicator to make it more simple to implement HealthIndicator --- .../health/AbstractHealthIndicator.java | 51 +++++++++++++++++++ .../actuate/health/MongoHealthIndicator.java | 16 ++---- .../actuate/health/RabbitHealthIndicator.java | 30 +++++------ .../actuate/health/RedisHealthIndicator.java | 11 ++-- .../health/VanillaHealthIndicator.java | 6 +-- 5 files changed, 73 insertions(+), 41 deletions(-) create mode 100644 spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java new file mode 100644 index 00000000000..c5abc45dfaf --- /dev/null +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.health; + +/** + * Base {@link HealthIndicator} implementations that encapsulates creation of + * {@link Health} instance and error handling. + * + *

+ * This implementation is only suitable if an {@link Exception} raised from + * {@link #doHealthCheck(Health)} should create a {@link Status#DOWN} health status. + * + * @author Christian Dupuis + * @since 1.1.0 + */ +public abstract class AbstractHealthIndicator implements HealthIndicator { + + @Override + public final Health health() { + Health health = new Health(); + try { + doHealthCheck(health); + } + catch (Exception ex) { + health.down().withException(ex); + } + return health; + } + + /** + * Actual health check logic. + * @param health {@link Health} instance of report status. + * @throws Exception any {@link Exception} that should create a {@link Status#DOWN} + * system status. + */ + protected abstract void doHealthCheck(Health health) throws Exception; +} diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MongoHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MongoHealthIndicator.java index 729ff1ce52e..c9d099d60cc 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MongoHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/MongoHealthIndicator.java @@ -28,7 +28,7 @@ import com.mongodb.CommandResult; * @author Christian Dupuis * @since 1.1.0 */ -public class MongoHealthIndicator implements HealthIndicator { +public class MongoHealthIndicator extends AbstractHealthIndicator { private final MongoTemplate mongoTemplate; @@ -38,17 +38,9 @@ public class MongoHealthIndicator implements HealthIndicator { } @Override - public Health health() { - Health health = new Health(); - try { - CommandResult result = this.mongoTemplate - .executeCommand("{ serverStatus: 1 }"); - health.up().withDetail("version", result.getString("version")); - } - catch (Exception ex) { - health.down().withException(ex); - } - return health; + protected void doHealthCheck(Health health) throws Exception { + CommandResult result = this.mongoTemplate.executeCommand("{ serverStatus: 1 }"); + health.up().withDetail("version", result.getString("version")); } } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java index 366475cd4ca..fd6a0efe93c 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java @@ -31,7 +31,7 @@ import com.rabbitmq.client.Channel; * @author Christian Dupuis * @since 1.1.0 */ -public class RabbitHealthIndicator implements HealthIndicator { +public class RabbitHealthIndicator extends AbstractHealthIndicator { private final RabbitTemplate rabbitTemplate; @@ -41,23 +41,17 @@ public class RabbitHealthIndicator implements HealthIndicator { } @Override - public Health health() { - Health health = new Health(); - try { - health.up().withDetail("version", - this.rabbitTemplate.execute(new ChannelCallback() { + protected void doHealthCheck(Health health) throws Exception { + health.up().withDetail("version", + this.rabbitTemplate.execute(new ChannelCallback() { - @Override - public String doInRabbit(Channel channel) throws Exception { - Map serverProperties = channel - .getConnection().getServerProperties(); - return serverProperties.get("version").toString(); - } - })); - } - catch (Exception ex) { - health.down().withException(ex); - } - return health; + @Override + public String doInRabbit(Channel channel) throws Exception { + Map serverProperties = channel.getConnection() + .getServerProperties(); + return serverProperties.get("version").toString(); + } + })); } + } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisHealthIndicator.java index ce44e574f2f..731bcc500a4 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RedisHealthIndicator.java @@ -30,7 +30,7 @@ import org.springframework.util.Assert; * @author Christian Dupuis * @since 1.1.0 */ -public class RedisHealthIndicator implements HealthIndicator { +public class RedisHealthIndicator extends AbstractHealthIndicator { private final RedisConnectionFactory redisConnectionFactory; @@ -40,22 +40,17 @@ public class RedisHealthIndicator implements HealthIndicator { } @Override - public Health health() { - Health health = new Health(); - + protected void doHealthCheck(Health health) throws Exception { RedisConnection connection = null; try { connection = RedisConnectionUtils.getConnection(this.redisConnectionFactory); Properties info = connection.info(); health.up().withDetail("version", info.getProperty("redis_version")); } - catch (Exception ex) { - health.down().withException(ex); - } finally { RedisConnectionUtils.releaseConnection(connection, this.redisConnectionFactory); } - return health; } + } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/VanillaHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/VanillaHealthIndicator.java index aa042d42c36..b5a4f21d92c 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/VanillaHealthIndicator.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/VanillaHealthIndicator.java @@ -22,11 +22,11 @@ package org.springframework.boot.actuate.health; * @author Dave Syer * @author Christian Dupuis */ -public class VanillaHealthIndicator implements HealthIndicator { +public class VanillaHealthIndicator extends AbstractHealthIndicator { @Override - public Health health() { - return new Health(Status.UP); + protected void doHealthCheck(Health health) throws Exception { + health.up(); } }