1 package org
.argeo
.slc
.support
.deploy
;
3 import java
.io
.BufferedReader
;
4 import java
.io
.IOException
;
5 import java
.io
.InputStream
;
6 import java
.io
.InputStreamReader
;
7 import java
.util
.Arrays
;
9 import org
.argeo
.api
.cms
.CmsLog
;
10 import org
.argeo
.slc
.SlcException
;
11 import org
.argeo
.slc
.deploy
.DeployedSystemManager
;
13 public class HttpdServerManager
implements DeployedSystemManager
<HttpdServer
> {
14 private final static CmsLog log
= CmsLog
.getLog(HttpdServerManager
.class);
16 private HttpdServer httpdServer
;
19 runProcessAsync(createCommandLine("start"));
20 log
.info("Started httpd server with root "
21 + getHttpdServerTargetData().getServerRoot());
25 runProcessAsync(createCommandLine("stop"));
26 log
.info("Stopped httpd server with root "
27 + getHttpdServerTargetData().getServerRoot());
30 protected String
[] createCommandLine(String action
) {
31 String httpdPath
= getHttpdServerTargetData().getExecutables()
32 .getExecutablePath("httpd");
33 String
[] cmd
= { httpdPath
, "-d",
34 getHttpdServerTargetData().getServerRoot(), "-f",
35 getHttpdServerDeploymentData().getConfigFile(), "-k", action
};
36 if (log
.isDebugEnabled())
37 log
.debug("Command line: " + Arrays
.asList(cmd
));
41 protected static void runProcessAsync(String
... command
) {
42 ProcessBuilder procBuilder
= new ProcessBuilder(command
);
43 procBuilder
.redirectErrorStream(true);
45 Process proc
= procBuilder
.start();
46 final InputStream in
= proc
.getInputStream();
47 Thread logThread
= new Thread() {
51 BufferedReader reader
= new BufferedReader(
52 new InputStreamReader(in
));
55 while ((line
= reader
.readLine()) != null)
57 } catch (IOException e
) {
58 log
.error("Failed to read stdout", e
);
64 } catch (IOException e
) {
65 throw new SlcException("Could not run command", e
);
69 public void setDeployedSystem(HttpdServer httpdServer
) {
70 this.httpdServer
= httpdServer
;
73 protected HttpdServerDeploymentData
getHttpdServerDeploymentData() {
74 return (HttpdServerDeploymentData
) httpdServer
.getDeploymentData();
77 protected HttpdServerTargetData
getHttpdServerTargetData() {
78 return (HttpdServerTargetData
) httpdServer
.getTargetData();