package hudson.node_monitors; import hudson.Extension; import hudson.model.Computer; import hudson.model.TaskListener; import hudson.slaves.ComputerListener; import hudson.util.Futures; import jenkins.model.Jenkins; import java.io.IOException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import jenkins.util.Timer; /** * When an agent is connected, redo the node monitoring. * * @author Kohsuke Kawaguchi */ @Extension public class NodeMonitorUpdater extends ComputerListener { private static final Runnable MONITOR_UPDATER = new Runnable() { @Override public void run() { for (NodeMonitor nm : Jenkins.getInstance().getComputer().getMonitors()) { nm.triggerUpdate(); } } }; private Future<?> future = Futures.precomputed(null); /** * Triggers the update with 5 seconds quiet period, to avoid triggering data check too often * when multiple agents become online at about the same time. */ @Override public void onOnline(Computer c, TaskListener listener) throws IOException, InterruptedException { synchronized(this) { future.cancel(false); future = Timer.get().schedule(MONITOR_UPDATER, 5, TimeUnit.SECONDS); } } }