From b85a79ebde5ebc901358d0663944faedc26efc1e Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 6 Jul 2008 13:13:58 +0000 Subject: [PATCH] Introduce httpd server manager git-svn-id: https://svn.argeo.org/slc/trunk@1360 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../core/deploy/ManageableDeployedSystem.java | 7 -- .../deploy/SimpleDeployedSytemManager.java | 12 --- .../slc/core/deploy/SimpleExecutables.java | 3 +- .../argeo/slc/support/deploy/HttpdServer.java | 19 +++-- .../support/deploy/HttpdServerDeployment.java | 39 ++++++++++ .../deploy/HttpdServerDeploymentData.java | 16 ++++ .../support/deploy/HttpdServerManager.java | 78 +++++++++++++++++++ 7 files changed, 147 insertions(+), 27 deletions(-) delete mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/ManageableDeployedSystem.java delete mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleDeployedSytemManager.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeployment.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeploymentData.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerManager.java 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 index a5c0e79ba..000000000 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/ManageableDeployedSystem.java +++ /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 index 71483dbd8..000000000 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleDeployedSytemManager.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.argeo.slc.core.deploy; - -public class SimpleDeployedSytemManager implements - DeployedSystemManager { - - private ManageableDeployedSystem deployedSystem; - - public void setDeployedSystem(ManageableDeployedSystem deployedSystem) { - this.deployedSystem = deployedSystem; - } - -} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleExecutables.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleExecutables.java index afffc3c6c..0998b520d 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleExecutables.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/SimpleExecutables.java @@ -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 paths; + private Map paths = new TreeMap(); private Distribution distribution; diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServer.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServer.java index cf223bf61..e9119a1de 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServer.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServer.java @@ -1,17 +1,19 @@ package org.argeo.slc.support.deploy; -import java.io.File; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URL; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.slc.core.SlcException; import org.argeo.slc.core.build.Distribution; -import org.argeo.slc.core.deploy.DeploymentData; -import org.argeo.slc.core.deploy.TargetData; -import org.springframework.core.io.Resource; public class HttpdServer implements WebServer { private HttpdServerTargetData targetData; + private HttpdServerDeploymentData deploymentData; public URL getBaseUrl() { try { @@ -32,9 +34,8 @@ public class HttpdServer implements WebServer { return null; } - public DeploymentData getDeploymentData() { - // TODO Auto-generated method stub - return null; + public HttpdServerDeploymentData getDeploymentData() { + return deploymentData; } public HttpdServerTargetData getTargetData() { @@ -45,4 +46,8 @@ public class HttpdServer implements WebServer { this.targetData = targetData; } + public void setDeploymentData(HttpdServerDeploymentData deploymentData) { + this.deploymentData = deploymentData; + } + } 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 index 000000000..a8ebcb59d --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeployment.java @@ -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 index 000000000..8b187c5b7 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerDeploymentData.java @@ -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 index 000000000..29b391477 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdServerManager.java @@ -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 { + 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; + } + +} -- 2.39.2