package hudson.plugins.build_timeout.impl; import static hudson.plugins.build_timeout.BuildTimeoutWrapper.MINIMUM_TIMEOUT_MILLISECONDS; import hudson.Extension; import hudson.model.AbstractBuild; import hudson.model.BuildListener; import hudson.model.Descriptor; import hudson.plugins.build_timeout.BuildTimeOutStrategy; import hudson.plugins.build_timeout.BuildTimeOutStrategyDescriptor; import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; import org.kohsuke.stapler.DataBoundConstructor; import java.io.IOException; /** * If the build took longer than <tt>timeoutMinutes</tt> amount of minutes, it will be terminated. */ public class AbsoluteTimeOutStrategy extends BuildTimeOutStrategy { private final String timeoutMinutes; /** * @return minutes to timeout. */ public String getTimeoutMinutes() { return timeoutMinutes; } @Deprecated public AbsoluteTimeOutStrategy(int timeoutMinutes) { this.timeoutMinutes = Integer.toString(Math.max((int) (MINIMUM_TIMEOUT_MILLISECONDS / MINUTES), timeoutMinutes)); } @DataBoundConstructor public AbsoluteTimeOutStrategy(String timeoutMinutes) { this.timeoutMinutes = timeoutMinutes; } @Override public long getTimeOut(AbstractBuild<?,?> build, BuildListener listener) throws InterruptedException, MacroEvaluationException, IOException { return MINUTES * Math.max((int) (MINIMUM_TIMEOUT_MILLISECONDS / MINUTES), Integer.parseInt( expandAll(build, listener, getTimeoutMinutes()))); } @Override public Descriptor<BuildTimeOutStrategy> getDescriptor() { return DESCRIPTOR; } @Extension(ordinal=100) // This is displayed at the top as the default public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); public static class DescriptorImpl extends BuildTimeOutStrategyDescriptor { @Override public String getDisplayName() { return Messages.AbsoluteTimeOutStrategy_DisplayName(); } @Override public boolean isApplicableAsBuildStep() { return true; } } }