Skip to content

Commit 94b17ec

Browse files
Johnny Goncalvessnicoll
authored andcommitted
Allow custom ExemplarSampler to be used
See gh-35619
1 parent 3586bfb commit 94b17ec

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public CollectorRegistry collectorRegistry() {
9090
}
9191

9292
@Bean
93-
@ConditionalOnMissingBean
93+
@ConditionalOnMissingBean(ExemplarSampler.class)
9494
@ConditionalOnBean(SpanContextSupplier.class)
9595
public DefaultExemplarSampler exemplarSampler(SpanContextSupplier spanContextSupplier) {
9696
return new DefaultExemplarSampler(spanContextSupplier);

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

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import io.micrometer.prometheus.PrometheusConfig;
2121
import io.micrometer.prometheus.PrometheusMeterRegistry;
2222
import io.prometheus.client.CollectorRegistry;
23+
import io.prometheus.client.exemplars.DefaultExemplarSampler;
24+
import io.prometheus.client.exemplars.Exemplar;
2325
import io.prometheus.client.exemplars.ExemplarSampler;
2426
import io.prometheus.client.exemplars.tracer.common.SpanContextSupplier;
2527
import io.prometheus.client.exporter.BasicAuthHttpConnectionFactory;
@@ -64,6 +66,12 @@ void backsOffWithoutAClock() {
6466
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(PrometheusMeterRegistry.class));
6567
}
6668

69+
@Test
70+
void backsOfWhenExemplarSamplerIsPresent() {
71+
this.contextRunner.withUserConfiguration(CustomExemplarSamplerConfiguration.class)
72+
.run((context) -> assertThat(context).doesNotHaveBean(DefaultExemplarSampler.class));
73+
}
74+
6775
@Test
6876
void autoConfiguresItsConfigCollectorRegistryAndMeterRegistry() {
6977
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
@@ -119,7 +127,7 @@ void allowsCustomCollectorRegistryToBeUsed() {
119127

120128
@Test
121129
void autoConfiguresExemplarSamplerIfSpanContextSupplierIsPresent() {
122-
this.contextRunner.withUserConfiguration(ExemplarsConfiguration.class)
130+
this.contextRunner.withUserConfiguration(DefaultExemplarSamplerConfiguration.class)
123131
.run((context) -> assertThat(context).hasSingleBean(SpanContextSupplier.class)
124132
.hasSingleBean(ExemplarSampler.class)
125133
.hasSingleBean(PrometheusMeterRegistry.class));
@@ -287,7 +295,7 @@ PrometheusScrapeEndpoint customEndpoint(CollectorRegistry collectorRegistry) {
287295

288296
@Configuration(proxyBeanMethods = false)
289297
@Import(BaseConfiguration.class)
290-
static class ExemplarsConfiguration {
298+
static class DefaultExemplarSamplerConfiguration {
291299

292300
@Bean
293301
SpanContextSupplier spanContextSupplier() {
@@ -313,4 +321,26 @@ public boolean isSampled() {
313321

314322
}
315323

324+
@Configuration(proxyBeanMethods = false)
325+
@Import(BaseConfiguration.class)
326+
static class CustomExemplarSamplerConfiguration {
327+
328+
@Bean
329+
ExemplarSampler exemplarSampler() {
330+
return new ExemplarSampler() {
331+
332+
@Override
333+
public Exemplar sample(double value, double bucketFrom, double bucketTo, Exemplar previous) {
334+
return null;
335+
}
336+
337+
@Override
338+
public Exemplar sample(double increment, Exemplar previous) {
339+
return null;
340+
}
341+
};
342+
}
343+
344+
}
345+
316346
}

0 commit comments

Comments
 (0)