// ================= // Creating new jobs // ================= // Create some repeating jobs import timemachine.scheduler.* jobDef = JobDefs.loggerJobDef() jobDef.addSchedule(Schedules.secondly(1).setName('job1-schedule1')) jobDef.addSchedule(Schedules.minutely(1).setName('job1-schedule2')) jobDef.addSchedule(Schedules.hourly(1).setName('job1-schedule3')) jobDef.addSchedule(Schedules.daily(1).setName('job1-schedule4')) jobDef.addSchedule(Schedules.weekly(1).setName('job1-schedule5')) scheduler.schedule(jobDef) webout.println("Done: $jobDef has been scheduled.") // Create some cron jobs import timemachine.scheduler.* jobDef = JobDefs.sleepyJobDef(1500) jobDef.addSchedule(Schedules.cron("0/5 * * * * ?").setName('job2-5secs')) jobDef.addSchedule(Schedules.cron("0 0/3 * * * ?").setName('job2-3minsA')) jobDef.addSchedule(Schedules.cron("0 0/3 * * * ?").setName('job2-3minsB')) jobDef.addSchedule(Schedules.cron("0 0 * * * ?").setName('job2-1min')) jobDef.addSchedule(Schedules.cron("0 0 8 * * ?").setName('job2-8AM')) jobDef.addSchedule(Schedules.cron("0 0 8 1,5,10,15,20,25 * ?").setName('job2-8AM_5th_days')) jobDef.addSchedule(Schedules.cron("0 0 8 ? * SAT,SUN").setName('job2-sun_sat')) jobDef.addSchedule(Schedules.cron("0 0 8,17 ? * 1-5").setName('job2-mon_to_fri')) jobDef.addSchedule(Schedules.cron("0 0 * 25 DEC ?").setName('job2-XMas')) jobDef.addSchedule(Schedules.cron("0 0 0 * * ? 2013").setName('job2-year13')) scheduler.schedule(jobDef) webout.println("Done: $jobDef has been scheduled.") // Create one-time job that has a startTime delay of 30 mins. import timemachine.scheduler.* jobDef = JobDefs.groovyJobDef("logger.info('JVM free memory: ' + Runtime.getRuntime().freeMemory())") jobDef.setName('MemoryChecker') jobDef.addSchedule(Schedules.once().setStartTime(Schedules.startTimeDelay(30*60*1000L))) scheduler.schedule(jobDef) webout.println("Done: $jobDef has been scheduled.") // Create End of month DateListSchedule import timemachine.scheduler.* import timemachine.scheduler.schedule.* s = new DateListSchedule() s.setName("job4-end-of-month") s.setDateListProviderClassName(EndOfMonthDateListProvider.class) jobDef = JobDefs.groovyJobDef("logger.info('JVM free memory: ' + Runtime.getRuntime().freeMemory())") jobDef.addSchedule(s) scheduler.schedule(jobDef) webout.println("Done: $jobDef has been scheduled.") // Custom ScriptingDateListProvider import timemachine.scheduler.* import timemachine.scheduler.schedule.* s = new DateListSchedule() s.setName("job5-script-schedule") s.setDates([new Date()]) s.setDateListProviderClassName(ScriptingDateListProvider.class) s.setDateListProviderData('''scriptEngineName=Groovy,scriptText= prevDate = dateListSchedule.getDates()[0] return [new Date(prevDate.getTime() + 3000L)] ''') jobDef = JobDefs.groovyJobDef("logger.info('Health Check.')") jobDef.addSchedule(s) scheduler.schedule(jobDef) webout.println("Done: $jobDef has been scheduled.") // ====================== // Querying and Reporting // ====================== // Show top most run counts schedules = scheduler.findSchedules().sort{s1,s2->s2.runCount <=> s1.runCount} schedules.each{ webout.println(it.id+' '+it.runCount+' '+it.missedRunCount) } webout.println("Done: ${schedules.size()} schedules.") // Show top missed run counts schedules = scheduler.findSchedules().grep{s->if(s.missedRunCount > 0) s } schedules.sort{s1,s2->s2.missedRunCount <=> s1.missedRunCount} schedules.each{ webout.println(it.id+' '+it.missedRunCount+' '+it.runCount) } webout.println("Done: ${schedules.size()} schedules.") // Show all schedules using the system sorter import timemachine.scheduler.* import timemachine.scheduler.support.* schedules = scheduler.findSchedules() Collections.sort(schedules, new ScheduleComparator()) schedules.each{ s -> webout.println(s.toString() + ", nextRun: " + s.getNextRun() + ", state: " + s.getState() + ", startTime: " + s.getStartTime()) } webout.println("Done: ${schedules.size()} schedules.") // =========== // Cleaning up // =========== // Delete a Schedule by name import timemachine.scheduler.* schedules = scheduler.findSchedules('job1-schedule4') schedule = schedules[0] scheduler.unschedule(schedule) webout.println("Done: $schedule has been removed.") // Delete all jobs import timemachine.scheduler.* jobDefs = scheduler.findJobDefs() jobDefs.each{ jobDef -> scheduler.unschedule(jobDef) } webout.println("Done: $jobDefs.size JobDef has been removed.")