Browse Source

Allow custom AbstractHealthIndicator warning logs

Update `AbstractHealthIndicator` so that the warning message can be
customized. Also updated our existing indicators with better messages.

Fixes gh-11880
pull/11812/merge
Phillip Webb 8 years ago
parent
commit
8af02ce05b
  1. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java
  2. 4
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java
  3. 4
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java
  4. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java
  5. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java
  6. 47
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java
  7. 4
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ApplicationHealthIndicator.java
  8. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicator.java
  9. 2
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java
  10. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java
  11. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java
  12. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java
  13. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java
  14. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java
  15. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java
  16. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java
  17. 1
      spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java

@ -34,6 +34,7 @@ public class RabbitHealthIndicator extends AbstractHealthIndicator { @@ -34,6 +34,7 @@ public class RabbitHealthIndicator extends AbstractHealthIndicator {
private final RabbitTemplate rabbitTemplate;
public RabbitHealthIndicator(RabbitTemplate rabbitTemplate) {
super("Rabbit health check failed");
Assert.notNull(rabbitTemplate, "RabbitTemplate must not be null");
this.rabbitTemplate = rabbitTemplate;
}

4
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cassandra/CassandraHealthIndicator.java

@ -37,6 +37,10 @@ public class CassandraHealthIndicator extends AbstractHealthIndicator { @@ -37,6 +37,10 @@ public class CassandraHealthIndicator extends AbstractHealthIndicator {
private CassandraOperations cassandraOperations;
public CassandraHealthIndicator() {
super("Cassandra health check failed");
}
/**
* Create a new {@link CassandraHealthIndicator} instance.
* @param cassandraOperations the Cassandra operations

4
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/couchbase/CouchbaseHealthIndicator.java

@ -37,6 +37,10 @@ public class CouchbaseHealthIndicator extends AbstractHealthIndicator { @@ -37,6 +37,10 @@ public class CouchbaseHealthIndicator extends AbstractHealthIndicator {
private CouchbaseOperations operations;
public CouchbaseHealthIndicator() {
super("Couchbase health check failed");
}
public CouchbaseHealthIndicator(CouchbaseOperations couchbaseOperations) {
Assert.notNull(couchbaseOperations, "CouchbaseOperations must not be null");
this.operations = couchbaseOperations;

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchHealthIndicator.java

@ -65,6 +65,7 @@ public class ElasticsearchHealthIndicator extends AbstractHealthIndicator { @@ -65,6 +65,7 @@ public class ElasticsearchHealthIndicator extends AbstractHealthIndicator {
*/
public ElasticsearchHealthIndicator(Client client, long responseTimeout,
String... indices) {
super("Elasticsearch health check failed");
this.client = client;
this.responseTimeout = responseTimeout;
this.indices = indices;

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/elasticsearch/ElasticsearchJestHealthIndicator.java

@ -40,6 +40,7 @@ public class ElasticsearchJestHealthIndicator extends AbstractHealthIndicator { @@ -40,6 +40,7 @@ public class ElasticsearchJestHealthIndicator extends AbstractHealthIndicator {
private final JsonParser jsonParser = new JsonParser();
public ElasticsearchJestHealthIndicator(JestClient jestClient) {
super("Elasticsearch health check failed");
this.jestClient = jestClient;
}

47
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthIndicator.java

@ -16,10 +16,14 @@ @@ -16,10 +16,14 @@
package org.springframework.boot.actuate.health;
import java.util.function.Function;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.boot.actuate.health.Health.Builder;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
* Base {@link HealthIndicator} implementations that encapsulates creation of
@ -34,8 +38,45 @@ import org.springframework.boot.actuate.health.Health.Builder; @@ -34,8 +38,45 @@ import org.springframework.boot.actuate.health.Health.Builder;
*/
public abstract class AbstractHealthIndicator implements HealthIndicator {
private static final String NO_MESSAGE = null;
private static final String DEFAULT_MESSAGE = "Health check failed";
private final Log logger = LogFactory.getLog(getClass());
private final Function<Exception, String> healthCheckFailedMessage;
/**
* Create a new {@link AbstractHealthIndicator} instance with a default
* {@code healthCheckFailedMessage}.
*/
public AbstractHealthIndicator() {
this(NO_MESSAGE);
}
/**
* Create a new {@link AbstractHealthIndicator} instance with a specific message to
* log when the health check fails.
* @param healthCheckFailedMessage the message to log on health check failure
* @since 2.0.0
*/
protected AbstractHealthIndicator(String healthCheckFailedMessage) {
this.healthCheckFailedMessage = (ex) -> healthCheckFailedMessage;
}
/**
* Create a new {@link AbstractHealthIndicator} instance with a specific message to
* log when the health check fails.
* @param healthCheckFailedMessage the message to log on health check failure
* @since 2.0.0
*/
protected AbstractHealthIndicator(
Function<Exception, String> healthCheckFailedMessage) {
Assert.notNull(healthCheckFailedMessage,
"HealthCheckFailedMessage must not be null");
this.healthCheckFailedMessage = healthCheckFailedMessage;
}
@Override
public final Health health() {
Health.Builder builder = new Health.Builder();
@ -43,7 +84,11 @@ public abstract class AbstractHealthIndicator implements HealthIndicator { @@ -43,7 +84,11 @@ public abstract class AbstractHealthIndicator implements HealthIndicator {
doHealthCheck(builder);
}
catch (Exception ex) {
this.logger.warn("Health check failed", ex);
if (this.logger.isWarnEnabled()) {
String message = this.healthCheckFailedMessage.apply(ex);
this.logger.warn(StringUtils.hasText(message) ? message : DEFAULT_MESSAGE,
ex);
}
builder.down(ex);
}
return builder.build();

4
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ApplicationHealthIndicator.java

@ -25,6 +25,10 @@ package org.springframework.boot.actuate.health; @@ -25,6 +25,10 @@ package org.springframework.boot.actuate.health;
*/
public class ApplicationHealthIndicator extends AbstractHealthIndicator {
public ApplicationHealthIndicator() {
super("Application health check failed");
}
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
builder.up();

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicator.java

@ -35,6 +35,7 @@ public class InfluxDbHealthIndicator extends AbstractHealthIndicator { @@ -35,6 +35,7 @@ public class InfluxDbHealthIndicator extends AbstractHealthIndicator {
private final InfluxDB influxDb;
public InfluxDbHealthIndicator(InfluxDB influxDb) {
super("InfluxDB health check failed");
Assert.notNull(influxDb, "InfluxDB must not be null");
this.influxDb = influxDb;
}

2
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jdbc/DataSourceHealthIndicator.java

@ -64,6 +64,7 @@ public class DataSourceHealthIndicator extends AbstractHealthIndicator @@ -64,6 +64,7 @@ public class DataSourceHealthIndicator extends AbstractHealthIndicator
* Create a new {@link DataSourceHealthIndicator} instance.
*/
public DataSourceHealthIndicator() {
this(null, null);
}
/**
@ -82,6 +83,7 @@ public class DataSourceHealthIndicator extends AbstractHealthIndicator @@ -82,6 +83,7 @@ public class DataSourceHealthIndicator extends AbstractHealthIndicator
* @param query the validation query to use (can be {@code null})
*/
public DataSourceHealthIndicator(DataSource dataSource, String query) {
super("DataSource health check failed");
this.dataSource = dataSource;
this.query = query;
this.jdbcTemplate = new JdbcTemplate(dataSource);

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/jms/JmsHealthIndicator.java

@ -34,6 +34,7 @@ public class JmsHealthIndicator extends AbstractHealthIndicator { @@ -34,6 +34,7 @@ public class JmsHealthIndicator extends AbstractHealthIndicator {
private final ConnectionFactory connectionFactory;
public JmsHealthIndicator(ConnectionFactory connectionFactory) {
super("JMS health check failed");
this.connectionFactory = connectionFactory;
}

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/ldap/LdapHealthIndicator.java

@ -40,6 +40,7 @@ public class LdapHealthIndicator extends AbstractHealthIndicator { @@ -40,6 +40,7 @@ public class LdapHealthIndicator extends AbstractHealthIndicator {
private final LdapOperations ldapOperations;
public LdapHealthIndicator(LdapOperations ldapOperations) {
super("LDAP health check failed");
Assert.notNull(ldapOperations, "LdapOperations must not be null");
this.ldapOperations = ldapOperations;
}

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mail/MailHealthIndicator.java

@ -32,6 +32,7 @@ public class MailHealthIndicator extends AbstractHealthIndicator { @@ -32,6 +32,7 @@ public class MailHealthIndicator extends AbstractHealthIndicator {
private final JavaMailSenderImpl mailSender;
public MailHealthIndicator(JavaMailSenderImpl mailSender) {
super("Mail health check failed");
this.mailSender = mailSender;
}

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/mongo/MongoHealthIndicator.java

@ -36,6 +36,7 @@ public class MongoHealthIndicator extends AbstractHealthIndicator { @@ -36,6 +36,7 @@ public class MongoHealthIndicator extends AbstractHealthIndicator {
private final MongoTemplate mongoTemplate;
public MongoHealthIndicator(MongoTemplate mongoTemplate) {
super("MongoDB health check failed");
Assert.notNull(mongoTemplate, "MongoTemplate must not be null");
this.mongoTemplate = mongoTemplate;
}

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java

@ -50,6 +50,7 @@ public class Neo4jHealthIndicator extends AbstractHealthIndicator { @@ -50,6 +50,7 @@ public class Neo4jHealthIndicator extends AbstractHealthIndicator {
* @param sessionFactory the SessionFactory
*/
public Neo4jHealthIndicator(SessionFactory sessionFactory) {
super("Neo4J health check failed");
this.sessionFactory = sessionFactory;
}

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java

@ -45,6 +45,7 @@ public class RedisHealthIndicator extends AbstractHealthIndicator { @@ -45,6 +45,7 @@ public class RedisHealthIndicator extends AbstractHealthIndicator {
private final RedisConnectionFactory redisConnectionFactory;
public RedisHealthIndicator(RedisConnectionFactory connectionFactory) {
super("Reddis health check failed");
Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
this.redisConnectionFactory = connectionFactory;
}

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/solr/SolrHealthIndicator.java

@ -38,6 +38,7 @@ public class SolrHealthIndicator extends AbstractHealthIndicator { @@ -38,6 +38,7 @@ public class SolrHealthIndicator extends AbstractHealthIndicator {
private final SolrClient solrClient;
public SolrHealthIndicator(SolrClient solrClient) {
super("Solr health check failed");
this.solrClient = solrClient;
}

1
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/DiskSpaceHealthIndicator.java

@ -48,6 +48,7 @@ public class DiskSpaceHealthIndicator extends AbstractHealthIndicator { @@ -48,6 +48,7 @@ public class DiskSpaceHealthIndicator extends AbstractHealthIndicator {
* @param threshold the minimum disk space that should be available (in bytes)
*/
public DiskSpaceHealthIndicator(File path, long threshold) {
super("DiskSpace health check failed");
this.path = path;
this.threshold = threshold;
}

Loading…
Cancel
Save