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); // Add a scheduled job to regularly check for and create recurring transaction drafts. jobScheduler.addJob(() { import profile.data; import profile.data_impl_sqlite; import profile.model; import transaction.dto; import transaction.data; import util.pagination; import std.stdio; import std.datetime; import cronexp; FileSystemProfileRepository.doForAllUserProfiles((Profile profile, ProfileRepository profileRepo) { writefln!"Recurring transaction check: %s / %s"(profile.username, profile.name); ProfileDataSource ds = profileRepo.getDataSource(profile); RecurringTransactionRepository rtRepo = ds.getRecurringTransactionRepository(); Page!(RecurringTransactionResponse) result = rtRepo.findAll(PageRequest.unpaged()); foreach (rt; result.items) { writeln(rt.scheduleExpr); DateTime now = cast(DateTime) Clock.currTime(); auto cron = CronExpr(rt.scheduleExpr); writefln!"scheduleExpr = %s -> %s"(rt.scheduleExpr, cron.getNext(now)); // TODO: Figure out how to actually create the transactions! } }); }, new FixedIntervalSchedule(minutes(1), Clock.currTime(UTC()))); jobScheduler.start(); }