package org.jblooming.utilities; import org.jblooming.messaging.MailHelper; import org.jblooming.scheduler.ExecutableSupport; import org.jblooming.scheduler.JobLogData; import org.jblooming.scheduler.Parameter; import org.jblooming.tracer.Tracer; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; import java.util.Set; public class SiteAliveTester extends ExecutableSupport { @Parameter("[comma separated domains]") public String domainsSer; @Parameter("[comma separated emails]") public String emailsSer; @Parameter("[fromEmail]") public String fromEmail; public JobLogData run(JobLogData jobLogData) throws Exception { try { if (domainsSer != null && emailsSer != null) { Set<String> domains = StringUtilities.splitToSet(domainsSer, ","); Set<String> emails = StringUtilities.splitToSet(emailsSer, ","); for (String domain : domains) { try { if (!answersWithContent(domain)) throw new Exception(); } catch (Exception e) { MailHelper.sendPlainTextMail(fromEmail, emails, domain, domain + " could not be contacted at " + DateUtilities.dateAndHourToString(new Date())); } } } jobLogData.notes = jobLogData.notes + "SiteAliveTester executed on " + DateUtilities.dateAndHourToString(new Date()); } catch (Exception e) { Tracer.platformLogger.error("SiteAliveTester error", e); jobLogData.successfull = false; } return jobLogData; } private static boolean answersWithContent(String urlToCall) throws IOException { StringBuffer str = new StringBuffer(512); URL server = new URL(urlToCall); HttpURLConnection connection = (HttpURLConnection)server.openConnection(); connection.setReadTimeout(8*1000); connection.setDoInput( true ); connection.setDoOutput( true ); DataOutputStream output = new DataOutputStream( connection.getOutputStream() ); int queryLength = urlToCall.length(); output.writeBytes( urlToCall ); output.close(); DataInputStream input = new DataInputStream( connection.getInputStream() ); for( int c = input.read(); c != -1; c = input.read() ) { str.append((char)c) ; } input.close(); return str.length()>0; } }