Skip to content

Commit 9579826

Browse files
Jon Schneiderwilkinsona
authored andcommitted
Update validation of Micrometer configuration
See gh-21067
1 parent e26f3e2 commit 9579826

File tree

6 files changed

+34
-24
lines changed

6 files changed

+34
-24
lines changed
Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,30 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics;
1818

19-
import io.micrometer.core.instrument.config.MissingRequiredConfigurationException;
20-
19+
import io.micrometer.core.instrument.config.validate.ValidationException;
2120
import org.springframework.boot.diagnostics.AbstractFailureAnalyzer;
2221
import org.springframework.boot.diagnostics.FailureAnalysis;
2322

23+
import java.util.stream.Collectors;
24+
2425
/**
2526
* An {@link AbstractFailureAnalyzer} that performs analysis of failures caused by a
26-
* {@link MissingRequiredConfigurationException}.
27+
* {@link ValidationException}.
2728
*
2829
* @author Andy Wilkinson
2930
*/
30-
class MissingRequiredConfigurationFailureAnalyzer
31-
extends AbstractFailureAnalyzer<MissingRequiredConfigurationException> {
31+
class ValidationFailureAnalyzer
32+
extends AbstractFailureAnalyzer<ValidationException> {
3233

3334
@Override
34-
protected FailureAnalysis analyze(Throwable rootFailure, MissingRequiredConfigurationException cause) {
35-
StringBuilder description = new StringBuilder();
36-
description.append(cause.getMessage());
37-
if (!cause.getMessage().endsWith(".")) {
38-
description.append(".");
39-
}
40-
return new FailureAnalysis(description.toString(),
35+
protected FailureAnalysis analyze(Throwable rootFailure, ValidationException cause) {
36+
String description = cause.getValidation().failures().stream()
37+
.map(failure -> "management.metrics.export." + failure.getProperty() + " was '" +
38+
(failure.getValue() == null ? "null" : failure.getValue().toString()) +
39+
"' but it " + failure.getMessage() + ".")
40+
.collect(Collectors.joining("\n"));
41+
42+
return new FailureAnalysis(description,
4143
"Update your application to provide the missing configuration.", cause);
4244
}
4345

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/elastic/ElasticProperties.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,17 @@ public class ElasticProperties extends StepRegistryProperties {
6262
/**
6363
* Login user of the Elastic server.
6464
*/
65-
private String userName = "";
65+
private String userName;
6666

6767
/**
6868
* Login password of the Elastic server.
6969
*/
70-
private String password = "";
70+
private String password;
7171

7272
/**
7373
* Ingest pipeline name. By default, events are not pre-processed.
7474
*/
75-
private String pipeline = "";
75+
private String pipeline;
7676

7777
public String getHost() {
7878
return this.host;

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/ganglia/GangliaProperties.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,11 @@ public class GangliaProperties {
4646

4747
/**
4848
* Base time unit used to report rates.
49+
*
50+
* @deprecated No longer used by Micrometer.
4951
*/
50-
private TimeUnit rateUnits = TimeUnit.SECONDS;
52+
@Deprecated
53+
private TimeUnit rateUnits;
5154

5255
/**
5356
* Base time unit used to report durations.
@@ -56,8 +59,11 @@ public class GangliaProperties {
5659

5760
/**
5861
* Ganglia protocol version. Must be either 3.1 or 3.0.
62+
*
63+
* @deprecated No longer used by Micrometer.
5964
*/
60-
private String protocolVersion = "3.1";
65+
@Deprecated
66+
private String protocolVersion;
6167

6268
/**
6369
* UDP addressing mode, either unicast or multicast.

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,4 @@ org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementChil
105105
org.springframework.boot.actuate.autoconfigure.web.servlet.WebMvcEndpointChildContextConfiguration
106106

107107
org.springframework.boot.diagnostics.FailureAnalyzer=\
108-
org.springframework.boot.actuate.autoconfigure.metrics.MissingRequiredConfigurationFailureAnalyzer
108+
org.springframework.boot.actuate.autoconfigure.metrics.ValidationFailureAnalyzer
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,20 @@
3030
import static org.junit.jupiter.api.Assertions.fail;
3131

3232
/**
33-
* Tests for {@link MissingRequiredConfigurationFailureAnalyzer}.
33+
* Tests for {@link ValidationFailureAnalyzer}.
3434
*
3535
* @author Andy Wilkinson
3636
*/
37-
class MissingRequiredConfigurationFailureAnalyzerTests {
37+
class ValidationFailureAnalyzerTests {
3838

3939
@Test
4040
void analyzesMissingRequiredConfiguration() {
41-
FailureAnalysis analysis = new MissingRequiredConfigurationFailureAnalyzer()
41+
FailureAnalysis analysis = new ValidationFailureAnalyzer()
4242
.analyze(createFailure(MissingAccountIdConfiguration.class));
4343
assertThat(analysis).isNotNull();
44-
assertThat(analysis.getDescription()).isEqualTo("accountId must be set to report metrics to New Relic.");
44+
assertThat(analysis.getDescription()).isEqualTo(
45+
"management.metrics.export.newrelic.apiKey was 'null' but it is required when publishing to Insights API.\n" +
46+
"management.metrics.export.newrelic.accountId was 'null' but it is required when publishing to Insights API.");
4547
assertThat(analysis.getAction()).isEqualTo("Update your application to provide the missing configuration.");
4648
}
4749

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontPropertiesTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics.export.wavefront;
1818

19+
import io.micrometer.core.instrument.config.validate.ValidationException;
1920
import io.micrometer.wavefront.WavefrontConfig;
2021
import org.junit.jupiter.api.Test;
2122

2223
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.PushRegistryPropertiesTests;
2324

2425
import static org.assertj.core.api.Assertions.assertThat;
26+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2527

2628
/**
2729
* Tests for {@link WavefrontProperties}.
@@ -36,8 +38,6 @@ void defaultValuesAreConsistent() {
3638
WavefrontConfig config = WavefrontConfig.DEFAULT_DIRECT;
3739
assertStepRegistryDefaultValues(properties, config);
3840
assertThat(properties.getUri().toString()).isEqualTo(config.uri());
39-
// source has no static default value
40-
assertThat(properties.getApiToken()).isEqualTo(config.apiToken());
4141
assertThat(properties.getGlobalPrefix()).isEqualTo(config.globalPrefix());
4242
}
4343

0 commit comments

Comments
 (0)