use of com.fasterxml.jackson.databind.node.ArrayNode in project asterixdb by apache.
the class AUnionType method toJSON.
@Override
public ObjectNode toJSON() {
ObjectMapper om = new ObjectMapper();
ObjectNode type = om.createObjectNode();
type.put("type", AUnionType.class.getName());
ArrayNode fields = om.createArrayNode();
Iterator<IAType> iter = unionList.iterator();
if (iter.hasNext()) {
IAType t0 = iter.next();
fields.add(t0.toJSON());
while (iter.hasNext()) {
fields.add(iter.next().toJSON());
}
}
type.set("fields", fields);
return type;
}
use of com.fasterxml.jackson.databind.node.ArrayNode in project asterixdb by apache.
the class ConnectorApiServletTest method testGet.
@Test
public void testGet() throws Exception {
// Starts test asterixdb cluster.
SqlppExecutionTest.setUp();
// Configures a test connector api servlet.
ConnectorApiServlet let = new ConnectorApiServlet(new ConcurrentHashMap<>(), new String[] { "/" }, (ICcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext());
Map<String, NodeControllerInfo> nodeMap = new HashMap<>();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintWriter outputWriter = new PrintWriter(outputStream);
// Creates mocks.
IHyracksClientConnection mockHcc = mock(IHyracksClientConnection.class);
NodeControllerInfo mockInfo1 = mock(NodeControllerInfo.class);
NodeControllerInfo mockInfo2 = mock(NodeControllerInfo.class);
IServletRequest mockRequest = mock(IServletRequest.class);
IServletResponse mockResponse = mock(IServletResponse.class);
FullHttpRequest mockHttpRequest = mock(FullHttpRequest.class);
// Put stuff in let map
let.ctx().put(ServletConstants.HYRACKS_CONNECTION_ATTR, mockHcc);
// Sets up mock returns.
when(mockRequest.getHttpRequest()).thenReturn(mockHttpRequest);
when(mockHttpRequest.method()).thenReturn(HttpMethod.GET);
when(mockRequest.getParameter("dataverseName")).thenReturn("Metadata");
when(mockRequest.getParameter("datasetName")).thenReturn("Dataset");
when(mockResponse.writer()).thenReturn(outputWriter);
when(mockHcc.getNodeControllerInfos()).thenReturn(nodeMap);
when(mockInfo1.getNetworkAddress()).thenReturn(new NetworkAddress("127.0.0.1", 3099));
when(mockInfo2.getNetworkAddress()).thenReturn(new NetworkAddress("127.0.0.2", 3099));
// Calls ConnectorAPIServlet.formResponseObject.
nodeMap.put("asterix_nc1", mockInfo1);
nodeMap.put("asterix_nc2", mockInfo2);
let.handle(mockRequest, mockResponse);
// Constructs the actual response.
ObjectMapper om = new ObjectMapper();
ObjectNode actualResponse = (ObjectNode) om.readTree(outputStream.toString());
// Checks the temp-or-not, primary key, data type of the dataset.
boolean temp = actualResponse.get("temp").asBoolean();
Assert.assertFalse(temp);
String primaryKey = actualResponse.get("keys").asText();
Assert.assertEquals("DataverseName,DatasetName", primaryKey);
ARecordType recordType = (ARecordType) JSONDeserializerForTypes.convertFromJSON(actualResponse.get("type"));
Assert.assertEquals(getMetadataRecordType("Metadata", "Dataset"), recordType);
// Checks the correctness of results.
ArrayNode splits = (ArrayNode) actualResponse.get("splits");
String path = (splits.get(0)).get("path").asText();
Assert.assertTrue(path.endsWith("Metadata/Dataset_idx_Dataset"));
// Tears down the asterixdb cluster.
SqlppExecutionTest.tearDown();
}
use of com.fasterxml.jackson.databind.node.ArrayNode in project asterixdb by apache.
the class ShutdownApiServlet method post.
@Override
protected void post(IServletRequest request, IServletResponse response) {
IHyracksClientConnection hcc = (IHyracksClientConnection) ctx.get(HYRACKS_CONNECTION_ATTR);
boolean terminateNCServices = "true".equalsIgnoreCase(request.getParameter("all"));
Thread t = new Thread(() -> {
try {
hcc.stopCluster(terminateNCServices);
} catch (Exception e) {
GlobalConfig.ASTERIX_LOGGER.log(Level.SEVERE, "Exception stopping cluster", e);
}
}, "Shutdown Servlet Worker");
try {
HttpUtil.setContentType(response, HttpUtil.ContentType.APPLICATION_JSON, HttpUtil.Encoding.UTF8);
} catch (IOException e) {
LOGGER.log(Level.WARNING, "Failure handling request", e);
response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
return;
}
response.setStatus(HttpResponseStatus.ACCEPTED);
ObjectMapper om = new ObjectMapper();
ObjectNode jsonObject = om.createObjectNode();
try {
jsonObject.put("status", "SHUTTING_DOWN");
jsonObject.put("date", new Date().toString());
ObjectNode clusterState = ClusterStateManager.INSTANCE.getClusterStateDescription();
ArrayNode ncs = (ArrayNode) clusterState.get("ncs");
for (int i = 0; i < ncs.size(); i++) {
ObjectNode nc = (ObjectNode) ncs.get(i);
String node = nc.get(NODE_ID_KEY).asText();
ObjectNode details = (ObjectNode) om.readTree(hcc.getNodeDetailsJSON(node, false, true));
nc.set(PID, details.get(PID));
if (details.has(INI) && details.get(INI).has(NCSERVICE_PID)) {
nc.put(NCSERVICE_PID, details.get(INI).get(NCSERVICE_PID).asInt());
}
}
jsonObject.set("cluster", clusterState);
final PrintWriter writer = response.writer();
writer.print(JSONUtil.convertNode(jsonObject));
writer.close();
} catch (Exception e) {
GlobalConfig.ASTERIX_LOGGER.log(Level.INFO, "Exception writing response", e);
}
t.start();
}
use of com.fasterxml.jackson.databind.node.ArrayNode in project asterixdb by apache.
the class NodeControllerDetailsApiServlet method processNode.
private ObjectNode processNode(IServletRequest request, IHyracksClientConnection hcc) throws Exception {
String localPath = localPath(request);
if (localPath.endsWith("/")) {
throw new IllegalArgumentException();
}
String[] parts = localPath.substring(1).split("/");
final String node = parts[0];
if (parts.length == 1) {
ArrayNode ncs = (ArrayNode) getClusterStateJSON(request, "../../").get("ncs");
for (int i = 0; i < ncs.size(); i++) {
if (node.equals(ncs.get(i).get("node_id").asText())) {
return (ObjectNode) ncs.get(i);
}
}
if ("cc".equals(node)) {
return om.createObjectNode();
}
throw new IllegalArgumentException();
} else if (parts.length == 2) {
ObjectNode json;
switch(parts[1]) {
case "config":
json = processNodeConfig(hcc, node);
break;
case "stats":
json = processNodeStats(hcc, node);
break;
case "threaddump":
return processNodeThreadDump(hcc, node);
default:
throw new IllegalArgumentException();
}
fixupKeys(json);
return json;
} else {
throw new IllegalArgumentException();
}
}
use of com.fasterxml.jackson.databind.node.ArrayNode in project asterixdb by apache.
the class NodeControllerDetailsApiServlet method processNodeStats.
protected ObjectNode processNodeStats(IHyracksClientConnection hcc, String node) throws Exception {
final String details = hcc.getNodeDetailsJSON(node, true, false);
if (details == null) {
throw new IllegalArgumentException();
}
ObjectNode json = (ObjectNode) om.readTree(details);
int index = json.get("rrd-ptr").asInt() - 1;
json.remove("rrd-ptr");
List<String> keys = new ArrayList<>();
for (Iterator<String> iter = json.fieldNames(); iter.hasNext(); ) {
keys.add(iter.next());
}
final ArrayNode gcNames = (ArrayNode) json.get("gc-names");
final ArrayNode gcCollectionTimes = (ArrayNode) json.get("gc-collection-times");
final ArrayNode gcCollectionCounts = (ArrayNode) json.get("gc-collection-counts");
for (String key : keys) {
if (key.startsWith("gc-")) {
json.remove(key);
} else {
final JsonNode keyNode = json.get(key);
if (keyNode instanceof ArrayNode) {
final ArrayNode valueArray = (ArrayNode) keyNode;
// fixup an index of -1 to the final element in the array (i.e. RRD_SIZE)
if (index == -1) {
index = valueArray.size() - 1;
}
final JsonNode value = valueArray.get(index);
json.remove(key);
json.set(key.replaceAll("s$", ""), value);
}
}
}
ArrayNode gcs = om.createArrayNode();
for (int i = 0; i < gcNames.size(); i++) {
ObjectNode gc = om.createObjectNode();
gc.set("name", gcNames.get(i));
gc.set("collection-time", ((ArrayNode) gcCollectionTimes.get(i)).get(index));
gc.set("collection-count", ((ArrayNode) gcCollectionCounts.get(i)).get(index));
gcs.add(gc);
}
json.set("gcs", gcs);
return json;
}
Aggregations