Commit 9cb64de5 authored by Brian Clozel's avatar Brian Clozel

Merge pull request #11319 from @alex859

* pr/11319:
  Apply configurers on MeterRegistry before injection
parents 04068ee7 e1def637
...@@ -79,8 +79,11 @@ public class MetricsAutoConfiguration { ...@@ -79,8 +79,11 @@ public class MetricsAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean(MeterRegistry.class) @ConditionalOnMissingBean(MeterRegistry.class)
public CompositeMeterRegistry compositeMeterRegistry( public CompositeMeterRegistry compositeMeterRegistry(
ObjectProvider<Collection<MetricsExporter>> exporters) { ObjectProvider<Collection<MetricsExporter>> exporters,
ObjectProvider<Collection<MeterRegistryConfigurer>> configurers) {
CompositeMeterRegistry composite = new CompositeMeterRegistry(); CompositeMeterRegistry composite = new CompositeMeterRegistry();
configurers.getIfAvailable(Collections::emptyList)
.forEach((configurer) -> configurer.configureRegistry(composite));
exporters.getIfAvailable(Collections::emptyList).stream() exporters.getIfAvailable(Collections::emptyList).stream()
.map(MetricsExporter::registry).forEach(composite::add); .map(MetricsExporter::registry).forEach(composite::add);
return composite; return composite;
...@@ -119,11 +122,8 @@ public class MetricsAutoConfiguration { ...@@ -119,11 +122,8 @@ public class MetricsAutoConfiguration {
static class MeterRegistryConfigurationSupport { static class MeterRegistryConfigurationSupport {
MeterRegistryConfigurationSupport(MeterRegistry registry, MeterRegistryConfigurationSupport(MeterRegistry registry,
ObjectProvider<Collection<MeterRegistryConfigurer>> configurers,
MetricsProperties config, MetricsProperties config,
ObjectProvider<Collection<MeterBinder>> binders) { ObjectProvider<Collection<MeterBinder>> binders) {
configurers.getIfAvailable(Collections::emptyList)
.forEach((configurer) -> configurer.configureRegistry(registry));
binders.getIfAvailable(Collections::emptyList) binders.getIfAvailable(Collections::emptyList)
.forEach((binder) -> binder.bindTo(registry)); .forEach((binder) -> binder.bindTo(registry));
if (config.isUseGlobalRegistry()) { if (config.isUseGlobalRegistry()) {
......
...@@ -46,6 +46,18 @@ public class MeterRegistryConfigurerTests { ...@@ -46,6 +46,18 @@ public class MeterRegistryConfigurerTests {
.isPresent()); .isPresent());
} }
@Test
public void commonTagsAreAppliedBeforeRegistryIsInjectableElsewhere() {
new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class))
.withConfiguration(
UserConfigurations.of(MeterRegistryConfigurerConfiguration.class))
.withPropertyValues("metrics.use-global-registry=false")
.run((context) -> assertThat(context.getBean(MeterRegistry.class)
.find("my.thing").tags("region", "us-east-1").gauge())
.isPresent());
}
static class MeterRegistryConfigurerConfiguration { static class MeterRegistryConfigurerConfiguration {
@Bean @Bean
...@@ -53,6 +65,14 @@ public class MeterRegistryConfigurerTests { ...@@ -53,6 +65,14 @@ public class MeterRegistryConfigurerTests {
return (registry) -> registry.config().commonTags("region", "us-east-1"); return (registry) -> registry.config().commonTags("region", "us-east-1");
} }
private class MyThing {}
@Bean
public MyThing myThing(MeterRegistry registry) {
registry.gauge("my.thing", 0);
return new MyThing();
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment