diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfiguration.java index 0157eba56f72..19bcb5a39afc 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfiguration.java @@ -19,7 +19,6 @@ import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; -import java.util.function.Supplier; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.jvm.ExecutorServiceMetrics; @@ -36,7 +35,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.util.StringUtils; /** * {@link EnableAutoConfiguration Auto-configuration} for metrics on all available @@ -44,6 +42,7 @@ * schedulers}. * * @author Stephane Nicoll + * @author Scott Frederick * @since 2.6.0 */ @Configuration(proxyBeanMethods = false) @@ -53,27 +52,21 @@ @ConditionalOnBean({ Executor.class, MeterRegistry.class }) public class TaskExecutorMetricsAutoConfiguration { - private static final String TASK_EXECUTOR_SUFFIX = "taskExecutor"; - - private static final String TASK_SCHEDULER_SUFFIX = "taskScheduler"; - @Autowired public void bindTaskExecutorsToRegistry(Map executors, MeterRegistry registry) { executors.forEach((beanName, executor) -> { if (executor instanceof ThreadPoolTaskExecutor) { - monitor(registry, safeGetThreadPoolExecutor((ThreadPoolTaskExecutor) executor), - () -> getTaskExecutorName(beanName)); + monitor(registry, safeGetThreadPoolExecutor((ThreadPoolTaskExecutor) executor), beanName); } else if (executor instanceof ThreadPoolTaskScheduler) { - monitor(registry, safeGetThreadPoolExecutor((ThreadPoolTaskScheduler) executor), - () -> getTaskSchedulerName(beanName)); + monitor(registry, safeGetThreadPoolExecutor((ThreadPoolTaskScheduler) executor), beanName); } }); } - private void monitor(MeterRegistry registry, ThreadPoolExecutor threadPoolExecutor, Supplier beanName) { + private void monitor(MeterRegistry registry, ThreadPoolExecutor threadPoolExecutor, String name) { if (threadPoolExecutor != null) { - ExecutorServiceMetrics.monitor(registry, threadPoolExecutor, beanName.get()); + ExecutorServiceMetrics.monitor(registry, threadPoolExecutor, name); } } @@ -95,33 +88,4 @@ private ThreadPoolExecutor safeGetThreadPoolExecutor(ThreadPoolTaskScheduler tas } } - /** - * Get the name of a {@link ThreadPoolTaskExecutor} based on its {@code beanName}. - * @param beanName the name of the {@link ThreadPoolTaskExecutor} bean - * @return a name for the given task executor - */ - private String getTaskExecutorName(String beanName) { - if (beanName.length() > TASK_EXECUTOR_SUFFIX.length() - && StringUtils.endsWithIgnoreCase(beanName, TASK_EXECUTOR_SUFFIX)) { - return beanName.substring(0, beanName.length() - TASK_EXECUTOR_SUFFIX.length()); - } - return beanName; - } - - /** - * Get the name of a {@link ThreadPoolTaskScheduler} based on its {@code beanName}. - * @param beanName the name of the {@link ThreadPoolTaskScheduler} bean - * @return a name for the given task scheduler - */ - private String getTaskSchedulerName(String beanName) { - if (beanName.equals(TASK_SCHEDULER_SUFFIX)) { - return "application"; - } - if (beanName.length() > TASK_SCHEDULER_SUFFIX.length() - && StringUtils.endsWithIgnoreCase(beanName, TASK_SCHEDULER_SUFFIX)) { - return beanName.substring(0, beanName.length() - TASK_SCHEDULER_SUFFIX.length()); - } - return beanName; - } - } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfigurationTests.java index cd34698efe81..7d3e0c05827c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/task/TaskExecutorMetricsAutoConfigurationTests.java @@ -41,6 +41,7 @@ * Tests for {@link TaskExecutorMetricsAutoConfiguration}. * * @author Stephane Nicoll + * @author Scott Frederick */ class TaskExecutorMetricsAutoConfigurationTests { @@ -53,8 +54,8 @@ void taskExecutorUsingAutoConfigurationIsInstrumented() { .run((context) -> { MeterRegistry registry = context.getBean(MeterRegistry.class); Collection meters = registry.get("executor.completed").functionCounters(); - assertThat(meters).singleElement() - .satisfies((meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("application")); + assertThat(meters).singleElement().satisfies( + (meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("applicationTaskExecutor")); }); } @@ -64,8 +65,8 @@ void taskExecutorsWithCustomNamesAreInstrumented() { .withBean("customName", ThreadPoolTaskExecutor.class, ThreadPoolTaskExecutor::new).run((context) -> { MeterRegistry registry = context.getBean(MeterRegistry.class); Collection meters = registry.get("executor.completed").functionCounters(); - assertThat(meters).map((meter) -> meter.getId().getTag("name")).containsExactlyInAnyOrder("first", - "customName"); + assertThat(meters).map((meter) -> meter.getId().getTag("name")) + .containsExactlyInAnyOrder("firstTaskExecutor", "customName"); }); } @@ -77,8 +78,8 @@ void threadPoolTaskExecutorWithNoTaskExecutorIsIgnored() { .withBean("customName", ThreadPoolTaskExecutor.class, () -> unavailableTaskExecutor).run((context) -> { MeterRegistry registry = context.getBean(MeterRegistry.class); Collection meters = registry.get("executor.completed").functionCounters(); - assertThat(meters).singleElement() - .satisfies((meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("first")); + assertThat(meters).singleElement().satisfies( + (meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("firstTaskExecutor")); }); } @@ -87,8 +88,8 @@ void taskExecutorInstrumentationCanBeDisabled() { this.contextRunner.withPropertyValues("management.metrics.enable.executor=false") .withConfiguration(AutoConfigurations.of(TaskExecutionAutoConfiguration.class)).run((context) -> { MeterRegistry registry = context.getBean(MeterRegistry.class); - assertThat(registry.find("executor.completed").tags("name", "application").functionCounter()) - .isNull(); + assertThat(registry.find("executor.completed").tags("name", "applicationTaskExecutor") + .functionCounter()).isNull(); }); } @@ -99,7 +100,7 @@ void taskSchedulerUsingAutoConfigurationIsInstrumented() { MeterRegistry registry = context.getBean(MeterRegistry.class); Collection meters = registry.get("executor.completed").functionCounters(); assertThat(meters).singleElement() - .satisfies((meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("application")); + .satisfies((meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("taskScheduler")); }); } @@ -109,8 +110,8 @@ void taskSchedulersWithCustomNamesAreInstrumented() { .withBean("customName", ThreadPoolTaskScheduler.class, ThreadPoolTaskScheduler::new).run((context) -> { MeterRegistry registry = context.getBean(MeterRegistry.class); Collection meters = registry.get("executor.completed").functionCounters(); - assertThat(meters).map((meter) -> meter.getId().getTag("name")).containsExactlyInAnyOrder("first", - "customName"); + assertThat(meters).map((meter) -> meter.getId().getTag("name")) + .containsExactlyInAnyOrder("firstTaskScheduler", "customName"); }); } @@ -122,8 +123,8 @@ void threadPoolTaskSchedulerWithNoTaskExecutorIsIgnored() { .withBean("customName", ThreadPoolTaskScheduler.class, () -> unavailableTaskExecutor).run((context) -> { MeterRegistry registry = context.getBean(MeterRegistry.class); Collection meters = registry.get("executor.completed").functionCounters(); - assertThat(meters).singleElement() - .satisfies((meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("first")); + assertThat(meters).singleElement().satisfies( + (meter) -> assertThat(meter.getId().getTag("name")).isEqualTo("firstTaskScheduler")); }); } @@ -133,7 +134,7 @@ void taskSchedulerInstrumentationCanBeDisabled() { .withConfiguration(AutoConfigurations.of(TaskSchedulingAutoConfiguration.class)) .withUserConfiguration(SchedulingTestConfiguration.class).run((context) -> { MeterRegistry registry = context.getBean(MeterRegistry.class); - assertThat(registry.find("executor.completed").tags("name", "application").functionCounter()) + assertThat(registry.find("executor.completed").tags("name", "taskScheduler").functionCounter()) .isNull(); }); }