Skip to content

Commit

Permalink
Polish "Bring back Elasticsearch RestClient auto-configuration"
Browse files Browse the repository at this point in the history
  • Loading branch information
wilkinsona committed Apr 12, 2022
1 parent eb3bf40 commit a7a71da
Show file tree
Hide file tree
Showing 13 changed files with 88 additions and 384 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,9 @@
* @author Artsiom Yudovin
* @since 2.1.1
*/
@SuppressWarnings("deprecation")
@AutoConfiguration(after = ElasticsearchRestClientAutoConfiguration.class)
@ConditionalOnClass(org.elasticsearch.client.RestHighLevelClient.class)
@ConditionalOnBean(org.elasticsearch.client.RestHighLevelClient.class)
@ConditionalOnClass(RestClient.class)
@ConditionalOnBean(RestClient.class)
@ConditionalOnEnabledHealthIndicator("elasticsearch")
public class ElasticSearchRestHealthContributorAutoConfiguration
extends CompositeHealthContributorConfiguration<ElasticsearchRestHealthIndicator, RestClient> {
Expand All @@ -53,4 +52,4 @@ public HealthContributor elasticsearchHealthContributor(Map<String, RestClient>
return createContributor(clients);
}

}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 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.
Expand All @@ -21,7 +21,6 @@
import org.junit.jupiter.api.Test;

import org.springframework.boot.actuate.autoconfigure.health.HealthContributorAutoConfiguration;
import org.springframework.boot.actuate.elasticsearch.ElasticsearchRestClientHealthIndicator;
import org.springframework.boot.actuate.elasticsearch.ElasticsearchRestHealthIndicator;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration;
Expand All @@ -33,54 +32,53 @@
import static org.assertj.core.api.Assertions.assertThat;

/**
* Tests for {@link ElasticsearchRestClientAutoConfiguration}.
* Tests for {@link ElasticSearchRestHealthContributorAutoConfiguration}.
*
* @author Filip Hrisafov
* @author Andy Wilkinson
*/
class ElasticsearchRestHealthContributorAutoConfigurationTests {
class ElasticSearchRestHealthContributorAutoConfigurationTests {

private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(ElasticsearchRestClientAutoConfiguration.class,
ElasticSearchRestHealthContributorAutoConfiguration.class,
HealthContributorAutoConfiguration.class));

@Test
@SuppressWarnings("deprecation")
void runShouldCreateIndicator() {
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(ElasticsearchRestHealthIndicator.class)
.hasBean("elasticsearchHealthContributor"));
}

@Test
@SuppressWarnings("deprecation")
void runWithoutRestHighLevelClientAndWithoutRestClientShouldNotCreateIndicator() {
this.contextRunner
.withClassLoader(
new FilteredClassLoader(org.elasticsearch.client.RestHighLevelClient.class, RestClient.class))
.run((context) -> assertThat(context).doesNotHaveBean(ElasticsearchRestClientHealthIndicator.class)
.run((context) -> assertThat(context).doesNotHaveBean(ElasticsearchRestHealthIndicator.class)
.doesNotHaveBean("elasticsearchHealthContributor"));
}

@Test
@SuppressWarnings("deprecation")
void runWithoutRestHighLevelClientAndWithRestClientShouldCreateIndicator() {
this.contextRunner.withUserConfiguration(CustomRestClientConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(ElasticsearchRestClientHealthIndicator.class)
.doesNotHaveBean(ElasticsearchRestHealthIndicator.class)
.run((context) -> assertThat(context).hasSingleBean(ElasticsearchRestHealthIndicator.class)
.hasSingleBean(ElasticsearchRestHealthIndicator.class)
.hasBean("elasticsearchHealthContributor"));
}

@Test
@SuppressWarnings("deprecation")
void runWithRestHighLevelClientAndWithRestClientShouldCreateIndicator() {
this.contextRunner.withUserConfiguration(CustomRestHighClientConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(ElasticsearchRestClientHealthIndicator.class)
.run((context) -> assertThat(context).hasSingleBean(ElasticsearchRestHealthIndicator.class)
.hasBean("elasticsearchHealthContributor"));
}

@Test
void runWhenDisabledShouldNotCreateIndicator() {
this.contextRunner.withPropertyValues("management.health.elasticsearch.enabled:false")
.run((context) -> assertThat(context).doesNotHaveBean(ElasticsearchRestClientHealthIndicator.class)
.run((context) -> assertThat(context).doesNotHaveBean(ElasticsearchRestHealthIndicator.class)
.doesNotHaveBean("elasticsearchHealthContributor"));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ void runShouldCreateIndicator() {
}

@Test
@SuppressWarnings("deprecation")
void runWithRegularIndicatorShouldOnlyCreateReactiveIndicator() {
this.contextRunner
.withConfiguration(AutoConfigurations.of(ElasticSearchRestHealthContributorAutoConfiguration.class))
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,22 @@

package org.springframework.boot.actuate.elasticsearch;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Map;

import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.json.JsonParser;
import org.springframework.boot.json.JsonParserFactory;
import org.springframework.util.StreamUtils;

/**
* {@link HealthIndicator} for an Elasticsearch cluster using a {@link RestClient}.
Expand All @@ -27,19 +40,51 @@
* @author Brian Clozel
* @author Filip Hrisafov
* @since 2.1.1
* @deprecated since 2.7.0 for removal in 2.9.0 in favor of
* {@link ElasticsearchRestClientHealthIndicator}
*/
@Deprecated
public class ElasticsearchRestHealthIndicator extends ElasticsearchRestClientHealthIndicator {
public class ElasticsearchRestHealthIndicator extends AbstractHealthIndicator {

private static final String RED_STATUS = "red";

private final RestClient client;

private final JsonParser jsonParser;

@SuppressWarnings("deprecation")
public ElasticsearchRestHealthIndicator(org.elasticsearch.client.RestHighLevelClient client) {
this(client.getLowLevelClient());
}

public ElasticsearchRestHealthIndicator(RestClient client) {
super(client);
super("Elasticsearch health check failed");
this.client = client;
this.jsonParser = JsonParserFactory.getJsonParser();
}

@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
Response response = this.client.performRequest(new Request("GET", "/_cluster/health/"));
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() != HttpStatus.SC_OK) {
builder.down();
builder.withDetail("statusCode", statusLine.getStatusCode());
builder.withDetail("reasonPhrase", statusLine.getReasonPhrase());
return;
}
try (InputStream inputStream = response.getEntity().getContent()) {
doHealthCheck(builder, StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8));
}
}

private void doHealthCheck(Health.Builder builder, String json) {
Map<String, Object> response = this.jsonParser.parseMap(json);
String status = (String) response.get("status");
if (RED_STATUS.equals(status)) {
builder.outOfService();
}
else {
builder.up();
}
builder.withDetails(response);
}

}
Loading

0 comments on commit a7a71da

Please sign in to comment.