Skip to content

Commit e3f03dd

Browse files
onobcsnicoll
authored andcommitted
Add auto-configuration for DiskSpaceMetrics
See gh-26001
1 parent 151e0eb commit e3f03dd

File tree

3 files changed

+44
-8
lines changed

3 files changed

+44
-8
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfiguration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics;
1818

19+
import java.io.File;
20+
1921
import io.micrometer.core.instrument.MeterRegistry;
2022
import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
23+
import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics;
2124
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
2225
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
2326
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
@@ -66,4 +69,10 @@ public ClassLoaderMetrics classLoaderMetrics() {
6669
return new ClassLoaderMetrics();
6770
}
6871

72+
@Bean
73+
@ConditionalOnMissingBean
74+
public DiskSpaceMetrics diskSpaceMetrics() {
75+
return new DiskSpaceMetrics(new File("."));
76+
}
77+
6978
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfigurationTests.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics;
1818

19+
import java.io.File;
20+
1921
import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
22+
import io.micrometer.core.instrument.binder.jvm.DiskSpaceMetrics;
2023
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
2124
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
2225
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
@@ -35,6 +38,7 @@
3538
*
3639
* @author Andy Wilkinson
3740
* @author Stephane Nicoll
41+
* @author Chris Bono
3842
*/
3943
class JvmMetricsAutoConfigurationTests {
4044

@@ -43,41 +47,53 @@ class JvmMetricsAutoConfigurationTests {
4347

4448
@Test
4549
void autoConfiguresJvmMetrics() {
46-
this.contextRunner.run(
47-
(context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class).hasSingleBean(JvmMemoryMetrics.class)
48-
.hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class));
50+
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
51+
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
52+
.hasSingleBean(ClassLoaderMetrics.class).hasSingleBean(DiskSpaceMetrics.class));
4953
}
5054

5155
@Test
5256
void allowsCustomJvmGcMetricsToBeUsed() {
5357
this.contextRunner.withUserConfiguration(CustomJvmGcMetricsConfiguration.class)
5458
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class).hasBean("customJvmGcMetrics")
5559
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
56-
.hasSingleBean(ClassLoaderMetrics.class));
60+
.hasSingleBean(ClassLoaderMetrics.class).hasSingleBean(DiskSpaceMetrics.class));
5761
}
5862

5963
@Test
6064
void allowsCustomJvmMemoryMetricsToBeUsed() {
6165
this.contextRunner.withUserConfiguration(CustomJvmMemoryMetricsConfiguration.class)
6266
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
6367
.hasSingleBean(JvmMemoryMetrics.class).hasBean("customJvmMemoryMetrics")
64-
.hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class));
68+
.hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class)
69+
.hasSingleBean(DiskSpaceMetrics.class));
6570
}
6671

6772
@Test
6873
void allowsCustomJvmThreadMetricsToBeUsed() {
6974
this.contextRunner.withUserConfiguration(CustomJvmThreadMetricsConfiguration.class)
7075
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
7176
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
72-
.hasSingleBean(ClassLoaderMetrics.class).hasBean("customJvmThreadMetrics"));
77+
.hasBean("customJvmThreadMetrics").hasSingleBean(ClassLoaderMetrics.class)
78+
.hasSingleBean(DiskSpaceMetrics.class));
7379
}
7480

7581
@Test
7682
void allowsCustomClassLoaderMetricsToBeUsed() {
7783
this.contextRunner.withUserConfiguration(CustomClassLoaderMetricsConfiguration.class)
7884
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
7985
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
80-
.hasSingleBean(ClassLoaderMetrics.class).hasBean("customClassLoaderMetrics"));
86+
.hasSingleBean(ClassLoaderMetrics.class).hasBean("customClassLoaderMetrics")
87+
.hasSingleBean(DiskSpaceMetrics.class));
88+
}
89+
90+
@Test
91+
void allowsCustomDiskSpaceMetricsToBeUsed() {
92+
this.contextRunner.withUserConfiguration(CustomDiskSpaceMetricsConfiguration.class)
93+
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
94+
.hasSingleBean(JvmMemoryMetrics.class).hasSingleBean(JvmThreadMetrics.class)
95+
.hasSingleBean(ClassLoaderMetrics.class).hasSingleBean(DiskSpaceMetrics.class)
96+
.hasBean("customDiskSpaceMetrics"));
8197
}
8298

8399
@Configuration(proxyBeanMethods = false)
@@ -120,4 +136,14 @@ ClassLoaderMetrics customClassLoaderMetrics() {
120136

121137
}
122138

139+
@Configuration(proxyBeanMethods = false)
140+
static class CustomDiskSpaceMetricsConfiguration {
141+
142+
@Bean
143+
DiskSpaceMetrics customDiskSpaceMetrics() {
144+
return new DiskSpaceMetrics(new File(System.getProperty("user.dir")));
145+
}
146+
147+
}
148+
123149
}

spring-boot-project/spring-boot-docs/src/docs/asciidoc/actuator/metrics.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,14 +554,15 @@ In most situations, the out-of-the-box defaults will provide sensible metrics th
554554
[[actuator.metrics.supported.jvm]]
555555
==== JVM Metrics
556556
Auto-configuration will enable JVM Metrics using core Micrometer classes.
557-
JVM metrics are published under the `jvm.` meter name.
557+
JVM metrics are published under the `jvm.` and `disk.` meter names.
558558

559559
The following JVM metrics are provided:
560560

561561
* Various memory and buffer pool details
562562
* Statistics related to garbage collection
563563
* Threads utilization
564564
* The Number of classes loaded/unloaded
565+
* Disk space available
565566

566567

567568

0 commit comments

Comments
 (0)