package com.sequenceiq.it.spark.ambari;
import java.util.Map;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.sequenceiq.cloudbreak.cloud.model.CloudVmMetaDataStatus;
import com.sequenceiq.cloudbreak.cloud.model.InstanceStatus;
import com.sequenceiq.it.spark.ITResponse;
import com.sequenceiq.it.util.HostNameUtil;
import spark.Request;
import spark.Response;
public class AmbariClustersHostsResponse extends ITResponse {
private Map<String, CloudVmMetaDataStatus> instanceMap;
private String state;
public AmbariClustersHostsResponse(Map<String, CloudVmMetaDataStatus> instanceMap, String state) {
this.instanceMap = instanceMap;
this.state = state;
}
@Override
public Object handle(Request request, Response response) throws Exception {
response.type("text/plain");
ObjectNode rootNode = JsonNodeFactory.instance.objectNode();
ArrayNode items = rootNode.putArray("items");
for (String instanceId : instanceMap.keySet()) {
CloudVmMetaDataStatus status = instanceMap.get(instanceId);
if (InstanceStatus.STARTED == status.getCloudVmInstanceStatus().getStatus()) {
ObjectNode item = items.addObject();
item.putObject("Hosts").put("host_name", HostNameUtil.generateHostNameByIp(status.getMetaData().getPrivateIp()));
ArrayNode components = item.putArray("host_components");
components.addObject()
.putObject("HostRoles")
.put("component_name", "DATANODE")
.put("state", state);
components.addObject()
.putObject("HostRoles")
.put("component_name", "NODEMANAGER")
.put("state", state);
}
}
return rootNode;
}
}