feat(jobs): expose last job failure time

JobActivity 记录最近失败时刻并进入快照;JobRunner 失败时上报该时刻;新增指标 msgx.pipeline.job.last_failure_age_seconds 与健康明细 lastFailureAgeSeconds(对齐 reference 作业健康口径)。

验证:./gradlew test 145 tests / 0 fail / 0 skipped。
This commit is contained in:
windyboy
2026-09-12 20:56:41 +08:00
parent 8a380c7646
commit 267eb20219
6 changed files with 22 additions and 6 deletions
@@ -59,12 +59,16 @@ class JobRunnerHealthIndicatorTest {
fun `a failed tick counts up without refreshing the heartbeat`() {
val activity = JobActivity().apply { started() }
activity.tickFailed()
activity.tickFailed()
activity.tickFailed(now.minusSeconds(5))
activity.tickFailed(now)
val snapshot = activity.snapshot()
assertEquals(2L, snapshot.failures)
assertEquals(0L, snapshot.ticks)
assertEquals(null, snapshot.lastTickAt)
val details = details(jobRunnerHealth(snapshot, now))
assertEquals(0L, details["lastFailureAgeSeconds"])
assertEquals(2L, details["failures"])
}
}
@@ -69,6 +69,7 @@ class JobRunnerTest {
val snapshot = activity.snapshot()
assertNull(snapshot.lastTickAt)
assertEquals(MutableClock.BASE, snapshot.lastFailureAt)
assertEquals(0L, snapshot.ticks)
assertEquals(1L, snapshot.failures)
}