package de.otto.edison.metrics.load; import com.codahale.metrics.MetricRegistry; import de.otto.edison.annotations.Beta; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Allows switching to different load detection strategies by configuring * the property <code>edison.metrics.load.strategy</code> which has to hold * a class name implementing {@link LoadDetector}. * * Customization is also possible without any help of this auto-configuration * mechanism, if you expose a bean implementing {@link LoadDetector} on your own. * * @author Niko Schmuck * @since 03.03.2015 */ @Beta @Configuration @ConditionalOnMissingBean(LoadDetector.class) @ConditionalOnProperty(prefix = "edison.metrics.load", name = "enabled", havingValue = "true") @EnableConfigurationProperties(MetricsLoadProperties.class) public class MetricsLoadAutoConfiguration { @Autowired private MetricRegistry metricRegistry; @Autowired private MetricsLoadProperties properties; @Bean public LoadDetector loadDetector() { LoadDetector detector; if (properties.getStrategy() != null) { detector = BeanUtils.instantiate(properties.getStrategy()); detector.initialize(metricRegistry, properties); } else { detector = new EverythingFineStrategy(); } return detector; } }