BROOKLYN-484: fix restart() - launch checks log file
diff --git a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java
index cf22177..747517b 100644
--- a/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java
+++ b/software/messaging/src/main/java/org/apache/brooklyn/entity/messaging/rabbit/RabbitSshDriver.java
@@ -44,7 +44,9 @@
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.net.Networking;
 import org.apache.brooklyn.util.net.Urls;
+import org.apache.brooklyn.util.ssh.BashCommands;
 import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.Duration;
 
 /**
  * TODO javadoc
@@ -138,16 +140,10 @@
     public void launch() {
         newScript(MutableMap.of("usePidFile", false), LAUNCHING)
             .body.append(
-                "rm console-out.log || true",
+                "mv console-out.log console-out-$(date +\"%Y%m%d.%H%M.%S\").log || true",
                 "nohup ./sbin/rabbitmq-server > console-out.log 2> console-err.log &",
                 "./sbin/rabbitmqctl wait ${RABBITMQ_PID_FILE}",
-                "for i in {1..60}\n" +
-                    "do\n" +
-                     "    grep 'Starting broker... completed' console-out.log && exit\n" +
-                     "    sleep 1\n" +
-                     "done",
-                "echo \"Couldn't determine if rabbitmq-server is running\"",
-                "exit 1"
+                BashCommands.waitForFileContents("console-out.log", "Starting broker... completed", Duration.ONE_MINUTE, true)
             ).execute();
     }
 
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
index 70d6a14..70eaff0 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss6SshDriver.java
@@ -37,6 +37,7 @@
 import org.apache.brooklyn.util.net.Networking;
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.time.Duration;
 
 public class JBoss6SshDriver extends JavaWebAppSshDriver implements JBoss6Driver {
 
@@ -144,17 +145,13 @@
                 .body.append(
                         format("export JBOSS_CLASSPATH=%s/lib/jboss-logmanager.jar",getExpandedInstallDir()),
                         format("export JBOSS_PIDFILE=%s/%s", getRunDir(), PID_FILENAME),
+                        "mv "+getRunDir()+"/console "+getRunDir()+"/console-$(date +\"%Y%m%d.%H%M.%S\") || true",
                         format("%s/bin/run.sh -Djboss.service.binding.set=%s -Djboss.server.base.dir=$RUN_DIR/server ",getExpandedInstallDir(),PORT_GROUP_NAME) +
                                 format("-Djboss.server.base.url=file://$RUN_DIR/server -Djboss.messaging.ServerPeerID=%s ",entity.getId())+
-                                format("-Djboss.boot.server.log.dir=%s/server/%s/log ",getRunDir(),SERVER_TYPE) +
-                                format("-b %s %s -c %s ", getBindAddress(), clusterArg,SERVER_TYPE) +
+                                format("-Djboss.boot.server.log.dir=%s/server/%s/log ", getRunDir(), SERVER_TYPE) +
+                                format("-b %s %s -c %s ", getBindAddress(), clusterArg, SERVER_TYPE) +
                                 ">>$RUN_DIR/console 2>&1 </dev/null &",
-                        "for i in {1..10}\n" +
-                                "do\n" +
-                                "    grep -i 'starting' "+getRunDir()+"/console && exit\n" +
-                                "    sleep 1\n" +
-                                "done\n" +
-                                "echo \"Couldn't determine if process is running (console output does not contain 'starting'); continuing but may subsequently fail\""
+                        BashCommands.waitForFileContents(getRunDir()+"/console", "starting", Duration.TEN_SECONDS, false)
                     )
                 .execute();
     }
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
index 5fc1e86..0c4a34a 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java
@@ -37,6 +37,7 @@
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.ssh.BashCommands;
 import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.Duration;
 
 import com.google.common.base.Charsets;
 import com.google.common.base.Preconditions;
@@ -206,6 +207,7 @@
                         "export LAUNCH_JBOSS_IN_BACKGROUND=true",
                         format("export JBOSS_HOME=%s", getExpandedInstallDir()),
                         format("export JBOSS_PIDFILE=%s/%s", getRunDir(), PID_FILENAME),
+                        "mv "+getRunDir()+"/console "+getRunDir()+"/console-$(date +\"%Y%m%d.%H%M.%S\") || true",
                         format("%s/bin/%s.sh ", getExpandedInstallDir(), SERVER_TYPE) +
                                 format("--server-config %s ", CONFIG_FILE) +
                                 format("-Djboss.server.base.dir=%s/%s ", getRunDir(), SERVER_TYPE) +
@@ -213,12 +215,7 @@
                                 "-Djava.net.preferIPv4Stack=true " +
                                 "-Djava.net.preferIPv6Addresses=false " +
                                 format(" >> %s/console 2>&1 </dev/null &", getRunDir()),
-                        "for i in {1..10}\n" +
-                                "do\n" +
-                                "    grep -i 'starting' "+getRunDir()+"/console && exit\n" +
-                                "    sleep 1\n" +
-                                "done\n" +
-                                "echo \"Couldn't determine if process is running (console output does not contain 'starting'); continuing but may subsequently fail\""
+                        BashCommands.waitForFileContents("console", "starting", Duration.TEN_SECONDS, false)
                     )
                 .execute();
     }
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
index f8499e4..1a75d8b 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jetty/Jetty6SshDriver.java
@@ -32,6 +32,7 @@
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.ssh.BashCommands;
 import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.Duration;
 
 public class Jetty6SshDriver extends JavaWebAppSshDriver implements Jetty6Driver {
 
@@ -98,19 +99,18 @@
 
     @Override
     public void launch() {
-        Map ports = MutableMap.of("httpPort", getHttpPort(), "jmxPort", getJmxPort(), "rmiRegistryPort", getRmiRegistryPort());
+        MutableMap<String, Integer> ports = MutableMap.of("httpPort", getHttpPort(), "jmxPort", getJmxPort(), "rmiRegistryPort", getRmiRegistryPort());
         Networking.checkPortsValid(ports);
 
         newScript(MutableMap.of(USE_PID_FILE, false), LAUNCHING)
                 .body.append(
+                        "mv "+getLogFileLocation()+" "+getLogFileLocation()+"-$(date +\"%Y%m%d.%H%M.%S\") || true",
                         "./bin/jetty.sh start jetty-brooklyn.xml jetty.xml jetty-logging.xml jetty-stats.xml " +
                                 (Strings.isEmpty(getConfigXmlTemplateUrl()) ? "" : "jetty-custom.xml ") +
                                 ">> $RUN_DIR/console 2>&1 < /dev/null",
-                        "for i in {1..10} ; do\n" +
-                        "    if [ -s "+getLogFileLocation()+" ]; then exit; fi\n" +
-                        "    sleep 1\n" +
-                        "done",
-                        "echo \"Couldn't determine if jetty-server is running (log file is still empty); continuing but may subsequently fail\""
+                        BashCommands.waitForFileExists(getLogFileLocation(), Duration.TEN_SECONDS, false),
+                        "sleep 5",
+                        "cat $RUN_DIR/console"
                     )
                 .execute();
         log.debug("launched jetty");
diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
index 5214b28..eeb88a2 100644
--- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
+++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/tomcat/TomcatSshDriver.java
@@ -35,6 +35,7 @@
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.ssh.BashCommands;
 import org.apache.brooklyn.util.text.StringEscapes.BashStringEscapes;
+import org.apache.brooklyn.util.time.Duration;
 
 public class TomcatSshDriver extends JavaWebAppSshDriver implements TomcatDriver {
 
@@ -91,13 +92,9 @@
         // so the process failed to start.
         newScript(MutableMap.of(USE_PID_FILE, false), LAUNCHING)
                 .body.append(
+                        "mv "+getLogFileLocation()+" "+getLogFileLocation()+"-$(date +\"%Y%m%d.%H%M.%S\").log || true",
                         format("%s/bin/startup.sh >>$RUN/console 2>&1 </dev/null",getExpandedInstallDir()),
-                        "for i in {1..10}\n" +
-                        "do\n" +
-                        "    if [ -s "+getLogFileLocation()+" ]; then exit; fi\n" +
-                        "    sleep 1\n" +
-                        "done\n" +
-                        "echo \"Couldn't determine if tomcat-server is running (logs/catalina.out is still empty); continuing but may subsequently fail\""
+                        BashCommands.waitForFileExists(getLogFileLocation(), Duration.TEN_SECONDS, false)
                     )
                 .execute();
     }