Skip to content

Commit 089bfaf

Browse files
committed
feat(Remove jobs older than a week): Remove monitorable jobs older than a week
1 parent c1907f2 commit 089bfaf

3 files changed

Lines changed: 65 additions & 0 deletions

File tree

src/main/java/com/conveyal/datatools/common/status/MonitorableJob.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ private void registerJob() {
115115
Set<MonitorableJob> userJobs = JobUtils.getJobsForUser(this.owner);
116116
userJobs.add(this);
117117
JobUtils.userJobsMap.put(retrieveUserId(), userJobs);
118+
JobUtils.removeJobsOlderThanAWeek();
118119
}
119120

120121
@JsonProperty("owner")

src/main/java/com/conveyal/datatools/manager/utils/JobUtils.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import org.slf4j.Logger;
1212
import org.slf4j.LoggerFactory;
1313

14+
import java.time.LocalDateTime;
15+
import java.time.format.DateTimeFormatter;
1416
import java.util.Collection;
1517
import java.util.HashMap;
1618
import java.util.Map;
@@ -173,4 +175,15 @@ public static DeployJob queueDeployJob(Deployment deployment, Auth0UserProfile o
173175
deploymentJobsByServer.put(server.id, deployJob);
174176
return deployJob;
175177
}
178+
179+
/**
180+
* Removes all jobs that are older than one week.
181+
*/
182+
public static void removeJobsOlderThanAWeek() {
183+
LocalDateTime oneWeekAgo = LocalDateTime.now().minusDays(7);
184+
userJobsMap.forEach((userId, jobs) ->
185+
jobs.removeIf(job -> LocalDateTime.parse(job.status.modified, DateTimeFormatter.ISO_DATE_TIME)
186+
.isBefore(oneWeekAgo))
187+
);
188+
}
176189
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.conveyal.datatools.manager.utils;
2+
3+
import com.conveyal.datatools.common.status.MonitorableJob;
4+
import com.google.common.collect.Sets;
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.time.Instant;
9+
import java.util.Set;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
import static org.junit.jupiter.api.Assertions.assertTrue;
13+
14+
class JobUtilsTest {
15+
16+
@BeforeEach
17+
void setUp() {
18+
JobUtils.userJobsMap.clear();
19+
}
20+
21+
@Test
22+
void testRemoveJobsOlderThanAWeek() {
23+
String userId = "user-id";
24+
Set<MonitorableJob> jobs = Sets.newConcurrentHashSet();
25+
26+
MonitorableJob oldJob = createMonitorableJob();
27+
oldJob.status.modified = Instant.now().minus(java.time.Duration.ofDays(8)).toString();
28+
29+
MonitorableJob recentJob = createMonitorableJob();
30+
recentJob.status.modified = Instant.now().toString();
31+
32+
jobs.add(oldJob);
33+
jobs.add(recentJob);
34+
JobUtils.userJobsMap.put(userId, jobs);
35+
36+
JobUtils.removeJobsOlderThanAWeek();
37+
38+
Set<MonitorableJob> remainingJobs = JobUtils.userJobsMap.get(userId);
39+
assertEquals(1, remainingJobs.size());
40+
assertTrue(remainingJobs.stream().anyMatch(job -> job.jobId.equals(recentJob.jobId)));
41+
}
42+
43+
private MonitorableJob createMonitorableJob() {
44+
return new MonitorableJob() {
45+
@Override
46+
public void jobLogic() {
47+
48+
}
49+
};
50+
}
51+
}

0 commit comments

Comments
 (0)