Moved all jobTrigger references to TriggerMonitor

This commit is contained in:
fabio.formosa
2016-11-14 19:08:15 +01:00
parent 99ec4bb2a2
commit 02f0d0b079
5 changed files with 87 additions and 15 deletions

View File

@@ -2,15 +2,17 @@ package it.fabioformosa.quartzmanager.aspects;
import javax.annotation.Resource;
import org.quartz.DailyTimeIntervalTrigger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.stereotype.Component;
import it.fabioformosa.quartzmanager.dto.TriggerProgress;
import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor;
//@Aspect
@Component
@@ -23,7 +25,7 @@ public class ProgressUpdaterImpl implements ProgressUpdater {
private Scheduler scheduler;
@Resource
private SimpleTrigger jobTrigger = null;
private TriggerMonitor triggerMonitor;
//@AfterReturning("execution(* logAndSend(..))")
// @Override
@@ -33,15 +35,28 @@ public class ProgressUpdaterImpl implements ProgressUpdater {
@Override
public void update() throws SchedulerException {
SimpleTriggerImpl jobTrigger = (SimpleTriggerImpl) scheduler
.getTrigger(this.jobTrigger.getKey());
Trigger trigger = scheduler.getTrigger(triggerMonitor.getTrigger().getKey());
int timesTriggered = 0;
int repeatCount = 0;
if (trigger instanceof SimpleTrigger) {
SimpleTrigger simpleTrigger = (SimpleTrigger) trigger;
timesTriggered = simpleTrigger.getTimesTriggered();
repeatCount = simpleTrigger.getRepeatCount();
} else if (trigger instanceof DailyTimeIntervalTrigger) {
DailyTimeIntervalTrigger dailyTrigger = (DailyTimeIntervalTrigger) trigger;
timesTriggered = dailyTrigger.getTimesTriggered();
repeatCount = dailyTrigger.getRepeatCount();
}
TriggerProgress progress = new TriggerProgress();
Trigger jobTrigger = triggerMonitor.getTrigger();
if (jobTrigger != null && jobTrigger.getJobKey() != null) {
progress.setJobKey(jobTrigger.getJobKey().getName());
progress.setJobClass(jobTrigger.getClass().getSimpleName());
progress.setTimesTriggered(jobTrigger.getTimesTriggered());
progress.setRepeatCount(jobTrigger.getRepeatCount() + 1);
progress.setTimesTriggered(timesTriggered);
progress.setRepeatCount(repeatCount + 1);
progress.setFinalFireTime(jobTrigger.getFinalFireTime());
progress.setNextFireTime(jobTrigger.getNextFireTime());
progress.setPreviousFireTime(jobTrigger.getPreviousFireTime());

View File

@@ -21,6 +21,8 @@ import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
import it.fabioformosa.quartzmanager.jobs.SampleJob;
import it.fabioformosa.quartzmanager.scheduler.AutowiringSpringBeanJobFactory;
import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor;
import it.fabioformosa.quartzmanager.scheduler.TriggerMonitorImpl;
@Configuration
@ConditionalOnProperty(name = "quartz.enabled")
@@ -45,6 +47,13 @@ public class SchedulerConfig {
return factoryBean;
}
@Bean(name = "triggerMonitor")
public TriggerMonitor createTriggerMonitor(@Qualifier("jobTrigger") Trigger trigger) {
TriggerMonitor triggerMonitor = new TriggerMonitorImpl();
triggerMonitor.setTrigger(trigger);
return triggerMonitor;
}
@Bean
public JobDetailFactoryBean jobDetail() {
return createJobDetail(SampleJob.class);

View File

@@ -2,6 +2,7 @@ package it.fabioformosa.quartzmanager.controllers;
import javax.annotation.Resource;
import org.quartz.DailyTimeIntervalTrigger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
@@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
import it.fabioformosa.quartzmanager.dto.SchedulerConfigParam;
import it.fabioformosa.quartzmanager.dto.TriggerProgress;
import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor;
@RestController
@RequestMapping("/scheduler")
@@ -32,8 +34,9 @@ public class SchedulerController {
private Scheduler scheduler;
@Resource
private SimpleTrigger jobTrigger = null;
private TriggerMonitor triggerMonitor;
@SuppressWarnings("unused")
private long fromMillsIntervalToTriggerPerDay(long repeatIntervalInMills) {
return (int) Math.ceil(MILLS_IN_A_DAY / repeatIntervalInMills);
}
@@ -42,7 +45,6 @@ public class SchedulerController {
return (int) Math.ceil(Long.valueOf(MILLS_IN_A_DAY) / triggerPerDay); //with ceil the triggerPerDay is a max value
}
@SuppressWarnings("unused")
private int fromTriggerPerDayToSecInterval(long triggerPerDay) {
return (int) Math.ceil(Long.valueOf(SEC_IN_A_DAY) / triggerPerDay);
}
@@ -50,16 +52,31 @@ public class SchedulerController {
@RequestMapping(value = "/config", method = RequestMethod.GET)
public SchedulerConfigParam getConfig() {
SchedulerConfigParam config = new SchedulerConfigParam();
config.setMaxCount(jobTrigger.getRepeatCount() + 1);
long repeatIntervalInMills = jobTrigger.getRepeatInterval();
config.setTriggerPerDay(fromMillsIntervalToTriggerPerDay(repeatIntervalInMills));
int maxCount = 0;
long repeatIntervalInMills = 0;
if (triggerMonitor.getTrigger() instanceof SimpleTrigger) {
SimpleTrigger simpleTrigger = (SimpleTrigger) triggerMonitor.getTrigger();
maxCount = simpleTrigger.getRepeatCount() + 1;
repeatIntervalInMills = fromTriggerPerDayToMillSecInterval(simpleTrigger.getRepeatInterval());
} else if (triggerMonitor.getTrigger() instanceof DailyTimeIntervalTrigger) {
DailyTimeIntervalTrigger dailyTimeIntervalTrigger = (DailyTimeIntervalTrigger) triggerMonitor
.getTrigger();
maxCount = dailyTimeIntervalTrigger.getRepeatCount() + 1;
repeatIntervalInMills = fromTriggerPerDayToSecInterval(
dailyTimeIntervalTrigger.getRepeatInterval());
}
config.setMaxCount(maxCount);
config.setTriggerPerDay(repeatIntervalInMills);
return config;
}
@RequestMapping("/progress")
public TriggerProgress getProgressInfo() throws SchedulerException {
SimpleTriggerImpl jobTrigger = ((SimpleTriggerImpl) scheduler.getTrigger(this.jobTrigger.getKey()));
SimpleTriggerImpl jobTrigger = ((SimpleTriggerImpl) scheduler
.getTrigger(triggerMonitor.getTrigger().getKey()));
TriggerProgress progress = new TriggerProgress();
if (jobTrigger != null && jobTrigger.getJobKey() != null) {
@@ -83,15 +100,16 @@ public class SchedulerController {
public SchedulerConfigParam postConfig(@RequestBody SchedulerConfigParam config)
throws SchedulerException {
TriggerBuilder<SimpleTrigger> triggerBuilder = jobTrigger.getTriggerBuilder();
SimpleTrigger trigger = (SimpleTrigger) triggerMonitor.getTrigger();
TriggerBuilder<SimpleTrigger> triggerBuilder = trigger.getTriggerBuilder();
int intervalInSeconds = fromTriggerPerDayToMillSecInterval(config.getTriggerPerDay());
Trigger newTrigger = triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(intervalInSeconds).withRepeatCount(config.getMaxCount() - 1))
.build();
scheduler.rescheduleJob(jobTrigger.getKey(), newTrigger);
jobTrigger = (SimpleTrigger) newTrigger;
scheduler.rescheduleJob(triggerMonitor.getTrigger().getKey(), newTrigger);
triggerMonitor.setTrigger(newTrigger);
return config;
}

View File

@@ -0,0 +1,11 @@
package it.fabioformosa.quartzmanager.scheduler;
import org.quartz.Trigger;
public interface TriggerMonitor {
void setTrigger(Trigger trigger);
Trigger getTrigger();
}

View File

@@ -0,0 +1,19 @@
package it.fabioformosa.quartzmanager.scheduler;
import org.quartz.Trigger;
public class TriggerMonitorImpl implements TriggerMonitor {
private Trigger trigger;
@Override
public Trigger getTrigger() {
return trigger;
}
@Override
public void setTrigger(Trigger trigger) {
this.trigger = trigger;
}
}