From 7b73a2cf6e8119f306a9baba243ef3c8ff39844e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com> Date: Fri, 4 Sep 2026 23:48:21 +0800 Subject: [PATCH] =?UTF-8?q?task-187:=20=E4=B8=B4=E6=97=B6=E7=A3=81?= =?UTF-8?q?=E7=9B=98=E5=AE=B9=E9=87=8F/=E5=8D=A0=E7=94=A8=E6=8C=87?= =?UTF-8?q?=E6=A0=87=E5=A5=91=E7=BA=A6=EF=BC=88tmpdisk.capacity/used=20gau?= =?UTF-8?q?ge=EF=BC=8Cpath=20=E6=A0=87=E7=AD=BE=EF=BC=8C=E5=8F=AF=E7=AE=97?= =?UTF-8?q?=E5=8D=A0=E7=94=A8=E6=AF=94=E5=AF=B9=E6=8E=A5=2009=20=E5=91=8A?= =?UTF-8?q?=E8=AD=A6=EF=BC=89+=208=20=E6=9D=A1=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aiimage/metrics/TempDiskMetricsTest.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 backend-java/src/test/java/com/nanri/aiimage/metrics/TempDiskMetricsTest.java diff --git a/backend-java/src/test/java/com/nanri/aiimage/metrics/TempDiskMetricsTest.java b/backend-java/src/test/java/com/nanri/aiimage/metrics/TempDiskMetricsTest.java new file mode 100644 index 00000000..cf76454e --- /dev/null +++ b/backend-java/src/test/java/com/nanri/aiimage/metrics/TempDiskMetricsTest.java @@ -0,0 +1,79 @@ +package com.nanri.aiimage.metrics; + +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * task-187:临时磁盘容量/占用指标契约(spec 11 §1,09 临时磁盘巡检/告警接线面)。 + * aiimage.tmpdisk.capacity/used gauge,标签 path;与 09 告警阈值联动时可直接读值比判。 + */ +class TempDiskMetricsTest { + + private final SimpleMeterRegistry registry = new SimpleMeterRegistry(); + private final TaskObservabilityMetrics metrics = new TaskObservabilityMetrics("server-110", registry); + + private static final String TMP = "/data/tmp-files"; + + @Test + void diskCapacityMeasured() { + metrics.disk(TMP, 100_000_000L, 30_000_000L); + assertEquals(100_000_000.0, + registry.get("aiimage.tmpdisk.capacity").tag("path", TMP).gauge().value(), 0.001); + } + + @Test + void diskUsedMeasured() { + metrics.disk(TMP, 100_000_000L, 30_000_000L); + assertEquals(30_000_000.0, + registry.get("aiimage.tmpdisk.used").tag("path", TMP).gauge().value(), 0.001); + } + + @Test + void usagePercentDerivableForThreshold() { + metrics.disk(TMP, 100_000_000L, 90_000_000L); + double capacity = registry.get("aiimage.tmpdisk.capacity").tag("path", TMP).gauge().value(); + double used = registry.get("aiimage.tmpdisk.used").tag("path", TMP).gauge().value(); + double percent = used / capacity * 100; + assertEquals(90.0, percent, 0.001, "09 告警可按占用百分比比判阈值"); + } + + @Test + void emptyDirectoryRecordsZero() { + metrics.disk(TMP, 100_000_000L, 0L); + assertEquals(0.0, registry.get("aiimage.tmpdisk.used").tag("path", TMP).gauge().value(), 0.001); + } + + @Test + void pathTagAttached() { + metrics.disk(TMP, 1L, 1L); + assertEquals(TMP, registry.get("aiimage.tmpdisk.capacity").gauge().getId().getTag("path")); + } + + @Test + void gaugeUpdatesOnLaterWrite() { + metrics.disk(TMP, 100L, 10L); + metrics.disk(TMP, 100L, 55L); + assertEquals(55.0, registry.get("aiimage.tmpdisk.used").tag("path", TMP).gauge().value(), 0.001); + } + + @Test + void diskNamesFrozen() { + metrics.disk(TMP, 1L, 1L); + assertTrue(registry.getMeters().stream() + .anyMatch(m -> m.getId().getName().equals("aiimage.tmpdisk.capacity"))); + assertTrue(registry.getMeters().stream() + .anyMatch(m -> m.getId().getName().equals("aiimage.tmpdisk.used"))); + } + + @Test + void measureCallDoesNotBlockOrThrow() { + // 多次写 gauge 不抛错(巡检每轮都调用),registry 为空也不影响 + TaskObservabilityMetrics without = new TaskObservabilityMetrics("server-121", null); + without.disk(TMP, 1L, 1L); + metrics.disk(TMP, 1L, 1L); + metrics.disk(TMP + "/sub", 1L, 0L); + } +}