Merge branch 'healthcontributor' of https://github.com/philwebb/spring-cloud-commons into philwebb-healthcontributor
This commit is contained in:
@@ -23,7 +23,6 @@ import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
||||
import org.springframework.boot.actuate.health.HealthAggregator;
|
||||
import org.springframework.boot.actuate.health.HealthIndicator;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
@@ -35,7 +34,7 @@ import org.springframework.cloud.client.actuator.HasFeatures;
|
||||
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicatorProperties;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryCompositeHealthIndicator;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryCompositeHealthContributor;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryHealthIndicator;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -71,10 +70,10 @@ public class CommonsClientAutoConfiguration {
|
||||
@ConditionalOnProperty(
|
||||
value = "spring.cloud.discovery.client.composite-indicator.enabled",
|
||||
matchIfMissing = true)
|
||||
@ConditionalOnBean({ DiscoveryHealthIndicator.class, HealthAggregator.class })
|
||||
public DiscoveryCompositeHealthIndicator discoveryCompositeHealthIndicator(
|
||||
HealthAggregator aggregator, List<DiscoveryHealthIndicator> indicators) {
|
||||
return new DiscoveryCompositeHealthIndicator(aggregator, indicators);
|
||||
@ConditionalOnBean({ DiscoveryHealthIndicator.class })
|
||||
public DiscoveryCompositeHealthContributor discoveryCompositeHealthContributor(
|
||||
List<DiscoveryHealthIndicator> indicators) {
|
||||
return new DiscoveryCompositeHealthContributor(indicators);
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright 2012-2019 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
|
||||
*
|
||||
* https://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.cloud.client.discovery.health;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.boot.actuate.health.CompositeHealthContributor;
|
||||
import org.springframework.boot.actuate.health.HealthContributor;
|
||||
import org.springframework.boot.actuate.health.HealthIndicator;
|
||||
import org.springframework.boot.actuate.health.NamedContributor;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Adapter that converts a collection of {@link DiscoveryHealthIndicator} beans into a
|
||||
* {@link CompositeHealthContributor}.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @since 2.2.0
|
||||
*/
|
||||
public class DiscoveryCompositeHealthContributor implements CompositeHealthContributor {
|
||||
|
||||
private Map<String, DiscoveryHealthIndicator> indicators;
|
||||
|
||||
public DiscoveryCompositeHealthContributor(
|
||||
Collection<DiscoveryHealthIndicator> indicators) {
|
||||
Assert.notNull(indicators, "'indicators' must not be null");
|
||||
this.indicators = indicators.stream().collect(
|
||||
Collectors.toMap(DiscoveryHealthIndicator::getName, Function.identity()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public HealthContributor getContributor(String name) {
|
||||
return asHealthIndicator(this.indicators.get(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<NamedContributor<HealthContributor>> iterator() {
|
||||
return this.indicators.values().stream().map(this::asNamedContributor).iterator();
|
||||
}
|
||||
|
||||
private NamedContributor<HealthContributor> asNamedContributor(
|
||||
DiscoveryHealthIndicator indicator) {
|
||||
return new NamedContributor<HealthContributor>() {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return indicator.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public HealthIndicator getContributor() {
|
||||
return asHealthIndicator(indicator);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
private HealthIndicator asHealthIndicator(DiscoveryHealthIndicator indicator) {
|
||||
return (indicator != null) ? () -> indicator.health() : null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -32,8 +32,10 @@ import org.springframework.boot.actuate.health.HealthIndicator;
|
||||
* and aggregates the statuses.
|
||||
*
|
||||
* @author Spencer Gibb
|
||||
* @deprecated since 2.2.0 in favor of {@link DiscoveryCompositeHealthContributor}
|
||||
*/
|
||||
// TODO: do we need this? Can they just be independent HealthIndicators?
|
||||
@Deprecated
|
||||
public class DiscoveryCompositeHealthIndicator extends CompositeHealthIndicator {
|
||||
|
||||
private final ArrayList<Holder> healthIndicators = new ArrayList<>();
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.cloud.client.actuator.FeaturesEndpoint;
|
||||
import org.springframework.cloud.client.actuator.HasFeatures;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryCompositeHealthIndicator;
|
||||
import org.springframework.cloud.client.discovery.health.DiscoveryCompositeHealthContributor;
|
||||
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
|
||||
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -53,7 +53,7 @@ public class CommonsClientAutoConfigurationTests {
|
||||
AutoConfigurations.of(HealthEndpointAutoConfiguration.class))
|
||||
.run(ctxt -> {
|
||||
then(ctxt.getBean(DiscoveryClientHealthIndicator.class)).isNotNull();
|
||||
then(ctxt.getBean(DiscoveryCompositeHealthIndicator.class))
|
||||
then(ctxt.getBean(DiscoveryCompositeHealthContributor.class))
|
||||
.isNotNull();
|
||||
then(ctxt.getBean(FeaturesEndpoint.class)).isNotNull();
|
||||
then(ctxt.getBeansOfType(HasFeatures.class).values()).isNotEmpty();
|
||||
@@ -67,7 +67,7 @@ public class CommonsClientAutoConfigurationTests {
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryClientHealthIndicator.class);
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthIndicator.class);
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthContributor.class);
|
||||
then(ctxt.getBean(FeaturesEndpoint.class)).isNotNull();
|
||||
// features actuator is independent of discovery
|
||||
assertThat(ctxt).doesNotHaveBean(HasFeatures.class);
|
||||
@@ -82,7 +82,7 @@ public class CommonsClientAutoConfigurationTests {
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryClientHealthIndicator.class);
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthIndicator.class);
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthContributor.class);
|
||||
then(ctxt.getBean(FeaturesEndpoint.class)).isNotNull();
|
||||
// features actuator is independent of discovery
|
||||
assertThat(ctxt).doesNotHaveBean(HasFeatures.class);
|
||||
@@ -98,7 +98,7 @@ public class CommonsClientAutoConfigurationTests {
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryClientHealthIndicator.class);
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthIndicator.class);
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthContributor.class);
|
||||
assertThat(ctxt).doesNotHaveBean(FeaturesEndpoint.class);
|
||||
});
|
||||
}
|
||||
@@ -112,7 +112,7 @@ public class CommonsClientAutoConfigurationTests {
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryClientHealthIndicator.class);
|
||||
assertThat(ctxt)
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthIndicator.class);
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthContributor.class);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ public class CommonsClientAutoConfigurationTests {
|
||||
assertThat(context)
|
||||
.doesNotHaveBean(DiscoveryClientHealthIndicator.class);
|
||||
assertThat(context)
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthIndicator.class);
|
||||
.doesNotHaveBean(DiscoveryCompositeHealthContributor.class);
|
||||
then(context.getBeansOfType(HasFeatures.class).values()).isEmpty();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -22,9 +22,10 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.actuate.health.CompositeHealthContributor;
|
||||
import org.springframework.boot.actuate.health.Health;
|
||||
import org.springframework.boot.actuate.health.HealthAggregator;
|
||||
import org.springframework.boot.actuate.health.OrderedHealthAggregator;
|
||||
import org.springframework.boot.actuate.health.HealthContributor;
|
||||
import org.springframework.boot.actuate.health.HealthIndicator;
|
||||
import org.springframework.boot.actuate.health.Status;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
@@ -52,31 +53,37 @@ import static org.mockito.Mockito.mock;
|
||||
public class DiscoveryClientHealthIndicatorTests {
|
||||
|
||||
@Autowired
|
||||
private DiscoveryCompositeHealthIndicator healthIndicator;
|
||||
private DiscoveryCompositeHealthContributor healthContributor;
|
||||
|
||||
@Autowired
|
||||
private DiscoveryClientHealthIndicator clientHealthIndicator;
|
||||
|
||||
@Test
|
||||
public void testHealthIndicatorDescriptionDisabled() {
|
||||
then(this.healthIndicator).as("healthIndicator was null").isNotNull();
|
||||
Health health = this.healthIndicator.health();
|
||||
assertHealth(health, Status.UNKNOWN);
|
||||
then(this.healthContributor).as("healthIndicator was null").isNotNull();
|
||||
assertHealth(getHealth("testDiscoveryHealthIndicator"), Status.UNKNOWN);
|
||||
assertHealth(getHealth("discoveryClient"), Status.UNKNOWN);
|
||||
|
||||
this.clientHealthIndicator
|
||||
.onApplicationEvent(new InstanceRegisteredEvent<>(this, null));
|
||||
|
||||
health = this.healthIndicator.health();
|
||||
Status status = assertHealth(health, Status.UP);
|
||||
assertHealth(getHealth("testDiscoveryHealthIndicator"), Status.UNKNOWN);
|
||||
Status status = assertHealth(getHealth("discoveryClient"), Status.UP);
|
||||
then(status.getDescription()).as("status description was wrong")
|
||||
.isEqualTo("TestDiscoveryClient");
|
||||
}
|
||||
|
||||
private Health getHealth(String name) {
|
||||
HealthContributor delegate = ((CompositeHealthContributor) this.healthContributor)
|
||||
.getContributor(name);
|
||||
return ((HealthIndicator) delegate).health();
|
||||
}
|
||||
|
||||
private Status assertHealth(Health health, Status expected) {
|
||||
then(health).as("health was null").isNotNull();
|
||||
Status status = health.getStatus();
|
||||
then(status).as("status was null").isNotNull();
|
||||
then(expected.getCode()).isEqualTo(status.getCode()).as("status code was wrong");
|
||||
then(status.getCode()).isEqualTo(expected.getCode()).as("status code was wrong");
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -84,11 +91,6 @@ public class DiscoveryClientHealthIndicatorTests {
|
||||
@EnableConfigurationProperties
|
||||
public static class Config {
|
||||
|
||||
@Bean
|
||||
public HealthAggregator healthAggregator() {
|
||||
return new OrderedHealthAggregator();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DiscoveryClient discoveryClient() {
|
||||
DiscoveryClient mock = mock(DiscoveryClient.class);
|
||||
@@ -100,6 +102,7 @@ public class DiscoveryClientHealthIndicatorTests {
|
||||
@Bean
|
||||
public DiscoveryHealthIndicator discoveryHealthIndicator() {
|
||||
return new DiscoveryHealthIndicator() {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "testDiscoveryHealthIndicator";
|
||||
@@ -109,6 +112,7 @@ public class DiscoveryClientHealthIndicatorTests {
|
||||
public Health health() {
|
||||
return new Health.Builder().unknown().build();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright 2012-2019 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
|
||||
*
|
||||
* https://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.cloud.client.discovery.health;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.boot.actuate.health.Health;
|
||||
import org.springframework.boot.actuate.health.HealthContributor;
|
||||
import org.springframework.boot.actuate.health.HealthIndicator;
|
||||
import org.springframework.boot.actuate.health.NamedContributor;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
||||
|
||||
/**
|
||||
* Tests for {@link DiscoveryCompositeHealthContributor}.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
public class DiscoveryCompositeHealthContributorTests {
|
||||
|
||||
@Test
|
||||
public void createWhenIndicatorsAreNullThrowsException() throws Exception {
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> new DiscoveryCompositeHealthContributor(null))
|
||||
.withMessage("'indicators' must not be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getContributorReturnsContributor() throws Exception {
|
||||
TestDiscoveryHealthIndicator indicator = new TestDiscoveryHealthIndicator("test",
|
||||
Health.up().build());
|
||||
DiscoveryCompositeHealthContributor composite = new DiscoveryCompositeHealthContributor(
|
||||
Arrays.asList(indicator));
|
||||
HealthIndicator adapted = (HealthIndicator) composite.getContributor("test");
|
||||
assertThat(adapted).isNotNull();
|
||||
assertThat(adapted.health()).isSameAs(indicator.health());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getContributorWhenMissingReturnsNull() throws Exception {
|
||||
TestDiscoveryHealthIndicator indicator = new TestDiscoveryHealthIndicator("test",
|
||||
Health.up().build());
|
||||
DiscoveryCompositeHealthContributor composite = new DiscoveryCompositeHealthContributor(
|
||||
Arrays.asList(indicator));
|
||||
assertThat((HealthIndicator) composite.getContributor("missing")).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void iteratorIteratesNamedContributors() throws Exception {
|
||||
TestDiscoveryHealthIndicator indicator1 = new TestDiscoveryHealthIndicator(
|
||||
"test1", Health.up().build());
|
||||
TestDiscoveryHealthIndicator indicator2 = new TestDiscoveryHealthIndicator(
|
||||
"test2", Health.down().build());
|
||||
DiscoveryCompositeHealthContributor composite = new DiscoveryCompositeHealthContributor(
|
||||
Arrays.asList(indicator1, indicator2));
|
||||
List<NamedContributor<HealthContributor>> contributors = new ArrayList<>();
|
||||
for (NamedContributor<HealthContributor> contributor : composite) {
|
||||
contributors.add(contributor);
|
||||
}
|
||||
assertThat(contributors).hasSize(2);
|
||||
assertThat(contributors).extracting("name").containsExactlyInAnyOrder("test1",
|
||||
"test2");
|
||||
assertThat(contributors).extracting("contributor").extracting("health")
|
||||
.containsExactlyInAnyOrder(indicator1.health(), indicator2.health());
|
||||
}
|
||||
|
||||
private static class TestDiscoveryHealthIndicator
|
||||
implements DiscoveryHealthIndicator {
|
||||
|
||||
private final String name;
|
||||
|
||||
private final Health health;
|
||||
|
||||
TestDiscoveryHealthIndicator(String name, Health health) {
|
||||
super();
|
||||
this.name = name;
|
||||
this.health = health;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Health health() {
|
||||
return this.health;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2019 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
|
||||
*
|
||||
* https://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.cloud.client.discovery.health;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.actuate.health.Health;
|
||||
import org.springframework.boot.actuate.health.HealthAggregator;
|
||||
import org.springframework.boot.actuate.health.OrderedHealthAggregator;
|
||||
import org.springframework.boot.actuate.health.Status;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.cloud.client.CommonsClientAutoConfiguration;
|
||||
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
||||
import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = { DiscoveryCompositeHealthIndicatorTests.Config.class,
|
||||
CommonsClientAutoConfiguration.class })
|
||||
public class DiscoveryCompositeHealthIndicatorTests {
|
||||
|
||||
@Autowired
|
||||
private DiscoveryCompositeHealthIndicator healthIndicator;
|
||||
|
||||
@Autowired
|
||||
private DiscoveryClientHealthIndicator clientHealthIndicator;
|
||||
|
||||
@Test
|
||||
public void testHealthIndicator() {
|
||||
then(this.healthIndicator).as("healthIndicator was null").isNotNull();
|
||||
Health health = this.healthIndicator.health();
|
||||
assertHealth(health, Status.UNKNOWN);
|
||||
|
||||
this.clientHealthIndicator
|
||||
.onApplicationEvent(new InstanceRegisteredEvent<>(this, null));
|
||||
|
||||
health = this.healthIndicator.health();
|
||||
Status status = assertHealth(health, Status.UP);
|
||||
then("").isEqualTo(status.getDescription()).as("status description was wrong");
|
||||
}
|
||||
|
||||
protected Status assertHealth(Health health, Status expected) {
|
||||
then(health).as("health was null").isNotNull();
|
||||
Status status = health.getStatus();
|
||||
then(status).as("status was null").isNotNull();
|
||||
then(expected.getCode()).isEqualTo(status.getCode()).as("status code was wrong");
|
||||
return status;
|
||||
}
|
||||
|
||||
@Configuration
|
||||
public static class Config {
|
||||
|
||||
@Bean
|
||||
public HealthAggregator healthAggregator() {
|
||||
return new OrderedHealthAggregator();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DiscoveryClient discoveryClient() {
|
||||
DiscoveryClient mock = mock(DiscoveryClient.class);
|
||||
given(mock.description()).willReturn("TestDiscoveryClient");
|
||||
given(mock.getServices()).willReturn(Arrays.asList("TestService1"));
|
||||
return mock;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DiscoveryHealthIndicator discoveryHealthIndicator() {
|
||||
return new DiscoveryHealthIndicator() {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "testDiscoveryHealthIndicator";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Health health() {
|
||||
return new Health.Builder().unknown().build();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user