Till Westmann has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1530
Change subject: Add links to node details to node summaries
......................................................................
Add links to node details to node summaries
Change-Id: I012acbf10eb6f11a625a2a5e51eed1421d8fd046
---
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/JobsRESTAPIFunction.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/NodesRESTAPIFunction.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/StateDumpRESTAPIFunction.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/IJSONOutputFunction.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestHandler.java
A
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestUtil.java
M
hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/NodesAPIIntegrationTest.java
M
hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
8 files changed, 81 insertions(+), 13 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/30/1530/1
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/JobsRESTAPIFunction.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/JobsRESTAPIFunction.java
index ebd055d..4475aa1 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/JobsRESTAPIFunction.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/JobsRESTAPIFunction.java
@@ -36,7 +36,7 @@
}
@Override
- public ObjectNode invoke(String[] arguments) throws Exception {
+ public ObjectNode invoke(String host, String prefix, String[] arguments)
throws Exception {
ObjectMapper om = new ObjectMapper();
ObjectNode result = om.createObjectNode();
switch (arguments.length) {
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/NodesRESTAPIFunction.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/NodesRESTAPIFunction.java
index 3b4918c..4154d95 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/NodesRESTAPIFunction.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/NodesRESTAPIFunction.java
@@ -18,12 +18,17 @@
*/
package org.apache.hyracks.control.cc.web;
+import java.net.URI;
+import java.net.URISyntaxException;
+
import org.apache.hyracks.control.cc.ClusterControllerService;
import org.apache.hyracks.control.cc.web.util.IJSONOutputFunction;
+import org.apache.hyracks.control.cc.web.util.JSONOutputRequestUtil;
import org.apache.hyracks.control.cc.work.GetNodeDetailsJSONWork;
import org.apache.hyracks.control.cc.work.GetNodeSummariesJSONWork;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class NodesRESTAPIFunction implements IJSONOutputFunction {
@@ -34,7 +39,7 @@
}
@Override
- public ObjectNode invoke(String[] arguments) throws Exception {
+ public ObjectNode invoke(String host, String prefix, String[] arguments)
throws Exception {
ObjectMapper om = new ObjectMapper();
ObjectNode result = om.createObjectNode();
switch (arguments.length) {
@@ -42,11 +47,11 @@
if ("".equals(arguments[0])) {
GetNodeSummariesJSONWork gnse = new
GetNodeSummariesJSONWork(ccs.getNodeManager());
ccs.getWorkQueue().scheduleAndSync(gnse);
- result.set("result", gnse.getSummaries());
+ result.set("result", enhanceSummaries(gnse.getSummaries(),
host, prefix));
} else {
String nodeId = arguments[0];
- GetNodeDetailsJSONWork gnde = new
GetNodeDetailsJSONWork(ccs.getNodeManager(), ccs.getCCConfig(),
- nodeId, true, true);
+ GetNodeDetailsJSONWork gnde =
+ new GetNodeDetailsJSONWork(ccs.getNodeManager(),
ccs.getCCConfig(), nodeId, true, true);
ccs.getWorkQueue().scheduleAndSync(gnde);
result.set("result", gnde.getDetail());
}
@@ -54,4 +59,14 @@
}
return result;
}
+
+ private static ArrayNode enhanceSummaries(final ArrayNode summaries,
String host, String prefix) throws
+ URISyntaxException {
+ for (int i = 0; i < summaries.size(); ++i) {
+ ObjectNode node = (ObjectNode) summaries.get(i);
+ URI detailsUri = JSONOutputRequestUtil.uri(host, prefix,
node.get("node-id").asText());
+ node.put("details", detailsUri.toString());
+ }
+ return summaries;
+ }
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/StateDumpRESTAPIFunction.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/StateDumpRESTAPIFunction.java
index 0657f59..c05c4f0 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/StateDumpRESTAPIFunction.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/StateDumpRESTAPIFunction.java
@@ -36,7 +36,7 @@
}
@Override
- public ObjectNode invoke(String[] arguments) throws Exception {
+ public ObjectNode invoke(String host, String prefix, String[] arguments)
throws Exception {
GatherStateDumpsWork gsdw = new GatherStateDumpsWork(ccs);
ccs.getWorkQueue().scheduleAndSync(gsdw);
StateDumpRun sdr = gsdw.getStateDumpRun();
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/IJSONOutputFunction.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/IJSONOutputFunction.java
index ab0a581..1509f67 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/IJSONOutputFunction.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/IJSONOutputFunction.java
@@ -21,5 +21,5 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
public interface IJSONOutputFunction {
- public ObjectNode invoke(String[] arguments) throws Exception;
+ public ObjectNode invoke(String host, String prefix, String[] arguments)
throws Exception;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestHandler.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestHandler.java
index c6c76dd..9785dff 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestHandler.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestHandler.java
@@ -51,19 +51,22 @@
return;
}
String path = path(request);
+ String prefix = pathPrefix(request);
+ String host = host(request);
while (path.startsWith("/")) {
path = path.substring(1);
}
String[] parts = path.split("/");
- ObjectNode result = invoke(response, parts);
+
+ ObjectNode result = invoke(response, host, prefix, parts);
if (result != null) {
deliver(response, result);
}
}
- protected ObjectNode invoke(IServletResponse response, String[] parts) {
+ protected ObjectNode invoke(IServletResponse response, String host, String
prefix, String[] parts) {
try {
- return fn.invoke(parts);
+ return fn.invoke(host, prefix, parts);
} catch (Exception e) {
LOGGER.log(Level.WARNING, "Exception invoking " +
fn.getClass().getName(), e);
response.setStatus(HttpResponseStatus.BAD_REQUEST);
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestUtil.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestUtil.java
new file mode 100644
index 0000000..cbe207c
--- /dev/null
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/web/util/JSONOutputRequestUtil.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.control.cc.web.util;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class JSONOutputRequestUtil {
+ public static URI uri(String host, String prefix, String path) throws
URISyntaxException {
+ String name = host;
+ int port = 80;
+ int index = host.indexOf(':');
+ if (index > 0) {
+ String[] split = host.split(":");
+ name = split[0];
+ port = Integer.valueOf(split[1]);
+ }
+ return new URI("http", null, name, port, prefix + "/" + path, null,
null);
+ }
+}
diff --git
a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/NodesAPIIntegrationTest.java
b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/NodesAPIIntegrationTest.java
index ead70b1..830c6af 100644
---
a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/NodesAPIIntegrationTest.java
+++
b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/NodesAPIIntegrationTest.java
@@ -34,7 +34,7 @@
public class NodesAPIIntegrationTest extends AbstractIntegrationTest {
- static final String[] NODE_SUMMARY_FIELDS = { "node-id", "heap-used",
"system-load-average" };
+ static final String[] NODE_SUMMARY_FIELDS = { "node-id", "heap-used",
"system-load-average", "details" };
static final String[] NODE_DETAILS_FIELDS = { "node-id", "os-name",
"arch", "os-version", "num-processors",
"vm-name", "vm-version", "vm-vendor", "classpath", "library-path",
"boot-classpath", "input-arguments",
diff --git
a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
index 37ef3bb..4fabfbc 100644
---
a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
+++
b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
@@ -124,12 +124,26 @@
response.setStatus(HttpResponseStatus.METHOD_NOT_ALLOWED);
}
+ public String host(IServletRequest request) {
+ return request.getHttpRequest().headers().get("Host");
+ }
+
public String path(IServletRequest request) {
+ final String uri = request.getHttpRequest().uri();
+ return uri.substring(trim(uri));
+ }
+
+ public String pathPrefix(IServletRequest request) {
+ final String uri = request.getHttpRequest().uri();
+ return uri.substring(0, trim(uri));
+ }
+
+ protected int trim(final String uri) {
int trim = -1;
if (paths.length > 1) {
for (int i = 0; i < paths.length; i++) {
String path = paths[i].indexOf('*') >= 0 ?
paths[i].substring(0, paths[i].indexOf('*')) : paths[0];
- if (request.getHttpRequest().uri().indexOf(path) == 0) {
+ if (uri.indexOf(path) == 0) {
trim = trims[i];
break;
}
@@ -137,7 +151,7 @@
} else {
trim = trims[0];
}
- return request.getHttpRequest().uri().substring(trim);
+ return trim;
}
@Override
--
To view, visit https://asterix-gerrit.ics.uci.edu/1530
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I012acbf10eb6f11a625a2a5e51eed1421d8fd046
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann <[email protected]>