Index: src/main/java/hudson/diagnosis/HudsonHomeDiskUsageChecker.java =================================================================== --- src/main/java/hudson/diagnosis/HudsonHomeDiskUsageChecker.java (revision 23683) +++ src/main/java/hudson/diagnosis/HudsonHomeDiskUsageChecker.java (working copy) @@ -56,10 +56,15 @@ LOGGER.fine("Monitoring disk usage of HUDSON_HOME. total="+total+" free="+free); - // if it's more than 90% full and less than 1GB, activate + // Get the minimum amount of space to check for, with a default of 1GB + long freeSpaceTheshold = Long.getLong( + HudsonHomeDiskUsageChecker.class.getName() + ".freeSpaceTheshold", + Long.valueOf(1073741824L)); + + // if it's more than 90% full and less than the minimum, activate // it's AND and not OR so that small Hudson home won't get a warning, // and similarly, if you have a 1TB disk, you don't get a warning when you still have 100GB to go. - HudsonHomeDiskUsageMonitor.get().activated = (total/free>10 && free<1024L*1024*1024); + HudsonHomeDiskUsageMonitor.get().activated = (total/free>10 && free1024L*1024*1024; + + /** + * Sets whether this disk space amount should be treated as outside + * the acceptable conditions or not. + */ + protected void setTriggered(boolean triggered) { + this.triggered = triggered; } - - private static final long serialVersionUID = 1L; + + private static final long serialVersionUID = 2L; } protected DiskSpace monitor(Computer c) throws IOException, InterruptedException { - DiskSpace size = getFreeSpace(c); - if(size!=null && !size.moreThanGB() && markOffline(c,size)) - LOGGER.warning(Messages.DiskSpaceMonitor_MarkedOffline(c.getName())); - return size; + return getFreeSpace(c); } /** @@ -121,6 +123,4 @@ } private static final long serialVersionUID = 1L; } - - private static final Logger LOGGER = Logger.getLogger(DiskSpaceMonitor.class.getName()); } Index: src/main/java/hudson/node_monitors/TemporarySpaceMonitor.java =================================================================== --- src/main/java/hudson/node_monitors/TemporarySpaceMonitor.java (revision 23683) +++ src/main/java/hudson/node_monitors/TemporarySpaceMonitor.java (working copy) @@ -31,12 +31,13 @@ import hudson.Functions; import hudson.remoting.VirtualChannel; import hudson.FilePath.FileCallable; -import org.kohsuke.stapler.StaplerRequest; + +import org.kohsuke.stapler.DataBoundConstructor; import org.jvnet.animal_sniffer.IgnoreJRERequirement; -import net.sf.json.JSONObject; import java.io.IOException; import java.io.File; +import java.util.logging.Logger; /** * Monitors the disk space of "/tmp". @@ -44,6 +45,17 @@ * @author Kohsuke Kawaguchi */ public class TemporarySpaceMonitor extends NodeMonitor { + /** + * The free space threshold, in bytes, below which the node + * monitor will be triggered. + */ + public final long freeSpaceTheshold; + + @DataBoundConstructor + public TemporarySpaceMonitor(long freeSpaceTheshold) { + this.freeSpaceTheshold = freeSpaceTheshold; + } + public DiskSpace getFreeSpace(Computer c) { return DESCRIPTOR.get(c); } @@ -59,11 +71,6 @@ return Messages.TemporarySpaceMonitor_DisplayName(); } - @Override - public NodeMonitor newInstance(StaplerRequest req, JSONObject formData) throws FormException { - return new TemporarySpaceMonitor(); - } - protected DiskSpace getFreeSpace(Computer c) throws IOException, InterruptedException { FilePath p = c.getNode().getRootPath(); if(p==null) return null; @@ -77,6 +84,20 @@ if(Functions.isMustangOrAbove()) return DESCRIPTOR; return null; } + + @Override + public Object data(Computer c) { + DiskSpace size = (DiskSpace) super.data(c); + if(size!=null && size.size < freeSpaceTheshold) { + size.setTriggered(true); + if(DESCRIPTOR.markOffline(c,size)) { + LOGGER.warning(Messages.DiskSpaceMonitor_MarkedOffline(c.getName())); + } + } + return size; + } + + private static final Logger LOGGER = Logger.getLogger(TemporarySpaceMonitor.class.getName()); protected static final class GetTempSpace implements FileCallable { @IgnoreJRERequirement Index: src/main/resources/hudson/node_monitors/DiskSpaceMonitor/config.jelly =================================================================== --- src/main/resources/hudson/node_monitors/DiskSpaceMonitor/config.jelly (revision 0) +++ src/main/resources/hudson/node_monitors/DiskSpaceMonitor/config.jelly (revision 0) @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file Index: src/main/resources/hudson/node_monitors/DiskSpaceMonitor/help-freeSpaceTheshold.html =================================================================== --- src/main/resources/hudson/node_monitors/DiskSpaceMonitor/help-freeSpaceTheshold.html (revision 0) +++ src/main/resources/hudson/node_monitors/DiskSpaceMonitor/help-freeSpaceTheshold.html (revision 0) @@ -0,0 +1,5 @@ +
+ This option configures the amount of minimum amount of free disk space, in + bytes, desired for a slave's proper operation. If a slave is found to + have less free disk space than this amount, it will be marked offline. +
\ No newline at end of file Index: src/main/resources/hudson/node_monitors/TemporarySpaceMonitor/config.jelly =================================================================== --- src/main/resources/hudson/node_monitors/TemporarySpaceMonitor/config.jelly (revision 0) +++ src/main/resources/hudson/node_monitors/TemporarySpaceMonitor/config.jelly (revision 0) @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file Index: src/main/resources/hudson/node_monitors/TemporarySpaceMonitor/help-freeSpaceTheshold.html =================================================================== --- src/main/resources/hudson/node_monitors/TemporarySpaceMonitor/help-freeSpaceTheshold.html (revision 0) +++ src/main/resources/hudson/node_monitors/TemporarySpaceMonitor/help-freeSpaceTheshold.html (revision 0) @@ -0,0 +1,5 @@ +
+ This option configures the amount of minimum amount of free disk space, in + bytes, desired for a slave's proper operation. If a slave is found to + have less free disk space than this amount, it will be marked offline. +
\ No newline at end of file