Commit e3f03dd5 authored by bono007's avatar bono007 Committed by Stephane Nicoll

Add auto-configuration for DiskSpaceMetrics

See gh-26001
parent 151e0eb2
...@@ -16,8 +16,11 @@ ...@@ -16,8 +16,11 @@
package org.springframework.boot.actuate.autoconfigure.metrics; package org.springframework.boot.actuate.autoconfigure.metrics;
import java.io.File;
import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
...@@ -66,4 +69,10 @@ public class JvmMetricsAutoConfiguration { ...@@ -66,4 +69,10 @@ public class JvmMetricsAutoConfiguration {
return new ClassLoaderMetrics(); return new ClassLoaderMetrics();
} }
@Bean
@ConditionalOnMissingBean
public DiskSpaceMetrics diskSpaceMetrics() {
return new DiskSpaceMetrics(new File("."));
}
} }
...@@ -16,7 +16,10 @@ ...@@ -16,7 +16,10 @@
package org.springframework.boot.actuate.autoconfigure.metrics; package org.springframework.boot.actuate.autoconfigure.metrics;
import java.io.File;
import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
...@@ -35,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat; ...@@ -35,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* *
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Chris Bono
*/ */
class JvmMetricsAutoConfigurationTests { class JvmMetricsAutoConfigurationTests {
...@@ -43,9 +47,9 @@ class JvmMetricsAutoConfigurationTests { ...@@ -43,9 +47,9 @@ class JvmMetricsAutoConfigurationTests {
@Test @Test
void autoConfiguresJvmMetrics() { void autoConfiguresJvmMetrics() {
this.contextRunner.run( this.contextRunner.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
(context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class).hasSingleBean(JvmMemoryMetrics.class) .hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class)); .hasSingleBean(ClassLoaderMetrics.class).hasSingleBean(DiskSpaceMetrics.class));
} }
@Test @Test
...@@ -53,7 +57,7 @@ class JvmMetricsAutoConfigurationTests { ...@@ -53,7 +57,7 @@ class JvmMetricsAutoConfigurationTests {
this.contextRunner.withUserConfiguration(CustomJvmGcMetricsConfiguration.class) this.contextRunner.withUserConfiguration(CustomJvmGcMetricsConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class).hasBean("customJvmGcMetrics") .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class).hasBean("customJvmGcMetrics")
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class) .hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class)); .hasSingleBean(ClassLoaderMetrics.class).hasSingleBean(DiskSpaceMetrics.class));
} }
@Test @Test
...@@ -61,7 +65,8 @@ class JvmMetricsAutoConfigurationTests { ...@@ -61,7 +65,8 @@ class JvmMetricsAutoConfigurationTests {
this.contextRunner.withUserConfiguration(CustomJvmMemoryMetricsConfiguration.class) this.contextRunner.withUserConfiguration(CustomJvmMemoryMetricsConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasSingleBean(JvmMemoryMetrics.class).hasBean("customJvmMemoryMetrics") .hasSingleBean(JvmMemoryMetrics.class).hasBean("customJvmMemoryMetrics")
.hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class)); .hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class)
.hasSingleBean(DiskSpaceMetrics.class));
} }
@Test @Test
...@@ -69,7 +74,8 @@ class JvmMetricsAutoConfigurationTests { ...@@ -69,7 +74,8 @@ class JvmMetricsAutoConfigurationTests {
this.contextRunner.withUserConfiguration(CustomJvmThreadMetricsConfiguration.class) this.contextRunner.withUserConfiguration(CustomJvmThreadMetricsConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class) .hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class).hasBean("customJvmThreadMetrics")); .hasBean("customJvmThreadMetrics").hasSingleBean(ClassLoaderMetrics.class)
.hasSingleBean(DiskSpaceMetrics.class));
} }
@Test @Test
...@@ -77,7 +83,17 @@ class JvmMetricsAutoConfigurationTests { ...@@ -77,7 +83,17 @@ class JvmMetricsAutoConfigurationTests {
this.contextRunner.withUserConfiguration(CustomClassLoaderMetricsConfiguration.class) this.contextRunner.withUserConfiguration(CustomClassLoaderMetricsConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class) .hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class).hasBean("customClassLoaderMetrics")); .hasSingleBean(ClassLoaderMetrics.class).hasBean("customClassLoaderMetrics")
.hasSingleBean(DiskSpaceMetrics.class));
}
@Test
void allowsCustomDiskSpaceMetricsToBeUsed() {
this.contextRunner.withUserConfiguration(CustomDiskSpaceMetricsConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class).hasSingleBean(DiskSpaceMetrics.class)
.hasBean("customDiskSpaceMetrics"));
} }
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
...@@ -120,4 +136,14 @@ class JvmMetricsAutoConfigurationTests { ...@@ -120,4 +136,14 @@ class JvmMetricsAutoConfigurationTests {
} }
@Configuration(proxyBeanMethods = false)
static class CustomDiskSpaceMetricsConfiguration {
@Bean
DiskSpaceMetrics customDiskSpaceMetrics() {
return new DiskSpaceMetrics(new File(System.getProperty("user.dir")));
}
}
} }
...@@ -554,7 +554,7 @@ In most situations, the out-of-the-box defaults will provide sensible metrics th ...@@ -554,7 +554,7 @@ In most situations, the out-of-the-box defaults will provide sensible metrics th
[[actuator.metrics.supported.jvm]] [[actuator.metrics.supported.jvm]]
==== JVM Metrics ==== JVM Metrics
Auto-configuration will enable JVM Metrics using core Micrometer classes. Auto-configuration will enable JVM Metrics using core Micrometer classes.
JVM metrics are published under the `jvm.` meter name. JVM metrics are published under the `jvm.` and `disk.` meter names.
The following JVM metrics are provided: The following JVM metrics are provided:
...@@ -562,6 +562,7 @@ The following JVM metrics are provided: ...@@ -562,6 +562,7 @@ The following JVM metrics are provided:
* Statistics related to garbage collection * Statistics related to garbage collection
* Threads utilization * Threads utilization
* The Number of classes loaded/unloaded * The Number of classes loaded/unloaded
* Disk space available
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment