Introduce httpd server manager
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 6 Jul 2008 13:13:58 +0000 (13:13 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 6 Jul 2008 13:13:58 +0000 (13:13 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1360 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/ManageableDeployedSystem.java [deleted file]
org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleDeployedSytemManager.java [deleted file]
org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleExecutables.java
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServer.java
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeployment.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeploymentData.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerManager.java [new file with mode: 0644]

diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/ManageableDeployedSystem.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/ManageableDeployedSystem.java
deleted file mode 100644 (file)
index a5c0e79..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.argeo.slc.core.deploy;
-
-public interface ManageableDeployedSystem extends DeployedSystem {
-       public void start();
-
-       public void stop();
-}
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleDeployedSytemManager.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleDeployedSytemManager.java
deleted file mode 100644 (file)
index 71483db..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.argeo.slc.core.deploy;
-
-public class SimpleDeployedSytemManager implements
-               DeployedSystemManager<ManageableDeployedSystem> {
-
-       private ManageableDeployedSystem deployedSystem;
-
-       public void setDeployedSystem(ManageableDeployedSystem deployedSystem) {
-               this.deployedSystem = deployedSystem;
-       }
-
-}
index afffc3c6c77e7d1c9c2fd6e869686712d303bb80..0998b520d87e07ff00eeae3c5e787376f8f0d823 100644 (file)
@@ -2,6 +2,7 @@ package org.argeo.slc.core.deploy;
 
 import java.io.File;
 import java.util.Map;
+import java.util.TreeMap;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -12,7 +13,7 @@ public class SimpleExecutables implements InstalledExecutables {
        private final static Log log = LogFactory.getLog(SimpleExecutables.class);
 
        private String baseDir;
-       private Map<String, String> paths;
+       private Map<String, String> paths = new TreeMap<String, String>();
 
        private Distribution distribution;
 
index cf223bf610c0bcf39895775d6c079ba2be57f37c..e9119a1de4afed46327a0022692202ec14077735 100644 (file)
@@ -1,17 +1,19 @@
 package org.argeo.slc.support.deploy;\r
 \r
-import java.io.File;\r
+import java.io.BufferedReader;\r
 import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.InputStreamReader;\r
 import java.net.URL;\r
 \r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
 import org.argeo.slc.core.SlcException;\r
 import org.argeo.slc.core.build.Distribution;\r
-import org.argeo.slc.core.deploy.DeploymentData;\r
-import org.argeo.slc.core.deploy.TargetData;\r
-import org.springframework.core.io.Resource;\r
 \r
 public class HttpdServer implements WebServer {\r
        private HttpdServerTargetData targetData;\r
+       private HttpdServerDeploymentData deploymentData;\r
 \r
        public URL getBaseUrl() {\r
                try {\r
@@ -32,9 +34,8 @@ public class HttpdServer implements WebServer {
                return null;\r
        }\r
 \r
-       public DeploymentData getDeploymentData() {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
+       public HttpdServerDeploymentData getDeploymentData() {\r
+               return deploymentData;\r
        }\r
 \r
        public HttpdServerTargetData getTargetData() {\r
@@ -45,4 +46,8 @@ public class HttpdServer implements WebServer {
                this.targetData = targetData;\r
        }\r
 \r
+       public void setDeploymentData(HttpdServerDeploymentData deploymentData) {\r
+               this.deploymentData = deploymentData;\r
+       }\r
+\r
 }\r
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeployment.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeployment.java
new file mode 100644 (file)
index 0000000..a8ebcb5
--- /dev/null
@@ -0,0 +1,39 @@
+package org.argeo.slc.support.deploy;
+
+import org.argeo.slc.core.build.Distribution;
+import org.argeo.slc.core.deploy.DeployedSystem;
+import org.argeo.slc.core.deploy.Deployment;
+import org.argeo.slc.core.deploy.DeploymentData;
+import org.argeo.slc.core.deploy.TargetData;
+
+public class HttpdServerDeployment implements Deployment {
+       private HttpdServerTargetData targetData;
+
+       @Override
+       public void execute() {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       public DeployedSystem getDeployedSystem() {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public void setDeploymentData(DeploymentData deploymentData) {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       public void setDistribution(Distribution distribution) {
+       }
+
+       @Override
+       public void setTargetData(TargetData targetData) {
+               this.targetData = (HttpdServerTargetData) targetData;
+       }
+
+}
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeploymentData.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeploymentData.java
new file mode 100644 (file)
index 0000000..8b187c5
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.slc.support.deploy;
+
+import org.argeo.slc.core.deploy.DeploymentData;
+
+public class HttpdServerDeploymentData implements DeploymentData{
+       private String configFile;
+
+       public String getConfigFile() {
+               return configFile;
+       }
+
+       public void setConfigFile(String configFile) {
+               this.configFile = configFile;
+       }
+
+}
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerManager.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerManager.java
new file mode 100644 (file)
index 0000000..29b3914
--- /dev/null
@@ -0,0 +1,78 @@
+package org.argeo.slc.support.deploy;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.core.SlcException;
+import org.argeo.slc.core.deploy.DeployedSystem;
+import org.argeo.slc.core.deploy.DeployedSystemManager;
+
+public class HttpdServerManager implements DeployedSystemManager<HttpdServer> {
+       private final static Log log = LogFactory.getLog(HttpdServerManager.class);
+
+       private HttpdServer httpdServer;
+
+       public void start() {
+               runProcessAsync(createCommandLine("start"));
+               log.info("Started httpd server with root "
+                               + httpdServer.getTargetData().getServerRoot());
+       }
+
+       public void stop() {
+               runProcessAsync(createCommandLine("stop"));
+               log.info("Stopped httpd server with root "
+                               + httpdServer.getTargetData().getServerRoot());
+       }
+
+       protected String[] createCommandLine(String action) {
+               String httpdPath = httpdServer.getTargetData().getExecutables()
+                               .getExecutablePath("httpd");
+               String[] cmd = { httpdPath, "-d",
+                               httpdServer.getTargetData().getServerRoot(), "-f",
+                               httpdServer.getDeploymentData().getConfigFile(), "-k", action };
+               if (log.isDebugEnabled())
+                       log.debug("Command line: " + Arrays.asList(cmd));
+               return cmd;
+       }
+
+       protected static void runProcessAsync(String... command) {
+               ProcessBuilder procBuilder = new ProcessBuilder(command);
+               procBuilder.redirectErrorStream(true);
+               try {
+                       Process proc = procBuilder.start();
+                       final InputStream in = proc.getInputStream();
+                       Thread logThread = new Thread() {
+
+                               @Override
+                               public void run() {
+                                       BufferedReader reader = new BufferedReader(
+                                                       new InputStreamReader(in));
+                                       String line = null;
+                                       try {
+                                               while ((line = reader.readLine()) != null)
+                                                       log.info(line);
+                                       } catch (IOException e) {
+                                               log.error("Failed to read stdout", e);
+                                       }
+                               }
+                       };
+
+                       logThread.start();
+               } catch (IOException e) {
+                       throw new SlcException("Could not run command", e);
+               }
+       }
+
+       @Override
+       public void setDeployedSystem(HttpdServer httpdServer) {
+               this.httpdServer = httpdServer;
+       }
+
+}