From 089bfafee22df0935a07b115369e08dba8c482a0 Mon Sep 17 00:00:00 2001 From: Robin Beer Date: Thu, 19 Mar 2026 15:36:59 +0000 Subject: [PATCH 1/2] feat(Remove jobs older than a week): Remove monitorable jobs older than a week --- .../common/status/MonitorableJob.java | 1 + .../datatools/manager/utils/JobUtils.java | 13 +++++ .../datatools/manager/utils/JobUtilsTest.java | 51 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java diff --git a/src/main/java/com/conveyal/datatools/common/status/MonitorableJob.java b/src/main/java/com/conveyal/datatools/common/status/MonitorableJob.java index 50903aab1..71b7a93f7 100644 --- a/src/main/java/com/conveyal/datatools/common/status/MonitorableJob.java +++ b/src/main/java/com/conveyal/datatools/common/status/MonitorableJob.java @@ -115,6 +115,7 @@ private void registerJob() { Set userJobs = JobUtils.getJobsForUser(this.owner); userJobs.add(this); JobUtils.userJobsMap.put(retrieveUserId(), userJobs); + JobUtils.removeJobsOlderThanAWeek(); } @JsonProperty("owner") diff --git a/src/main/java/com/conveyal/datatools/manager/utils/JobUtils.java b/src/main/java/com/conveyal/datatools/manager/utils/JobUtils.java index b3edd216d..f880bc060 100644 --- a/src/main/java/com/conveyal/datatools/manager/utils/JobUtils.java +++ b/src/main/java/com/conveyal/datatools/manager/utils/JobUtils.java @@ -11,6 +11,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -173,4 +175,15 @@ public static DeployJob queueDeployJob(Deployment deployment, Auth0UserProfile o deploymentJobsByServer.put(server.id, deployJob); return deployJob; } + + /** + * Removes all jobs that are older than one week. + */ + public static void removeJobsOlderThanAWeek() { + LocalDateTime oneWeekAgo = LocalDateTime.now().minusDays(7); + userJobsMap.forEach((userId, jobs) -> + jobs.removeIf(job -> LocalDateTime.parse(job.status.modified, DateTimeFormatter.ISO_DATE_TIME) + .isBefore(oneWeekAgo)) + ); + } } diff --git a/src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java b/src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java new file mode 100644 index 000000000..002c32ca4 --- /dev/null +++ b/src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java @@ -0,0 +1,51 @@ +package com.conveyal.datatools.manager.utils; + +import com.conveyal.datatools.common.status.MonitorableJob; +import com.google.common.collect.Sets; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.time.Instant; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class JobUtilsTest { + + @BeforeEach + void setUp() { + JobUtils.userJobsMap.clear(); + } + + @Test + void testRemoveJobsOlderThanAWeek() { + String userId = "user-id"; + Set jobs = Sets.newConcurrentHashSet(); + + MonitorableJob oldJob = createMonitorableJob(); + oldJob.status.modified = Instant.now().minus(java.time.Duration.ofDays(8)).toString(); + + MonitorableJob recentJob = createMonitorableJob(); + recentJob.status.modified = Instant.now().toString(); + + jobs.add(oldJob); + jobs.add(recentJob); + JobUtils.userJobsMap.put(userId, jobs); + + JobUtils.removeJobsOlderThanAWeek(); + + Set remainingJobs = JobUtils.userJobsMap.get(userId); + assertEquals(1, remainingJobs.size()); + assertTrue(remainingJobs.stream().anyMatch(job -> job.jobId.equals(recentJob.jobId))); + } + + private MonitorableJob createMonitorableJob() { + return new MonitorableJob() { + @Override + public void jobLogic() { + + } + }; + } +} \ No newline at end of file From 81178692640c6b6ddcbb934214fc57a96004a820 Mon Sep 17 00:00:00 2001 From: Robin Beer Date: Thu, 19 Mar 2026 15:41:51 +0000 Subject: [PATCH 2/2] improvement(JobUtilsTest.java): Removed redundant before each --- .../com/conveyal/datatools/manager/utils/JobUtilsTest.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java b/src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java index 002c32ca4..cf533fbf3 100644 --- a/src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java +++ b/src/test/java/com/conveyal/datatools/manager/utils/JobUtilsTest.java @@ -2,7 +2,6 @@ import com.conveyal.datatools.common.status.MonitorableJob; import com.google.common.collect.Sets; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.time.Instant; @@ -13,13 +12,9 @@ class JobUtilsTest { - @BeforeEach - void setUp() { - JobUtils.userJobsMap.clear(); - } - @Test void testRemoveJobsOlderThanAWeek() { + JobUtils.userJobsMap.clear(); String userId = "user-id"; Set jobs = Sets.newConcurrentHashSet();