package hudson.plugins.network_monitor;
import hudson.Extension;
import hudson.model.Computer;
import hudson.node_monitors.AbstractNodeMonitorDescriptor;
import hudson.node_monitors.NodeMonitor;
import hudson.remoting.Callable;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.List;
/**
* @author Kohsuke Kawaguchi
*/
public class NameResolutionMonitor extends NodeMonitor {
@Override
public AbstractNodeMonitorDescriptor<String> getDescriptor() {
return DESCRIPTOR;
}
@Extension
public static final AbstractNodeMonitorDescriptor<String> DESCRIPTOR = new AbstractNodeMonitorDescriptor<String>(NameResolutionMonitor.class) {
protected String monitor(Computer c) throws IOException, InterruptedException {
// TODO: update core to allow NodeMonitors to contribute config.
// TODO: define UI by using it
return c.getChannel().call(new MonitorTask(Arrays.asList("www.sun.com","www.google.com","kohsuke.sfbay")));
}
@Override
public NameResolutionMonitor newInstance(StaplerRequest req, JSONObject formData) throws FormException {
return new NameResolutionMonitor();
}
public String getDisplayName() {
return "nslookup";
}
};
/**
* Checks if the given host names resolve.
*/
private static class MonitorTask implements Callable<String,RuntimeException> {
/**
* Host names to resolve.
*/
private final List<String> names;
private MonitorTask(List<String> names) {
this.names = names;
}
public String call() {
for (String name : names)
try {
InetAddress.getByName(name);
} catch (UnknownHostException e) {
return name;
}
return null; // all green ... I mean, all blue!
}
private static final long serialVersionUID = 1L;
}
}