diff --git a/server/src/domain/jobs/job.repository.mongo.ts b/server/src/domain/jobs/job.repository.mongo.ts index 1dd912d10..89d8dfd04 100644 --- a/server/src/domain/jobs/job.repository.mongo.ts +++ b/server/src/domain/jobs/job.repository.mongo.ts @@ -127,6 +127,7 @@ class MongoJobsRepository implements IJobsRepository { nextScheduledAt: now + BACKOFF_MS, lockedBy: null, // Remove lock lockedUntil: null, + lastFinishedAt: now, // a failed run still finished used in getMetrics for failedAt timestamp lastFailReason: error instanceof Error ? error.message : String(error), }, $inc: { diff --git a/server/test/integration/jobsRepository.test.ts b/server/test/integration/jobsRepository.test.ts index 41781114a..02b0ecc5d 100644 --- a/server/test/integration/jobsRepository.test.ts +++ b/server/test/integration/jobsRepository.test.ts @@ -258,6 +258,7 @@ describe("MongoJobsRepository", () => { const row = await readRow("check:mon-1"); expect(row?.nextScheduledAt).toBe(NOW + BACKOFF_MS); expect(row?.lastFailReason).toBe("connection refused"); + expect(row?.lastFinishedAt).toBe(NOW); expect(row?.failCount).toBe(3); expect(row?.lockedBy).toBeNull(); expect(row?.lockedUntil).toBeNull(); diff --git a/server/test/unit/services/dbQueueWorker.test.ts b/server/test/unit/services/dbQueueWorker.test.ts index 21515c34f..66ca6753d 100644 --- a/server/test/unit/services/dbQueueWorker.test.ts +++ b/server/test/unit/services/dbQueueWorker.test.ts @@ -680,7 +680,7 @@ describe("DBQueueWorker", () => { expect(page.count).toBe(1); expect(page.jobs).toHaveLength(1); - expect(page.jobs[0]).toEqual(expect.objectContaining({ monitorId: "m1", monitorType: "check", monitorInterval: 60000, repeat: 60000 })); + expect(page.jobs[0]).toEqual(expect.objectContaining({ monitorId: "m1", monitorType: "check", monitorInterval: 60000 })); }); it("falls back to the job id for monitorId when refId is null (global jobs)", async () => {