/******************************************************************************* * * Copyright (c) 2004-2010 Oracle Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * *******************************************************************************/ package hudson.node_monitors; import hudson.model.Computer; import hudson.node_monitors.DiskSpaceMonitorDescriptor.DiskSpace; import org.kohsuke.stapler.DataBoundConstructor; import java.text.ParseException; import java.util.logging.Logger; /** * @author Kohsuke Kawaguchi */ public abstract class AbstractDiskSpaceMonitor extends NodeMonitor { /** * The free space threshold, below which the node monitor will be triggered. * This is a human readable string representation as entered by the user, so * that we can retain the original notation. */ public final String freeSpaceThreshold; @DataBoundConstructor public AbstractDiskSpaceMonitor(String threshold) throws ParseException { this.freeSpaceThreshold = threshold; DiskSpace.parse(threshold); // make sure it parses } public AbstractDiskSpaceMonitor() { this.freeSpaceThreshold = "1GB"; } public long getThresholdBytes() { if (freeSpaceThreshold == null) { return DEFAULT_THRESHOLD; // backward compatibility with the data format that didn't have 'freeSpaceThreshold' } try { return DiskSpace.parse(freeSpaceThreshold).size; } catch (ParseException e) { return DEFAULT_THRESHOLD; } } @Override public Object data(Computer c) { DiskSpace size = (DiskSpace) super.data(c); if (size != null && size.size < getThresholdBytes()) { size.setTriggered(true); if (getDescriptor().markOffline(c, size)) { LOGGER.warning(Messages.DiskSpaceMonitor_MarkedOffline(c.getName())); } } return size; } private static final Logger LOGGER = Logger.getLogger(AbstractDiskSpaceMonitor.class.getName()); private static final long DEFAULT_THRESHOLD = 1024L * 1024 * 1024; }