parent
8cac63e239
commit
d8c5c3262a
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2012-2014 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.actuate.autoconfigure;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics;
|
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link EnableAutoConfiguration Auto-configuration} that provides metrics on dataSource
|
|
||||||
* usage.
|
|
||||||
*
|
|
||||||
* @author Stephane Nicoll
|
|
||||||
* @since 1.2.0
|
|
||||||
*/
|
|
||||||
@ConditionalOnBean(DataSource.class)
|
|
||||||
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
|
|
||||||
public class DataSourceMetricsAutoConfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnBean(DataSourcePoolMetadataProvider.class)
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
public DataSourcePublicMetrics dataSourcePublicMetrics() {
|
|
||||||
return new DataSourcePublicMetrics();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -18,6 +18,7 @@ package org.springframework.boot.actuate.autoconfigure;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -34,18 +35,14 @@ import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint;
|
import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.HealthEndpoint;
|
import org.springframework.boot.actuate.endpoint.HealthEndpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.InfoEndpoint;
|
import org.springframework.boot.actuate.endpoint.InfoEndpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
|
|
||||||
import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
|
import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.PublicMetrics;
|
import org.springframework.boot.actuate.endpoint.PublicMetrics;
|
||||||
import org.springframework.boot.actuate.endpoint.RequestMappingEndpoint;
|
import org.springframework.boot.actuate.endpoint.RequestMappingEndpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.ShutdownEndpoint;
|
import org.springframework.boot.actuate.endpoint.ShutdownEndpoint;
|
||||||
import org.springframework.boot.actuate.endpoint.SystemPublicMetrics;
|
|
||||||
import org.springframework.boot.actuate.endpoint.TraceEndpoint;
|
import org.springframework.boot.actuate.endpoint.TraceEndpoint;
|
||||||
import org.springframework.boot.actuate.health.HealthAggregator;
|
import org.springframework.boot.actuate.health.HealthAggregator;
|
||||||
import org.springframework.boot.actuate.health.HealthIndicator;
|
import org.springframework.boot.actuate.health.HealthIndicator;
|
||||||
import org.springframework.boot.actuate.health.OrderedHealthAggregator;
|
import org.springframework.boot.actuate.health.OrderedHealthAggregator;
|
||||||
import org.springframework.boot.actuate.metrics.reader.MetricReader;
|
|
||||||
import org.springframework.boot.actuate.metrics.repository.InMemoryMetricRepository;
|
|
||||||
import org.springframework.boot.actuate.trace.InMemoryTraceRepository;
|
import org.springframework.boot.actuate.trace.InMemoryTraceRepository;
|
||||||
import org.springframework.boot.actuate.trace.TraceRepository;
|
import org.springframework.boot.actuate.trace.TraceRepository;
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
|
|
@ -58,6 +55,7 @@ import org.springframework.boot.bind.PropertiesConfigurationFactory;
|
||||||
import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetaData;
|
import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetaData;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
||||||
import org.springframework.core.env.ConfigurableEnvironment;
|
import org.springframework.core.env.ConfigurableEnvironment;
|
||||||
import org.springframework.core.env.StandardEnvironment;
|
import org.springframework.core.env.StandardEnvironment;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
|
|
@ -86,9 +84,6 @@ public class EndpointAutoConfiguration {
|
||||||
@Autowired(required = false)
|
@Autowired(required = false)
|
||||||
Map<String, HealthIndicator> healthIndicators = new HashMap<String, HealthIndicator>();
|
Map<String, HealthIndicator> healthIndicators = new HashMap<String, HealthIndicator>();
|
||||||
|
|
||||||
@Autowired(required = false)
|
|
||||||
private MetricReader metricReader = new InMemoryMetricRepository();
|
|
||||||
|
|
||||||
@Autowired(required = false)
|
@Autowired(required = false)
|
||||||
private Collection<PublicMetrics> publicMetrics;
|
private Collection<PublicMetrics> publicMetrics;
|
||||||
|
|
||||||
|
|
@ -132,11 +127,10 @@ public class EndpointAutoConfiguration {
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
public MetricsEndpoint metricsEndpoint() {
|
public MetricsEndpoint metricsEndpoint() {
|
||||||
List<PublicMetrics> publicMetrics = new ArrayList<PublicMetrics>();
|
List<PublicMetrics> publicMetrics = new ArrayList<PublicMetrics>();
|
||||||
publicMetrics.add(new SystemPublicMetrics());
|
|
||||||
publicMetrics.add(new MetricReaderPublicMetrics(this.metricReader));
|
|
||||||
if (this.publicMetrics != null) {
|
if (this.publicMetrics != null) {
|
||||||
publicMetrics.addAll(this.publicMetrics);
|
publicMetrics.addAll(this.publicMetrics);
|
||||||
}
|
}
|
||||||
|
Collections.sort(publicMetrics, AnnotationAwareOrderComparator.INSTANCE);
|
||||||
return new MetricsEndpoint(publicMetrics);
|
return new MetricsEndpoint(publicMetrics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,12 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
|
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
|
||||||
import org.springframework.boot.actuate.endpoint.PublicMetrics;
|
import org.springframework.boot.actuate.endpoint.PublicMetrics;
|
||||||
import org.springframework.boot.actuate.endpoint.RichGaugeReaderPublicMetrics;
|
|
||||||
import org.springframework.boot.actuate.metrics.CounterService;
|
import org.springframework.boot.actuate.metrics.CounterService;
|
||||||
import org.springframework.boot.actuate.metrics.GaugeService;
|
import org.springframework.boot.actuate.metrics.GaugeService;
|
||||||
import org.springframework.boot.actuate.metrics.export.Exporter;
|
import org.springframework.boot.actuate.metrics.export.Exporter;
|
||||||
import org.springframework.boot.actuate.metrics.reader.MetricRegistryMetricReader;
|
import org.springframework.boot.actuate.metrics.reader.MetricRegistryMetricReader;
|
||||||
import org.springframework.boot.actuate.metrics.repository.InMemoryMetricRepository;
|
import org.springframework.boot.actuate.metrics.repository.InMemoryMetricRepository;
|
||||||
import org.springframework.boot.actuate.metrics.repository.MetricRepository;
|
import org.springframework.boot.actuate.metrics.repository.MetricRepository;
|
||||||
import org.springframework.boot.actuate.metrics.rich.RichGaugeReader;
|
|
||||||
import org.springframework.boot.actuate.metrics.writer.CodahaleMetricWriter;
|
import org.springframework.boot.actuate.metrics.writer.CodahaleMetricWriter;
|
||||||
import org.springframework.boot.actuate.metrics.writer.CompositeMetricWriter;
|
import org.springframework.boot.actuate.metrics.writer.CompositeMetricWriter;
|
||||||
import org.springframework.boot.actuate.metrics.writer.DefaultCounterService;
|
import org.springframework.boot.actuate.metrics.writer.DefaultCounterService;
|
||||||
|
|
@ -39,7 +37,6 @@ import org.springframework.boot.actuate.metrics.writer.MessageChannelMetricWrite
|
||||||
import org.springframework.boot.actuate.metrics.writer.MetricWriter;
|
import org.springframework.boot.actuate.metrics.writer.MetricWriter;
|
||||||
import org.springframework.boot.actuate.metrics.writer.MetricWriterMessageHandler;
|
import org.springframework.boot.actuate.metrics.writer.MetricWriterMessageHandler;
|
||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
|
||||||
|
|
@ -124,12 +121,6 @@ public class MetricRepositoryAutoConfiguration {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnBean(RichGaugeReader.class)
|
|
||||||
public PublicMetrics richGaugePublicMetrics(RichGaugeReader richGaugeReader) {
|
|
||||||
return new RichGaugeReaderPublicMetrics(richGaugeReader);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnClass(MessageChannel.class)
|
@ConditionalOnClass(MessageChannel.class)
|
||||||
static class MetricsChannelConfiguration {
|
static class MetricsChannelConfiguration {
|
||||||
|
|
@ -189,7 +180,8 @@ public class MetricRepositoryAutoConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public PublicMetrics codahalePublicMetrics(MetricRegistry metricRegistry) {
|
public PublicMetrics codahalePublicMetrics(MetricRegistry metricRegistry) {
|
||||||
MetricRegistryMetricReader reader = new MetricRegistryMetricReader(metricRegistry);
|
MetricRegistryMetricReader reader = new MetricRegistryMetricReader(
|
||||||
|
metricRegistry);
|
||||||
return new MetricReaderPublicMetrics(reader);
|
return new MetricReaderPublicMetrics(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2014 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.boot.actuate.autoconfigure;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.endpoint.PublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.endpoint.RichGaugeReaderPublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.endpoint.SystemPublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.metrics.reader.MetricReader;
|
||||||
|
import org.springframework.boot.actuate.metrics.repository.InMemoryMetricRepository;
|
||||||
|
import org.springframework.boot.actuate.metrics.rich.RichGaugeReader;
|
||||||
|
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
|
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||||
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link EnableAutoConfiguration Auto-configuration} for {@link PublicMetrics}.
|
||||||
|
*
|
||||||
|
* @author Stephane Nicoll
|
||||||
|
* @author Phillip Webb
|
||||||
|
* @since 1.2.0
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@AutoConfigureAfter({ DataSourceAutoConfiguration.class,
|
||||||
|
MetricRepositoryAutoConfiguration.class })
|
||||||
|
@AutoConfigureBefore(EndpointAutoConfiguration.class)
|
||||||
|
public class PublicMetricsAutoConfiguration {
|
||||||
|
|
||||||
|
@Autowired(required = false)
|
||||||
|
private MetricReader metricReader = new InMemoryMetricRepository();
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SystemPublicMetrics systemPublicMetrics() {
|
||||||
|
return new SystemPublicMetrics();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MetricReaderPublicMetrics metricReaderPublicMetrics() {
|
||||||
|
return new MetricReaderPublicMetrics(this.metricReader);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnBean(RichGaugeReader.class)
|
||||||
|
public RichGaugeReaderPublicMetrics richGaugePublicMetrics(
|
||||||
|
RichGaugeReader richGaugeReader) {
|
||||||
|
return new RichGaugeReaderPublicMetrics(richGaugeReader);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@ConditionalOnClass(DataSource.class)
|
||||||
|
@ConditionalOnBean(DataSource.class)
|
||||||
|
static class DataSourceMetricsConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean
|
||||||
|
@ConditionalOnBean(DataSourcePoolMetadataProvider.class)
|
||||||
|
public DataSourcePublicMetrics dataSourcePublicMetrics() {
|
||||||
|
return new DataSourcePublicMetrics();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -121,4 +121,5 @@ public class DataSourcePublicMetrics implements PublicMetrics {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.DataSourceMetricsAutoConfiguration,\
|
|
||||||
org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.EndpointMBeanExportAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.EndpointMBeanExportAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration,\
|
||||||
|
|
@ -11,5 +10,6 @@ org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfigurati
|
||||||
org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration,\
|
||||||
|
org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\
|
org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\
|
||||||
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
|
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ public class EndpointAutoConfigurationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void metricEndpointsHasSystemMetricsByDefault() {
|
public void metricEndpointsHasSystemMetricsByDefault() {
|
||||||
load(EndpointAutoConfiguration.class);
|
load(PublicMetricsAutoConfiguration.class, EndpointAutoConfiguration.class);
|
||||||
MetricsEndpoint endpoint = this.context.getBean(MetricsEndpoint.class);
|
MetricsEndpoint endpoint = this.context.getBean(MetricsEndpoint.class);
|
||||||
Map<String, Object> metrics = endpoint.invoke();
|
Map<String, Object> metrics = endpoint.invoke();
|
||||||
assertTrue(metrics.containsKey("mem"));
|
assertTrue(metrics.containsKey("mem"));
|
||||||
|
|
@ -112,7 +112,8 @@ public class EndpointAutoConfigurationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void metricEndpointCustomPublicMetrics() {
|
public void metricEndpointCustomPublicMetrics() {
|
||||||
load(CustomPublicMetricsConfig.class, EndpointAutoConfiguration.class);
|
load(CustomPublicMetricsConfig.class, PublicMetricsAutoConfiguration.class,
|
||||||
|
EndpointAutoConfiguration.class);
|
||||||
MetricsEndpoint endpoint = this.context.getBean(MetricsEndpoint.class);
|
MetricsEndpoint endpoint = this.context.getBean(MetricsEndpoint.class);
|
||||||
Map<String, Object> metrics = endpoint.invoke();
|
Map<String, Object> metrics = endpoint.invoke();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,18 +16,13 @@
|
||||||
|
|
||||||
package org.springframework.boot.actuate.autoconfigure;
|
package org.springframework.boot.actuate.autoconfigure;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.boot.actuate.endpoint.RichGaugeReaderPublicMetrics;
|
|
||||||
import org.springframework.boot.actuate.metrics.CounterService;
|
import org.springframework.boot.actuate.metrics.CounterService;
|
||||||
import org.springframework.boot.actuate.metrics.GaugeService;
|
import org.springframework.boot.actuate.metrics.GaugeService;
|
||||||
import org.springframework.boot.actuate.metrics.Metric;
|
import org.springframework.boot.actuate.metrics.Metric;
|
||||||
import org.springframework.boot.actuate.metrics.reader.MetricReader;
|
import org.springframework.boot.actuate.metrics.reader.MetricReader;
|
||||||
import org.springframework.boot.actuate.metrics.rich.RichGauge;
|
|
||||||
import org.springframework.boot.actuate.metrics.rich.RichGaugeReader;
|
|
||||||
import org.springframework.boot.actuate.metrics.writer.DefaultCounterService;
|
import org.springframework.boot.actuate.metrics.writer.DefaultCounterService;
|
||||||
import org.springframework.boot.actuate.metrics.writer.DefaultGaugeService;
|
import org.springframework.boot.actuate.metrics.writer.DefaultGaugeService;
|
||||||
import org.springframework.boot.actuate.metrics.writer.MetricWriter;
|
import org.springframework.boot.actuate.metrics.writer.MetricWriter;
|
||||||
|
|
@ -46,8 +41,6 @@ import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
import static org.mockito.BDDMockito.given;
|
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
@ -122,44 +115,6 @@ public class MetricRepositoryAutoConfigurationTests {
|
||||||
context.close();
|
context.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void richGaugePublicMetrics() {
|
|
||||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
|
|
||||||
RichGaugeReaderConfig.class, MetricRepositoryAutoConfiguration.class);
|
|
||||||
|
|
||||||
RichGaugeReader richGaugeReader = context.getBean(RichGaugeReader.class);
|
|
||||||
assertNotNull(richGaugeReader);
|
|
||||||
given(richGaugeReader.findAll()).willReturn(
|
|
||||||
Collections.singletonList(new RichGauge("bar", 3.7d)));
|
|
||||||
|
|
||||||
RichGaugeReaderPublicMetrics publicMetrics = context
|
|
||||||
.getBean(RichGaugeReaderPublicMetrics.class);
|
|
||||||
assertNotNull(publicMetrics);
|
|
||||||
|
|
||||||
Collection<Metric<?>> metrics = publicMetrics.metrics();
|
|
||||||
assertNotNull(metrics);
|
|
||||||
assertEquals(metrics.size(), 6);
|
|
||||||
|
|
||||||
assertHasMetric(metrics, new Metric<Double>("bar.val", 3.7d));
|
|
||||||
assertHasMetric(metrics, new Metric<Double>("bar.avg", 3.7d));
|
|
||||||
assertHasMetric(metrics, new Metric<Double>("bar.min", 3.7d));
|
|
||||||
assertHasMetric(metrics, new Metric<Double>("bar.max", 3.7d));
|
|
||||||
assertHasMetric(metrics, new Metric<Double>("bar.alpha", -1.d));
|
|
||||||
assertHasMetric(metrics, new Metric<Long>("bar.count", 1L));
|
|
||||||
|
|
||||||
context.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void assertHasMetric(Collection<Metric<?>> metrics, Metric<?> metric) {
|
|
||||||
for (Metric<?> m : metrics) {
|
|
||||||
if (m.getValue().equals(metric.getValue())
|
|
||||||
&& m.getName().equals(metric.getName())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fail("Metric " + metric.toString() + " not found in " + metrics.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public static class SyncTaskExecutorConfiguration {
|
public static class SyncTaskExecutorConfiguration {
|
||||||
|
|
||||||
|
|
@ -195,11 +150,4 @@ public class MetricRepositoryAutoConfigurationTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Configuration
|
|
||||||
static class RichGaugeReaderConfig {
|
|
||||||
@Bean
|
|
||||||
public RichGaugeReader richGaugeReader() {
|
|
||||||
return mock(RichGaugeReader.class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -28,8 +29,13 @@ import org.apache.commons.dbcp.BasicDataSource;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics;
|
import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
|
||||||
import org.springframework.boot.actuate.endpoint.PublicMetrics;
|
import org.springframework.boot.actuate.endpoint.PublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.endpoint.RichGaugeReaderPublicMetrics;
|
||||||
|
import org.springframework.boot.actuate.endpoint.SystemPublicMetrics;
|
||||||
import org.springframework.boot.actuate.metrics.Metric;
|
import org.springframework.boot.actuate.metrics.Metric;
|
||||||
|
import org.springframework.boot.actuate.metrics.rich.RichGauge;
|
||||||
|
import org.springframework.boot.actuate.metrics.rich.RichGaugeReader;
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
|
||||||
import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration;
|
import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration;
|
||||||
|
|
@ -44,14 +50,20 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
import static org.mockito.BDDMockito.given;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link DataSourceMetricsAutoConfiguration}.
|
* Tests for {@link PublicMetricsAutoConfiguration}.
|
||||||
*
|
*
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
|
* @author Dave Syer
|
||||||
|
* @author Phillip Webb
|
||||||
*/
|
*/
|
||||||
public class DataSourceMetricsAutoConfigurationTests {
|
public class PublicMetricsAutoConfigurationTests {
|
||||||
|
|
||||||
private AnnotationConfigApplicationContext context;
|
private AnnotationConfigApplicationContext context;
|
||||||
|
|
||||||
|
|
@ -62,16 +74,58 @@ public class DataSourceMetricsAutoConfigurationTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void systemPublicMetrics() throws Exception {
|
||||||
|
load();
|
||||||
|
assertEquals(1, this.context.getBeansOfType(SystemPublicMetrics.class).size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void metricReaderPublicMetrics() throws Exception {
|
||||||
|
load();
|
||||||
|
assertEquals(1, this.context.getBeansOfType(MetricReaderPublicMetrics.class)
|
||||||
|
.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void richGaugePublicMetrics() {
|
||||||
|
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
|
||||||
|
RichGaugeReaderConfig.class, MetricRepositoryAutoConfiguration.class,
|
||||||
|
PublicMetricsAutoConfiguration.class);
|
||||||
|
|
||||||
|
RichGaugeReader richGaugeReader = context.getBean(RichGaugeReader.class);
|
||||||
|
assertNotNull(richGaugeReader);
|
||||||
|
given(richGaugeReader.findAll()).willReturn(
|
||||||
|
Collections.singletonList(new RichGauge("bar", 3.7d)));
|
||||||
|
|
||||||
|
RichGaugeReaderPublicMetrics publicMetrics = context
|
||||||
|
.getBean(RichGaugeReaderPublicMetrics.class);
|
||||||
|
assertNotNull(publicMetrics);
|
||||||
|
|
||||||
|
Collection<Metric<?>> metrics = publicMetrics.metrics();
|
||||||
|
assertNotNull(metrics);
|
||||||
|
assertEquals(metrics.size(), 6);
|
||||||
|
|
||||||
|
assertHasMetric(metrics, new Metric<Double>("bar.val", 3.7d));
|
||||||
|
assertHasMetric(metrics, new Metric<Double>("bar.avg", 3.7d));
|
||||||
|
assertHasMetric(metrics, new Metric<Double>("bar.min", 3.7d));
|
||||||
|
assertHasMetric(metrics, new Metric<Double>("bar.max", 3.7d));
|
||||||
|
assertHasMetric(metrics, new Metric<Double>("bar.alpha", -1.d));
|
||||||
|
assertHasMetric(metrics, new Metric<Long>("bar.count", 1L));
|
||||||
|
|
||||||
|
context.close();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void noDataSource() {
|
public void noDataSource() {
|
||||||
load();
|
load();
|
||||||
assertEquals(0, this.context.getBeansOfType(PublicMetrics.class).size());
|
assertEquals(0, this.context.getBeansOfType(DataSourcePublicMetrics.class).size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void autoDataSource() {
|
public void autoDataSource() {
|
||||||
load(DataSourceAutoConfiguration.class);
|
load(DataSourceAutoConfiguration.class);
|
||||||
PublicMetrics bean = this.context.getBean(PublicMetrics.class);
|
PublicMetrics bean = this.context.getBean(DataSourcePublicMetrics.class);
|
||||||
Collection<Metric<?>> metrics = bean.metrics();
|
Collection<Metric<?>> metrics = bean.metrics();
|
||||||
assertMetrics(metrics, "datasource.primary.active", "datasource.primary.usage");
|
assertMetrics(metrics, "datasource.primary.active", "datasource.primary.usage");
|
||||||
}
|
}
|
||||||
|
|
@ -79,7 +133,7 @@ public class DataSourceMetricsAutoConfigurationTests {
|
||||||
@Test
|
@Test
|
||||||
public void multipleDataSources() {
|
public void multipleDataSources() {
|
||||||
load(MultipleDataSourcesConfig.class);
|
load(MultipleDataSourcesConfig.class);
|
||||||
PublicMetrics bean = this.context.getBean(PublicMetrics.class);
|
PublicMetrics bean = this.context.getBean(DataSourcePublicMetrics.class);
|
||||||
Collection<Metric<?>> metrics = bean.metrics();
|
Collection<Metric<?>> metrics = bean.metrics();
|
||||||
assertMetrics(metrics, "datasource.tomcat.active", "datasource.tomcat.usage",
|
assertMetrics(metrics, "datasource.tomcat.active", "datasource.tomcat.usage",
|
||||||
"datasource.commonsDbcp.active", "datasource.commonsDbcp.usage");
|
"datasource.commonsDbcp.active", "datasource.commonsDbcp.usage");
|
||||||
|
|
@ -105,7 +159,7 @@ public class DataSourceMetricsAutoConfigurationTests {
|
||||||
@Test
|
@Test
|
||||||
public void multipleDataSourcesWithPrimary() {
|
public void multipleDataSourcesWithPrimary() {
|
||||||
load(MultipleDataSourcesWithPrimaryConfig.class);
|
load(MultipleDataSourcesWithPrimaryConfig.class);
|
||||||
PublicMetrics bean = this.context.getBean(PublicMetrics.class);
|
PublicMetrics bean = this.context.getBean(DataSourcePublicMetrics.class);
|
||||||
Collection<Metric<?>> metrics = bean.metrics();
|
Collection<Metric<?>> metrics = bean.metrics();
|
||||||
assertMetrics(metrics, "datasource.primary.active", "datasource.primary.usage",
|
assertMetrics(metrics, "datasource.primary.active", "datasource.primary.usage",
|
||||||
"datasource.commonsDbcp.active", "datasource.commonsDbcp.usage");
|
"datasource.commonsDbcp.active", "datasource.commonsDbcp.usage");
|
||||||
|
|
@ -115,11 +169,20 @@ public class DataSourceMetricsAutoConfigurationTests {
|
||||||
public void customPrefix() {
|
public void customPrefix() {
|
||||||
load(MultipleDataSourcesWithPrimaryConfig.class,
|
load(MultipleDataSourcesWithPrimaryConfig.class,
|
||||||
CustomDataSourcePublicMetrics.class);
|
CustomDataSourcePublicMetrics.class);
|
||||||
PublicMetrics bean = this.context.getBean(PublicMetrics.class);
|
PublicMetrics bean = this.context.getBean(DataSourcePublicMetrics.class);
|
||||||
Collection<Metric<?>> metrics = bean.metrics();
|
Collection<Metric<?>> metrics = bean.metrics();
|
||||||
assertMetrics(metrics, "ds.first.active", "ds.first.usage", "ds.second.active",
|
assertMetrics(metrics, "ds.first.active", "ds.first.usage", "ds.second.active",
|
||||||
"ds.second.usage");
|
"ds.second.usage");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertHasMetric(Collection<Metric<?>> metrics, Metric<?> metric) {
|
||||||
|
for (Metric<?> m : metrics) {
|
||||||
|
if (m.getValue().equals(metric.getValue())
|
||||||
|
&& m.getName().equals(metric.getName())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fail("Metric " + metric.toString() + " not found in " + metrics.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertMetrics(Collection<Metric<?>> metrics, String... keys) {
|
private void assertMetrics(Collection<Metric<?>> metrics, String... keys) {
|
||||||
|
|
@ -138,7 +201,7 @@ public class DataSourceMetricsAutoConfigurationTests {
|
||||||
this.context.register(config);
|
this.context.register(config);
|
||||||
}
|
}
|
||||||
this.context.register(DataSourcePoolMetadataProvidersConfiguration.class,
|
this.context.register(DataSourcePoolMetadataProvidersConfiguration.class,
|
||||||
DataSourceMetricsAutoConfiguration.class);
|
PublicMetricsAutoConfiguration.class);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -198,4 +261,14 @@ public class DataSourceMetricsAutoConfigurationTests {
|
||||||
.url("jdbc:hsqldb:mem:test").username("sa");
|
.url("jdbc:hsqldb:mem:test").username("sa");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
static class RichGaugeReaderConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RichGaugeReader richGaugeReader() {
|
||||||
|
return mock(RichGaugeReader.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue