All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.diagnosis.HudsonHomeDiskUsageChecker Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2004-2009, 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.diagnosis;

import hudson.Extension;
import hudson.model.Hudson;
import hudson.model.PeriodicWork;

import java.util.logging.Logger;

/**
 * Periodically checks the disk usage of HUDSON_HOME, and activate
 * {@link HudsonHomeDiskUsageMonitor} if necessary.
 *
 * @author Kohsuke Kawaguchi
 */
@Extension
public class HudsonHomeDiskUsageChecker extends PeriodicWork {

    public long getRecurrencePeriod() {
        return HOUR;
    }

    protected void doRun() {
        try {
            long free = Hudson.getInstance().getRootDir().getUsableSpace();
            long total = Hudson.getInstance().getRootDir().getTotalSpace();
            if (free <= 0 || total <= 0) {
                // information unavailable. pointless to try.
                LOGGER.info("HUDSON_HOME disk usage information isn't available. aborting to monitor");
                cancel();
                return;
            }

            LOGGER.fine("Monitoring disk usage of HUDSON_HOME. total=" + total + " free=" + free);


            // 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 < FREE_SPACE_THRESHOLD);
        } catch (LinkageError _) {
            // pre Mustang
            LOGGER.info("Not on JDK6. Cannot monitor HUDSON_HOME disk usage");
            cancel();
        }
    }
    private static final Logger LOGGER = Logger.getLogger(HudsonHomeDiskUsageChecker.class.getName());
    /**
     * Gets the minimum amount of space to check for, with a default of 1GB
     */
    public static long FREE_SPACE_THRESHOLD = Long.getLong(
            HudsonHomeDiskUsageChecker.class.getName() + ".freeSpaceThreshold",
            1024L * 1024 * 1024);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy