package org.easysoa.startup; import java.io.IOException; import java.io.InputStream; import java.net.ConnectException; import java.net.URL; import java.net.URLConnection; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import org.easysoa.EasySOAConstants; /** * * @author mkalam-alami * */ public class StartupMonitor { private static final String EASYSOA_URL = "http://localhost:8083/easysoa"; private static final int STARTUP_TIMEOUT = 180000; public static void main(String[] args) throws IOException { // Port list Map<Integer, String> portsToCheck = new ConcurrentHashMap<Integer, String>(); portsToCheck.put(EasySOAConstants.WEB_PORT, "EasySOA home"); portsToCheck.put(EasySOAConstants.HTTP_DISCOVERY_PROXY_PORT, "HTTP Monitoring proxy"); portsToCheck.put(EasySOAConstants.HTML_FORM_GENERATOR_PORT, "UI Scaffolding proxy"); portsToCheck.put(EasySOAConstants.PAF_SERVICES_PORT, "Pure Air Flowers demo"); portsToCheck.put(EasySOAConstants.TRIP_SERVICES_PORT, "Smart Travel demo"); portsToCheck.put(EasySOAConstants.TRIP_BACKUP_SERVICES_PORT, "Smart Travel demo (services backup)"); portsToCheck.put(EasySOAConstants.NUXEO_PORT, "Service registry"); // Start-up list print("* Servers to be started"); for (Entry<Integer, String> entry : portsToCheck.entrySet()) { print(entry.getValue() + " (port " + entry.getKey() + ")"); } // Check loop long initialTime = System.currentTimeMillis(); int up = 0, total = portsToCheck.size(); print("\n* Checking servers..."); while (!portsToCheck.isEmpty() && System.currentTimeMillis() - initialTime < STARTUP_TIMEOUT) { for (Integer port : portsToCheck.keySet()) { if (isAvailable("http://localhost:" + port, 500, port == EasySOAConstants.NUXEO_PORT)) { String label = portsToCheck.remove(port); up++; print(label + " is up... (" + up + "/" + total + ")"); // Launch easysoa-web when Nuxeo is ready /* if (port == EasySOAConstants.NUXEO_PORT) { launchEasySOAWeb(); }*/ } if (System.currentTimeMillis() - initialTime > STARTUP_TIMEOUT) { break; } trySleep(300); } } // Feedback if (portsToCheck.isEmpty()) { print("Everything is ready!"); } else { print("Everything's not ready yet, but let's get started anyway."); trySleep(1500); } // Open browser try { BrowserHelper.openBrowser(EASYSOA_URL); } catch (Exception e) { print("\nPlease browse to '" + EASYSOA_URL +"' to get started with the demo."); } } /*private static void launchEasySOAWeb() throws IOException { String command = "./web/start-web.sh"; if ("Windows".equals(System.getProperty("os.name"))) { command = windowsify(command); } ProcessBuilder pb = new ProcessBuilder(command); if (System.getProperty("user.dir").endsWith("easysoa-distribution-startup-monitor")) { pb.directory(new File(System.getProperty("user.dir").replace("easysoa-distribution-startup-monitor", "easysoa"))); } Process start; try { start = pb.start(); Thread.sleep(1000); BufferedReader bufferedReader = new java.io.BufferedReader(new java.io.InputStreamReader(start.getInputStream())); while (bufferedReader.ready()) { print(bufferedReader.readLine()); } } catch (Exception e) { throw new IOException("Failed to start easysoa-web (command: " + command + ")", e); } } private static String windowsify(String command) { String result = command.replace(".sh", ".bat"); result = result.replaceFirst("\\.\\/", ""); return result; }*/ private static void trySleep(int ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { // Nothing } } /** * * @param url * @param timeout in ms * @return */ public static boolean isAvailable(String url, int timeout, boolean expectRequestSuccess) { try { URLConnection connection = new URL(url).openConnection(); connection.setConnectTimeout(timeout); connection.setReadTimeout(timeout); connection.connect(); InputStream is = connection.getInputStream(); is.close(); } catch (ConnectException e) { return false; } catch (IOException e) { return !expectRequestSuccess; } return true; } public static void print(String string) { System.out.println(string); } }