diff --git a/spring-boot-actuator/pom.xml b/spring-boot-actuator/pom.xml index fd1b429244..bcb23ce313 100644 --- a/spring-boot-actuator/pom.xml +++ b/spring-boot-actuator/pom.xml @@ -358,6 +358,11 @@ spring-data-rest-webmvc test + + org.springframework.integration + spring-integration-jmx + test + org.springframework.security spring-security-test @@ -368,10 +373,5 @@ snakeyaml test - - org.springframework.integration - spring-integration-jmx - test - diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfiguration.java index 387103fa14..27526cc4ad 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfiguration.java @@ -148,9 +148,7 @@ public class PublicMetricsAutoConfiguration { static class IntegrationMetricsConfiguration { @Bean(name = IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME) - @ConditionalOnMissingBean(value = IntegrationManagementConfigurer.class, - name = IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME, - search = SearchStrategy.CURRENT) + @ConditionalOnMissingBean(value = IntegrationManagementConfigurer.class, name = IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME, search = SearchStrategy.CURRENT) public IntegrationManagementConfigurer managementConfigurer() { IntegrationManagementConfigurer configurer = new IntegrationManagementConfigurer(); configurer.setDefaultCountsEnabled(true); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReader.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReader.java index aa1ca45f07..9ce8776730 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReader.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReader.java @@ -41,10 +41,10 @@ import org.springframework.lang.UsesJava7; @UsesJava7 public class SpringIntegrationMetricReader implements MetricReader { - private final IntegrationManagementConfigurer managementConfigurer; + private final IntegrationManagementConfigurer configurer; - public SpringIntegrationMetricReader(IntegrationManagementConfigurer managementConfigurer) { - this.managementConfigurer = managementConfigurer; + public SpringIntegrationMetricReader(IntegrationManagementConfigurer configurer) { + this.configurer = configurer; } @Override @@ -54,60 +54,79 @@ public class SpringIntegrationMetricReader implements MetricReader { @Override public Iterable> findAll() { - List> metrics = new ArrayList>(); - - for (String name : this.managementConfigurer.getChannelNames()) { - MessageChannelMetrics channelMetrics = this.managementConfigurer.getChannelMetrics(name); - String prefix = "integration.channel." + name; - metrics.addAll(getStatistics(prefix + ".errorRate", channelMetrics.getErrorRate())); - metrics.add(new Metric(prefix + ".sendCount", channelMetrics.getSendCountLong())); - metrics.addAll(getStatistics(prefix + ".sendRate", channelMetrics.getSendRate())); - if (channelMetrics instanceof PollableChannelManagement) { - metrics.add(new Metric(prefix + ".receiveCount", - ((PollableChannelManagement) channelMetrics).getReceiveCountLong())); - } - } - - for (String name : this.managementConfigurer.getHandlerNames()) { - MessageHandlerMetrics handlerMetrics = this.managementConfigurer.getHandlerMetrics(name); - String prefix = "integration.handler." + name; - metrics.addAll(getStatistics(prefix + ".duration", handlerMetrics.getDuration())); - metrics.add(new Metric(prefix + ".activeCount", handlerMetrics.getActiveCountLong())); - } - - for (String name : this.managementConfigurer.getSourceNames()) { - MessageSourceMetrics sourceMetrics = this.managementConfigurer.getSourceMetrics(name); - String prefix = "integration.source." + name; - metrics.add(new Metric(prefix + ".messageCount", sourceMetrics.getMessageCountLong())); - } - - metrics.add(new Metric("integration.handlerCount", - this.managementConfigurer.getHandlerNames().length)); - metrics.add(new Metric("integration.channelCount", - this.managementConfigurer.getChannelNames().length)); - metrics.add(new Metric("integration.sourceCount", - this.managementConfigurer.getSourceNames().length)); - - return metrics; + List> result = new ArrayList>(); + String[] channelNames = this.configurer.getChannelNames(); + String[] handlerNames = this.configurer.getHandlerNames(); + String[] sourceNames = this.configurer.getSourceNames(); + addChannelMetrics(result, channelNames); + addHandlerMetrics(result, handlerNames); + addSourceMetrics(result, sourceNames); + result.add(new Metric("integration.handlerCount", handlerNames.length)); + result.add(new Metric("integration.channelCount", channelNames.length)); + result.add(new Metric("integration.sourceCount", sourceNames.length)); + return result; } - private Collection> getStatistics(String name, - Statistics statistic) { + private void addChannelMetrics(List> result, String[] names) { + for (String name : names) { + addChannelMetrics(result, name, this.configurer.getChannelMetrics(name)); + } + } + + private void addChannelMetrics(List> result, String name, + MessageChannelMetrics metrics) { + String prefix = "integration.channel." + name; + result.addAll(getStatistics(prefix + ".errorRate", metrics.getErrorRate())); + result.add(new Metric(prefix + ".sendCount", metrics.getSendCountLong())); + result.addAll(getStatistics(prefix + ".sendRate", metrics.getSendRate())); + if (metrics instanceof PollableChannelManagement) { + result.add(new Metric(prefix + ".receiveCount", + ((PollableChannelManagement) metrics).getReceiveCountLong())); + } + } + + private void addHandlerMetrics(List> result, String[] names) { + for (String name : names) { + addHandlerMetrics(result, name, this.configurer.getHandlerMetrics(name)); + } + } + + private void addHandlerMetrics(List> result, String name, + MessageHandlerMetrics metrics) { + String prefix = "integration.handler." + name; + result.addAll(getStatistics(prefix + ".duration", metrics.getDuration())); + long activeCount = metrics.getActiveCountLong(); + result.add(new Metric(prefix + ".activeCount", activeCount)); + } + + private void addSourceMetrics(List> result, String[] names) { + for (String name : names) { + addSourceMetrics(result, name, this.configurer.getSourceMetrics(name)); + } + } + + private void addSourceMetrics(List> result, String name, + MessageSourceMetrics sourceMetrics) { + String prefix = "integration.source." + name; + result.add(new Metric(prefix + ".messageCount", + sourceMetrics.getMessageCountLong())); + } + + private Collection> getStatistics(String name, Statistics stats) { List> metrics = new ArrayList>(); - metrics.add(new Metric(name + ".mean", statistic.getMean())); - metrics.add(new Metric(name + ".max", statistic.getMax())); - metrics.add(new Metric(name + ".min", statistic.getMin())); - metrics.add( - new Metric(name + ".stdev", statistic.getStandardDeviation())); - metrics.add(new Metric(name + ".count", statistic.getCountLong())); + metrics.add(new Metric(name + ".mean", stats.getMean())); + metrics.add(new Metric(name + ".max", stats.getMax())); + metrics.add(new Metric(name + ".min", stats.getMin())); + metrics.add(new Metric(name + ".stdev", stats.getStandardDeviation())); + metrics.add(new Metric(name + ".count", stats.getCountLong())); return metrics; } @Override public long count() { - int totalChannelCount = this.managementConfigurer.getChannelNames().length; - int totalHandlerCount = this.managementConfigurer.getHandlerNames().length; - int totalSourceCount = this.managementConfigurer.getSourceNames().length; + int totalChannelCount = this.configurer.getChannelNames().length; + int totalHandlerCount = this.configurer.getHandlerNames().length; + int totalSourceCount = this.configurer.getSourceNames().length; return totalChannelCount + totalHandlerCount + totalSourceCount; } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java index 3027b7759f..27c2f4dd14 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java @@ -92,7 +92,7 @@ public class PublicMetricsAutoConfigurationTests { public void metricReaderPublicMetrics() throws Exception { load(); assertThat(this.context.getBeansOfType(MetricReaderPublicMetrics.class)) - .hasSize(1); + .hasSize(2); } @Test diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java index 69aa6ad3fa..18efb7f359 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java @@ -16,7 +16,6 @@ package org.springframework.boot.actuate.metrics.integration; - import org.junit.Test; import org.junit.runner.RunWith; @@ -53,7 +52,7 @@ public class SpringIntegrationMetricReaderNoJmxTests { } @Configuration - @Import({IntegrationAutoConfiguration.class, PublicMetricsAutoConfiguration.class}) + @Import({ IntegrationAutoConfiguration.class, PublicMetricsAutoConfiguration.class }) protected static class TestConfiguration { } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java index 8353e77061..f8a01b0903 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java @@ -56,7 +56,8 @@ public class SpringIntegrationMetricReaderTests { protected static class TestConfiguration { @Bean - public SpringIntegrationMetricReader reader(IntegrationManagementConfigurer managementConfigurer) { + public SpringIntegrationMetricReader reader( + IntegrationManagementConfigurer managementConfigurer) { return new SpringIntegrationMetricReader(managementConfigurer); } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java index 7900d7144f..e5e61e58d7 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java @@ -98,10 +98,9 @@ public class IntegrationAutoConfiguration { } @Configuration - @ConditionalOnClass({EnableIntegrationManagement.class, EnableIntegrationMBeanExport.class}) - @ConditionalOnMissingBean(value = IntegrationManagementConfigurer.class, - name = IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME, - search = SearchStrategy.CURRENT) + @ConditionalOnClass({ EnableIntegrationManagement.class, + EnableIntegrationMBeanExport.class }) + @ConditionalOnMissingBean(value = IntegrationManagementConfigurer.class, name = IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME, search = SearchStrategy.CURRENT) @ConditionalOnProperty(prefix = "spring.jmx", name = "enabled", havingValue = "true", matchIfMissing = true) protected static class IntegrationManagementConfiguration { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java index 027fff7c40..c42df154ae 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java @@ -87,14 +87,17 @@ public class IntegrationAutoConfigurationTests { MBeanServer mBeanServer = this.context.getBean(MBeanServer.class); assertDomains(mBeanServer, true, "org.springframework.integration", "org.springframework.integration.monitor"); - assertThat(this.context.getBean(IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME)).isNotNull(); + Object bean = this.context + .getBean(IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME); + assertThat(bean).isNotNull(); } @Test public void disableJmxIntegration() { load("spring.jmx.enabled=false"); assertThat(this.context.getBeansOfType(MBeanServer.class)).hasSize(0); - assertThat(this.context.getBeansOfType(IntegrationManagementConfigurer.class)).isEmpty(); + assertThat(this.context.getBeansOfType(IntegrationManagementConfigurer.class)) + .isEmpty(); } @Test