task-183: task.duration 耗时指标契约(Timer,非负、分模块、名称冻结)+ 8 条测试
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
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-183:task.duration 耗时记录契约(spec 11 §1)。
|
||||
* 开始→终态耗时以 Timer 记录(未配置注册表时降级 debug 日志);非负;分 moduleType。
|
||||
*/
|
||||
class TaskDurationMetricsTest {
|
||||
|
||||
private final SimpleMeterRegistry registry = new SimpleMeterRegistry();
|
||||
private final TaskObservabilityMetrics metrics = new TaskObservabilityMetrics("server-110", registry);
|
||||
|
||||
private io.micrometer.core.instrument.Timer timer(String moduleType) {
|
||||
return registry.get("aiimage.task.duration").tag("moduleType", moduleType).timer();
|
||||
}
|
||||
|
||||
@Test
|
||||
void durationRecorded() {
|
||||
metrics.taskDuration("similarasin", 1_234L);
|
||||
assertEquals(1, timer("similarasin").count());
|
||||
assertEquals(1_234.0, timer("similarasin").totalTime(java.util.concurrent.TimeUnit.MILLISECONDS), 0.001);
|
||||
}
|
||||
|
||||
@Test
|
||||
void durationAccumulates() {
|
||||
metrics.taskDuration("similarasin", 100L);
|
||||
metrics.taskDuration("similarasin", 200L);
|
||||
assertEquals(2, timer("similarasin").count());
|
||||
assertEquals(300.0, timer("similarasin").totalTime(java.util.concurrent.TimeUnit.MILLISECONDS), 0.001);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shortTaskRecorded() {
|
||||
metrics.taskDuration("similarasin", 1L);
|
||||
assertTrue(timer("similarasin").count() >= 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
void longTaskRecordedLarger() {
|
||||
metrics.taskDuration("similarasin", 600_000L);
|
||||
assertEquals(600_000.0, timer("similarasin").totalTime(java.util.concurrent.TimeUnit.MILLISECONDS), 0.001);
|
||||
}
|
||||
|
||||
@Test
|
||||
void durationNeverNegative() {
|
||||
metrics.taskDuration("similarasin", -5L);
|
||||
assertEquals(0.0, timer("similarasin").totalTime(java.util.concurrent.TimeUnit.MILLISECONDS), 0.001,
|
||||
"负耗时按 0 处理,不应破坏指标");
|
||||
}
|
||||
|
||||
@Test
|
||||
void durationSplitByModule() {
|
||||
metrics.taskDuration("similarasin", 100L);
|
||||
metrics.taskDuration("publish", 50L);
|
||||
assertEquals(1, timer("similarasin").count());
|
||||
assertEquals(1, timer("publish").count());
|
||||
}
|
||||
|
||||
@Test
|
||||
void durationNameFrozen() {
|
||||
metrics.taskDuration("similarasin", 10L);
|
||||
assertTrue(registry.getMeters().stream()
|
||||
.anyMatch(m -> m.getId().getName().equals("aiimage.task.duration")));
|
||||
}
|
||||
|
||||
@Test
|
||||
void durationCarriesInstanceLabel() {
|
||||
metrics.taskDuration("similarasin", 10L);
|
||||
assertEquals("server-110",
|
||||
registry.get("aiimage.task.duration").timer().getId().getTag("instanceId"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user