]> git.argeo.org Git - gpl/argeo-slc.git/blob - legacy/org.argeo.slc.support/src/org/argeo/slc/support/deploy/HttpdServerManager.java
Prepare next development cacle
[gpl/argeo-slc.git] / legacy / org.argeo.slc.support / src / org / argeo / slc / support / deploy / HttpdServerManager.java
1 package org.argeo.slc.support.deploy;
2
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;
8
9 import org.argeo.api.cms.CmsLog;
10 import org.argeo.slc.SlcException;
11 import org.argeo.slc.deploy.DeployedSystemManager;
12
13 public class HttpdServerManager implements DeployedSystemManager<HttpdServer> {
14 private final static CmsLog log = CmsLog.getLog(HttpdServerManager.class);
15
16 private HttpdServer httpdServer;
17
18 public void start() {
19 runProcessAsync(createCommandLine("start"));
20 log.info("Started httpd server with root "
21 + getHttpdServerTargetData().getServerRoot());
22 }
23
24 public void stop() {
25 runProcessAsync(createCommandLine("stop"));
26 log.info("Stopped httpd server with root "
27 + getHttpdServerTargetData().getServerRoot());
28 }
29
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));
38 return cmd;
39 }
40
41 protected static void runProcessAsync(String... command) {
42 ProcessBuilder procBuilder = new ProcessBuilder(command);
43 procBuilder.redirectErrorStream(true);
44 try {
45 Process proc = procBuilder.start();
46 final InputStream in = proc.getInputStream();
47 Thread logThread = new Thread() {
48
49 @Override
50 public void run() {
51 BufferedReader reader = new BufferedReader(
52 new InputStreamReader(in));
53 String line = null;
54 try {
55 while ((line = reader.readLine()) != null)
56 log.info(line);
57 } catch (IOException e) {
58 log.error("Failed to read stdout", e);
59 }
60 }
61 };
62
63 logThread.start();
64 } catch (IOException e) {
65 throw new SlcException("Could not run command", e);
66 }
67 }
68
69 public void setDeployedSystem(HttpdServer httpdServer) {
70 this.httpdServer = httpdServer;
71 }
72
73 protected HttpdServerDeploymentData getHttpdServerDeploymentData() {
74 return (HttpdServerDeploymentData) httpdServer.getDeploymentData();
75 }
76
77 protected HttpdServerTargetData getHttpdServerTargetData() {
78 return (HttpdServerTargetData) httpdServer.getTargetData();
79 }
80 }