module scheduled_jobs; import scheduled; import std.datetime; import slf4d; void startScheduledJobs() { JobSchedule analyticsSchedule = new FixedIntervalSchedule( days(1), Clock.currTime(UTC()) + seconds(5) ); JobScheduler jobScheduler = new TaskPoolScheduler(); jobScheduler.addJob(() { // Clear old analytics data from profiles. import profile.data; import profile.data_impl_sqlite; import profile.model; FileSystemProfileRepository.doForAllUserProfiles( (Profile profile, ProfileRepository profileRepo) { ProfileDataSource ds = profileRepo.getDataSource(profile); auto props = ds.getPropertiesRepository().findAll(); bool shouldDelete = false; foreach (prop; props) { import std.string : startsWith; if (startsWith(prop.property, "analytics")) { shouldDelete = true; break; } } if (shouldDelete) { ds.getPropertiesRepository().deleteAllByPrefix("analytics"); infoF!"Deleted all old \"analytics\" properties for user %s profile %s."( profile.username, profile.name ); } } ); }, analyticsSchedule); jobScheduler.start(); }