package com.sequenceiq.periscope.monitor;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.List;
import javax.annotation.PostConstruct;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class MonitorScheduler {
@Autowired
private ApplicationContext applicationContext;
@Autowired
private List<Monitor> monitorList;
@Autowired
private Scheduler scheduler;
@PostConstruct
public void scheduleMonitors() throws SchedulerException {
for (Monitor monitor : monitorList) {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put(MonitorContext.APPLICATION_CONTEXT.name(), applicationContext);
JobDetail jobDetail = newJob(monitor.getClass()).withIdentity(monitor.getIdentifier()).setJobData(jobDataMap).build();
CronScheduleBuilder cronBuilder = CronScheduleBuilder.cronSchedule(monitor.getTriggerExpression());
Trigger trigger = newTrigger().startNow().withSchedule(cronBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
}
}
}