package hudson.plugins.systemloadaverage_monitor;
import hudson.Extension;
import hudson.model.Computer;
import hudson.model.Hudson;
import hudson.node_monitors.AbstractNodeMonitorDescriptor;
import hudson.node_monitors.NodeMonitor;
import hudson.remoting.Callable;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;
/**
* Monitors the system load average to this slave (unix slaves only).
* @author Stefan Brausch
*/
/**
* This class provides an additional SystemLoadAverage column in the node page.
* It may only be seen by administrators.
*/
public class SystemLoadAverageMonitor extends NodeMonitor {
/** {@inheritDoc} */
@Override
public final String getColumnCaption() {
// Hide this column from non-admins
return Hudson.getInstance().hasPermission(Hudson.ADMINISTER) ? super
.getColumnCaption() : null;
}
/**
* Descriptor for the Monitor.
*/
@Extension
public static final AbstractNodeMonitorDescriptor<String> DESCRIPTOR = new AbstractNodeMonitorDescriptor<String>() {
/** {@inheritDoc} */
protected String monitor(Computer c) throws IOException,
InterruptedException {
return c.getChannel().call(new MonitorTask());
}
/** {@inheritDoc} */
public SystemLoadAverageMonitor newInstance(StaplerRequest req, JSONObject formData) throws FormException {
return new SystemLoadAverageMonitor();
}
/** {@inheritDoc} */
public String getDisplayName() {
return "System Load Average";
}
};
/**
* Task which returns the SystemLoadAverage.
*/
static final class MonitorTask implements Callable<String, RuntimeException> {
private static final long serialVersionUID = 1L;
/**
* Detect the System Load Average.
*/
public String call() {
final OperatingSystemMXBean opsysMXbean = ManagementFactory
.getOperatingSystemMXBean();
return String.format("%04.1f", opsysMXbean.getSystemLoadAverage());
}
}
}