83 lines
2.9 KiB
Java
83 lines
2.9 KiB
Java
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")));
|
||
}
|
||
}
|