task-185: file-job.* 指标契约(pending/running/success/failed/retry/duration,分模块/实例)+ 8 条测试
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package com.nanri.aiimage.metrics;
|
||||
|
||||
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* task-185:file-job.* 指标契约(spec 11 §1,TaskResultFileJobWorker 接线面)。
|
||||
* pending/running/success/failed/retry 计数 + duration 耗时,分 moduleType/instanceId。
|
||||
*/
|
||||
class FileJobMetricsTest {
|
||||
|
||||
private final SimpleMeterRegistry registry = new SimpleMeterRegistry();
|
||||
private final TaskObservabilityMetrics metrics = new TaskObservabilityMetrics("server-110", registry);
|
||||
|
||||
private double count(String state, String moduleType) {
|
||||
io.micrometer.core.instrument.Counter c = registry.find("aiimage.file-job." + state)
|
||||
.tag("moduleType", moduleType).counter();
|
||||
return c == null ? 0.0 : c.count();
|
||||
}
|
||||
|
||||
@Test
|
||||
void pendingCounted() {
|
||||
metrics.fileJobState("similarasin", "pending");
|
||||
assertEquals(1.0, count("pending", "similarasin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void runningCounted() {
|
||||
metrics.fileJobState("similarasin", "running");
|
||||
assertEquals(1.0, count("running", "similarasin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void successCounted() {
|
||||
metrics.fileJobState("similarasin", "success");
|
||||
assertEquals(1.0, count("success", "similarasin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void failedCounted() {
|
||||
metrics.fileJobState("similarasin", "failed");
|
||||
assertEquals(1.0, count("failed", "similarasin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void retryCounted() {
|
||||
metrics.fileJobState("similarasin", "retry");
|
||||
assertEquals(1.0, count("retry", "similarasin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void durationRecorded() {
|
||||
metrics.fileJobDuration("similarasin", 2_000L);
|
||||
assertEquals(1, registry.get("aiimage.file-job.duration").tag("moduleType", "similarasin").timer().count());
|
||||
assertEquals(2_000.0,
|
||||
registry.get("aiimage.file-job.duration").tag("moduleType", "similarasin").timer()
|
||||
.totalTime(TimeUnit.MILLISECONDS), 0.001);
|
||||
}
|
||||
|
||||
@Test
|
||||
void splitByModuleAndInstance() {
|
||||
metrics.fileJobState("similarasin", "success");
|
||||
metrics.fileJobState("publish", "success");
|
||||
assertEquals(1.0, count("success", "similarasin"));
|
||||
assertEquals(1.0, count("success", "publish"));
|
||||
assertEquals("server-110",
|
||||
registry.get("aiimage.file-job.success").counter().getId().getTag("instanceId"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void fileJobNamesFrozen() {
|
||||
metrics.fileJobState("similarasin", "success");
|
||||
metrics.fileJobDuration("similarasin", 10L);
|
||||
assertTrue(registry.getMeters().stream().anyMatch(m -> m.getId().getName().equals("aiimage.file-job.success")));
|
||||
assertTrue(registry.getMeters().stream().anyMatch(m -> m.getId().getName().equals("aiimage.file-job.duration")));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user