Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,14 @@ public final class ObservationAutoConfiguration {

@Bean
static ObservationRegistryPostProcessor observationRegistryPostProcessor(
ObjectProvider<ObservationProperties> properties,
ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers,
ObjectProvider<ObservationPredicate> observationPredicates,
ObjectProvider<GlobalObservationConvention<?>> observationConventions,
ObjectProvider<ObservationHandler<?>> observationHandlers,
ObjectProvider<ObservationHandlerGroup> observationHandlerGroups,
ObjectProvider<ObservationFilter> observationFilters) {
return new ObservationRegistryPostProcessor(observationRegistryCustomizers, observationPredicates,
return new ObservationRegistryPostProcessor(properties, observationRegistryCustomizers, observationPredicates,
observationConventions, observationHandlers, observationHandlerGroups, observationFilters);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@
@ConfigurationProperties("management.observations")
public class ObservationProperties {

/**
* Whether auto-configured ObservationRegistry implementations should be bound to the global
* static registry on Observations. For testing, set this to 'false' to maximize test
* independence.
*/
private boolean useGlobalRegistry = true;

private final Http http = new Http();

/**
Expand All @@ -47,6 +54,14 @@ public class ObservationProperties {

private final LongTaskTimer longTaskTimer = new LongTaskTimer();

public boolean isUseGlobalRegistry() {
return this.useGlobalRegistry;
}

public void setUseGlobalRegistry(boolean useGlobalRegistry) {
this.useGlobalRegistry = useGlobalRegistry;
}

public Map<String, Boolean> getEnable() {
return this.enable;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import io.micrometer.observation.ObservationHandler;
import io.micrometer.observation.ObservationPredicate;
import io.micrometer.observation.ObservationRegistry;
import io.micrometer.observation.Observations;
import org.jspecify.annotations.Nullable;

import org.springframework.beans.BeansException;
Expand All @@ -36,6 +37,8 @@
*/
class ObservationRegistryPostProcessor implements BeanPostProcessor {

private final ObjectProvider<ObservationProperties> properties;

private final ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers;

private final ObjectProvider<ObservationPredicate> observationPredicates;
Expand All @@ -50,12 +53,14 @@ class ObservationRegistryPostProcessor implements BeanPostProcessor {

private volatile @Nullable ObservationRegistryConfigurer configurer;

ObservationRegistryPostProcessor(ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers,
ObservationRegistryPostProcessor(ObjectProvider<ObservationProperties> properties,
ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers,
ObjectProvider<ObservationPredicate> observationPredicates,
ObjectProvider<GlobalObservationConvention<?>> observationConventions,
ObjectProvider<ObservationHandler<?>> observationHandlers,
ObjectProvider<ObservationHandlerGroup> observationHandlerGroups,
ObjectProvider<ObservationFilter> observationFilters) {
this.properties = properties;
this.observationRegistryCustomizers = observationRegistryCustomizers;
this.observationPredicates = observationPredicates;
this.observationConventions = observationConventions;
Expand All @@ -67,11 +72,16 @@ class ObservationRegistryPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof ObservationRegistry registry) {
getConfigurer().configure(registry);
postProcessObservationRegistry(registry);
}
return bean;
}

private void postProcessObservationRegistry(ObservationRegistry registry) {
getConfigurer().configure(registry);
setGlobalRegistryIfNecessary(registry);
}

private ObservationRegistryConfigurer getConfigurer() {
ObservationRegistryConfigurer configurer = this.configurer;
if (configurer == null) {
Expand All @@ -83,4 +93,13 @@ private ObservationRegistryConfigurer getConfigurer() {
return configurer;
}

private void setGlobalRegistryIfNecessary(ObservationRegistry registry) {
if (this.properties.getObject().isUseGlobalRegistry() && !isGlobalRegistry(registry)) {
Observations.setRegistry(registry);
}
}

private boolean isGlobalRegistry(ObservationRegistry registry) {
return registry == Observations.getGlobalRegistry();
}
}