package org.jenkinsci.plugins.parameterizedschedular;
import hudson.Extension;
import hudson.model.PeriodicWork;
import hudson.model.AbstractProject;
import hudson.triggers.Trigger;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import jenkins.model.Jenkins;
@Extension
public class Cron extends PeriodicWork {
private static final Logger LOGGER = Logger.getLogger(Cron.class.getName());
@Override
public long getRecurrencePeriod() {
long period = TimeUnit.MINUTES.toMillis(1);
LOGGER.warning("period set to " + period);
return period;
}
@Override
protected void doRun() throws Exception {
LOGGER.finer("dorun-run");
checkTriggers(new GregorianCalendar());
}
private void checkTriggers(Calendar calendar) {
Jenkins instance = Jenkins.getInstance();
for (AbstractProject<?, ?> project : instance.getAllItems(AbstractProject.class)) {
for (Trigger<?> trigger : project.getTriggers().values()) {
if (trigger instanceof ParameterizedTimerTrigger) {
LOGGER.fine("cron checking " + project.getName());
ParameterizedTimerTrigger ptTrigger = (ParameterizedTimerTrigger) trigger;
try {
ptTrigger.checkCronTabsAndRun(calendar);
} catch (Throwable e) {
// t.run() is a plugin, and some of them throw RuntimeException and other things.
// don't let that cancel the polling activity. report and move on.
LOGGER.log(Level.WARNING,
trigger.getClass().getName() + ".run() failed for " + project.getName(), e);
}
}
}
}
}
}