4314 |
20 Jan 17 |
nicklas |
1 |
package net.sf.basedb.opengrid.servlet; |
4314 |
20 Jan 17 |
nicklas |
2 |
|
4314 |
20 Jan 17 |
nicklas |
3 |
import java.io.IOException; |
4314 |
20 Jan 17 |
nicklas |
4 |
|
4314 |
20 Jan 17 |
nicklas |
5 |
import javax.servlet.ServletException; |
4314 |
20 Jan 17 |
nicklas |
6 |
import javax.servlet.http.HttpServlet; |
4314 |
20 Jan 17 |
nicklas |
7 |
import javax.servlet.http.HttpServletRequest; |
4314 |
20 Jan 17 |
nicklas |
8 |
import javax.servlet.http.HttpServletResponse; |
4314 |
20 Jan 17 |
nicklas |
9 |
|
4314 |
20 Jan 17 |
nicklas |
10 |
import org.json.simple.JSONArray; |
4314 |
20 Jan 17 |
nicklas |
11 |
import org.json.simple.JSONObject; |
4314 |
20 Jan 17 |
nicklas |
12 |
|
4314 |
20 Jan 17 |
nicklas |
13 |
import net.sf.basedb.clients.web.extensions.ExtensionsControl; |
4314 |
20 Jan 17 |
nicklas |
14 |
import net.sf.basedb.clients.web.extensions.service.ServiceControllerAction; |
4314 |
20 Jan 17 |
nicklas |
15 |
import net.sf.basedb.clients.web.extensions.service.Services; |
4314 |
20 Jan 17 |
nicklas |
16 |
import net.sf.basedb.core.DbControl; |
4314 |
20 Jan 17 |
nicklas |
17 |
import net.sf.basedb.core.Include; |
4314 |
20 Jan 17 |
nicklas |
18 |
import net.sf.basedb.core.ItemNotFoundException; |
4314 |
20 Jan 17 |
nicklas |
19 |
import net.sf.basedb.core.SessionControl; |
4314 |
20 Jan 17 |
nicklas |
20 |
import net.sf.basedb.opengrid.AbstractSession; |
4314 |
20 Jan 17 |
nicklas |
21 |
import net.sf.basedb.opengrid.CmdResult; |
4314 |
20 Jan 17 |
nicklas |
22 |
import net.sf.basedb.opengrid.OpenGrid; |
4314 |
20 Jan 17 |
nicklas |
23 |
import net.sf.basedb.opengrid.OpenGridCluster; |
4314 |
20 Jan 17 |
nicklas |
24 |
import net.sf.basedb.opengrid.OpenGridSession; |
4314 |
20 Jan 17 |
nicklas |
25 |
import net.sf.basedb.opengrid.json.JSONOption; |
4314 |
20 Jan 17 |
nicklas |
26 |
import net.sf.basedb.opengrid.json.JSONOptions; |
4314 |
20 Jan 17 |
nicklas |
27 |
import net.sf.basedb.opengrid.service.OpenGridService; |
4314 |
20 Jan 17 |
nicklas |
28 |
import net.sf.basedb.util.Values; |
4314 |
20 Jan 17 |
nicklas |
29 |
import net.sf.basedb.util.error.ThrowableUtil; |
4314 |
20 Jan 17 |
nicklas |
30 |
import net.sf.basedb.util.extensions.Extension; |
4314 |
20 Jan 17 |
nicklas |
31 |
|
4314 |
20 Jan 17 |
nicklas |
32 |
/** |
4314 |
20 Jan 17 |
nicklas |
Get information about Open Grid Scheduler hosts. |
4314 |
20 Jan 17 |
nicklas |
34 |
|
4314 |
20 Jan 17 |
nicklas |
@author nicklas |
4314 |
20 Jan 17 |
nicklas |
@since 1.0 |
4314 |
20 Jan 17 |
nicklas |
37 |
*/ |
4314 |
20 Jan 17 |
nicklas |
38 |
public class OpenGridServlet |
4314 |
20 Jan 17 |
nicklas |
39 |
extends HttpServlet |
4314 |
20 Jan 17 |
nicklas |
40 |
{ |
4314 |
20 Jan 17 |
nicklas |
41 |
|
4314 |
20 Jan 17 |
nicklas |
42 |
private static final long serialVersionUID = 6061966555605197262L; |
4314 |
20 Jan 17 |
nicklas |
43 |
|
4314 |
20 Jan 17 |
nicklas |
44 |
public OpenGridServlet() |
4314 |
20 Jan 17 |
nicklas |
45 |
{} |
4314 |
20 Jan 17 |
nicklas |
46 |
|
4314 |
20 Jan 17 |
nicklas |
47 |
@SuppressWarnings("unchecked") |
4314 |
20 Jan 17 |
nicklas |
48 |
@Override |
4314 |
20 Jan 17 |
nicklas |
49 |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) |
4314 |
20 Jan 17 |
nicklas |
50 |
throws ServletException, IOException |
4314 |
20 Jan 17 |
nicklas |
51 |
{ |
4314 |
20 Jan 17 |
nicklas |
52 |
String cmd = req.getParameter("cmd"); |
4314 |
20 Jan 17 |
nicklas |
53 |
ServletUtil.setJsonResponseHeaders(resp); |
4314 |
20 Jan 17 |
nicklas |
54 |
|
4314 |
20 Jan 17 |
nicklas |
55 |
JSONObject json = new JSONObject(); |
4314 |
20 Jan 17 |
nicklas |
56 |
json.put("status", "ok"); |
4314 |
20 Jan 17 |
nicklas |
57 |
|
4314 |
20 Jan 17 |
nicklas |
58 |
final SessionControl sc = ServletUtil.getSessionControl(req); |
4314 |
20 Jan 17 |
nicklas |
59 |
DbControl dc = null; |
4314 |
20 Jan 17 |
nicklas |
60 |
AbstractSession<?> session = null; |
4314 |
20 Jan 17 |
nicklas |
61 |
try |
4314 |
20 Jan 17 |
nicklas |
62 |
{ |
4314 |
20 Jan 17 |
nicklas |
63 |
if ("GetHostInfo".equals(cmd)) |
4314 |
20 Jan 17 |
nicklas |
64 |
{ |
4314 |
20 Jan 17 |
nicklas |
65 |
dc = sc.newDbControl(); |
4314 |
20 Jan 17 |
nicklas |
66 |
ServletUtil.checkPermission(dc); |
4314 |
20 Jan 17 |
nicklas |
67 |
|
4314 |
20 Jan 17 |
nicklas |
68 |
if (Values.getBoolean(req.getParameter("reload"))) |
4314 |
20 Jan 17 |
nicklas |
69 |
{ |
4742 |
09 Apr 18 |
nicklas |
70 |
ExtensionsControl ec = ExtensionsControl.get(dc); |
4742 |
09 Apr 18 |
nicklas |
71 |
Services.restart((Extension<ServiceControllerAction>)ec.getExtension("net.sf.basedb.opengrid.service")); |
4742 |
09 Apr 18 |
nicklas |
72 |
Throwable t = ec.getLastExtensionError("net.sf.basedb.opengrid.service"); |
4742 |
09 Apr 18 |
nicklas |
73 |
if (t != null) throw t; |
4314 |
20 Jan 17 |
nicklas |
74 |
} |
4314 |
20 Jan 17 |
nicklas |
75 |
|
4314 |
20 Jan 17 |
nicklas |
76 |
String hostId = req.getParameter("hostId"); |
4317 |
23 Jan 17 |
nicklas |
77 |
JSONOptions includeClusterInfo = new JSONOptions(dc); |
4314 |
20 Jan 17 |
nicklas |
78 |
includeClusterInfo.enable(JSONOption.CLUSTER_INFO); |
4314 |
20 Jan 17 |
nicklas |
79 |
includeClusterInfo.enable(JSONOption.NODE_INFO); |
4317 |
23 Jan 17 |
nicklas |
80 |
if (Values.getBoolean(req.getParameter("jobAgentDetails"))) |
4317 |
23 Jan 17 |
nicklas |
81 |
{ |
4317 |
23 Jan 17 |
nicklas |
82 |
includeClusterInfo.enable(JSONOption.JOBAGENT_INFO); |
4317 |
23 Jan 17 |
nicklas |
83 |
} |
4314 |
20 Jan 17 |
nicklas |
84 |
if (hostId == null) |
4314 |
20 Jan 17 |
nicklas |
85 |
{ |
4314 |
20 Jan 17 |
nicklas |
86 |
JSONArray jsonHosts = new JSONArray(); |
4314 |
20 Jan 17 |
nicklas |
87 |
for (OpenGridCluster host : OpenGridService.getInstance().getClusters(dc, Include.ALL)) |
4314 |
20 Jan 17 |
nicklas |
88 |
{ |
4314 |
20 Jan 17 |
nicklas |
89 |
JSONObject jsonHost = host.asJSONObject(includeClusterInfo); |
4314 |
20 Jan 17 |
nicklas |
90 |
jsonHosts.add(jsonHost); |
4314 |
20 Jan 17 |
nicklas |
91 |
} |
4314 |
20 Jan 17 |
nicklas |
92 |
json.put("hosts", jsonHosts); |
4314 |
20 Jan 17 |
nicklas |
93 |
} |
4314 |
20 Jan 17 |
nicklas |
94 |
else |
4314 |
20 Jan 17 |
nicklas |
95 |
{ |
4314 |
20 Jan 17 |
nicklas |
96 |
OpenGridCluster host = OpenGridService.getInstance().getClusterById(dc, hostId); |
4314 |
20 Jan 17 |
nicklas |
97 |
if (host == null) |
4314 |
20 Jan 17 |
nicklas |
98 |
{ |
4314 |
20 Jan 17 |
nicklas |
99 |
throw new ItemNotFoundException("OpenGridCluster[id="+hostId+"]"); |
4314 |
20 Jan 17 |
nicklas |
100 |
} |
4314 |
20 Jan 17 |
nicklas |
101 |
JSONObject jsonHost = host.asJSONObject(includeClusterInfo); |
4314 |
20 Jan 17 |
nicklas |
102 |
json.put("host", jsonHost); |
4314 |
20 Jan 17 |
nicklas |
103 |
} |
4314 |
20 Jan 17 |
nicklas |
104 |
} |
4314 |
20 Jan 17 |
nicklas |
105 |
} |
4314 |
20 Jan 17 |
nicklas |
106 |
catch (Throwable t) |
4314 |
20 Jan 17 |
nicklas |
107 |
{ |
4314 |
20 Jan 17 |
nicklas |
108 |
t.printStackTrace(); |
4314 |
20 Jan 17 |
nicklas |
109 |
json.clear(); |
4314 |
20 Jan 17 |
nicklas |
110 |
json.put("status", "error"); |
4314 |
20 Jan 17 |
nicklas |
111 |
json.put("message", t.getMessage()); |
4314 |
20 Jan 17 |
nicklas |
112 |
json.put("stacktrace", ThrowableUtil.stackTraceToString(t)); |
4314 |
20 Jan 17 |
nicklas |
113 |
} |
4314 |
20 Jan 17 |
nicklas |
114 |
finally |
4314 |
20 Jan 17 |
nicklas |
115 |
{ |
4314 |
20 Jan 17 |
nicklas |
116 |
OpenGrid.close(session); |
4314 |
20 Jan 17 |
nicklas |
117 |
if (dc != null) dc.close(); |
4314 |
20 Jan 17 |
nicklas |
118 |
if (json != null) json.writeJSONString(resp.getWriter()); |
4314 |
20 Jan 17 |
nicklas |
119 |
} |
4314 |
20 Jan 17 |
nicklas |
120 |
|
4314 |
20 Jan 17 |
nicklas |
121 |
} |
4314 |
20 Jan 17 |
nicklas |
122 |
|
4314 |
20 Jan 17 |
nicklas |
123 |
@Override |
4314 |
20 Jan 17 |
nicklas |
124 |
protected void doPost(HttpServletRequest req, HttpServletResponse resp) |
4314 |
20 Jan 17 |
nicklas |
125 |
throws ServletException, IOException |
4314 |
20 Jan 17 |
nicklas |
126 |
{ |
4314 |
20 Jan 17 |
nicklas |
127 |
String cmd = req.getParameter("cmd"); |
4314 |
20 Jan 17 |
nicklas |
128 |
ServletUtil.setJsonResponseHeaders(resp); |
4314 |
20 Jan 17 |
nicklas |
129 |
|
4314 |
20 Jan 17 |
nicklas |
130 |
JSONObject json = new JSONObject(); |
4314 |
20 Jan 17 |
nicklas |
131 |
json.put("status", "ok"); |
4314 |
20 Jan 17 |
nicklas |
132 |
JSONArray jsonMessages = new JSONArray(); |
4314 |
20 Jan 17 |
nicklas |
133 |
|
4314 |
20 Jan 17 |
nicklas |
134 |
final SessionControl sc = ServletUtil.getSessionControl(req); |
4314 |
20 Jan 17 |
nicklas |
135 |
DbControl dc = null; |
4314 |
20 Jan 17 |
nicklas |
136 |
OpenGridSession session = null; |
4314 |
20 Jan 17 |
nicklas |
137 |
try |
4314 |
20 Jan 17 |
nicklas |
138 |
{ |
4314 |
20 Jan 17 |
nicklas |
139 |
if ("ExecuteCmd".equals(cmd)) |
4314 |
20 Jan 17 |
nicklas |
140 |
{ |
4314 |
20 Jan 17 |
nicklas |
141 |
dc = sc.newDbControl(); |
4314 |
20 Jan 17 |
nicklas |
142 |
ServletUtil.checkPermission(dc); |
4314 |
20 Jan 17 |
nicklas |
143 |
|
4314 |
20 Jan 17 |
nicklas |
144 |
JSONObject jsonReq = ServletUtil.parseRequest(req); |
4314 |
20 Jan 17 |
nicklas |
145 |
|
4314 |
20 Jan 17 |
nicklas |
146 |
String hostId = (String)jsonReq.get("hostId"); |
4314 |
20 Jan 17 |
nicklas |
147 |
String hostCmd = (String)jsonReq.get("cmd"); |
4314 |
20 Jan 17 |
nicklas |
148 |
|
4314 |
20 Jan 17 |
nicklas |
149 |
OpenGridCluster host = OpenGridService.getInstance().getClusterById(dc, hostId); |
4314 |
20 Jan 17 |
nicklas |
150 |
if (host == null) |
4314 |
20 Jan 17 |
nicklas |
151 |
{ |
4314 |
20 Jan 17 |
nicklas |
152 |
throw new ItemNotFoundException("OpenGridCluster[id="+hostId+"]"); |
4314 |
20 Jan 17 |
nicklas |
153 |
} |
4314 |
20 Jan 17 |
nicklas |
154 |
|
4314 |
20 Jan 17 |
nicklas |
155 |
session = host.connect(5); |
4314 |
20 Jan 17 |
nicklas |
156 |
CmdResult<String> result = session.executeCmd(hostCmd, 10); |
4314 |
20 Jan 17 |
nicklas |
157 |
json.put("result", result.asJSONObject(JSONOptions.DEFAULT)); |
4314 |
20 Jan 17 |
nicklas |
158 |
} |
4314 |
20 Jan 17 |
nicklas |
159 |
} |
4314 |
20 Jan 17 |
nicklas |
160 |
catch (Throwable t) |
4314 |
20 Jan 17 |
nicklas |
161 |
{ |
4314 |
20 Jan 17 |
nicklas |
162 |
t.printStackTrace(); |
4314 |
20 Jan 17 |
nicklas |
163 |
json.clear(); |
4314 |
20 Jan 17 |
nicklas |
164 |
json.put("status", "error"); |
4314 |
20 Jan 17 |
nicklas |
165 |
json.put("message", t.getMessage()); |
4314 |
20 Jan 17 |
nicklas |
166 |
json.put("stacktrace", ThrowableUtil.stackTraceToString(t)); |
4314 |
20 Jan 17 |
nicklas |
167 |
} |
4314 |
20 Jan 17 |
nicklas |
168 |
finally |
4314 |
20 Jan 17 |
nicklas |
169 |
{ |
4314 |
20 Jan 17 |
nicklas |
170 |
if (dc != null) dc.close(); |
4314 |
20 Jan 17 |
nicklas |
171 |
OpenGrid.close(session); |
4314 |
20 Jan 17 |
nicklas |
172 |
json.writeJSONString(resp.getWriter()); |
4314 |
20 Jan 17 |
nicklas |
173 |
} |
4314 |
20 Jan 17 |
nicklas |
174 |
} |
4314 |
20 Jan 17 |
nicklas |
175 |
|
4314 |
20 Jan 17 |
nicklas |
176 |
} |