package com.sequenceiq.it.spark.ambari;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
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.it.spark.ITResponse;
import com.sequenceiq.it.spark.ambari.model.Clusters;
import com.sequenceiq.it.spark.ambari.model.Hosts;
import com.sequenceiq.it.util.HostNameUtil;
import spark.Request;
import spark.Response;
public class AmbariClusterResponse extends ITResponse {
private Map<String, CloudVmMetaDataStatus> instanceMap;
public AmbariClusterResponse(Map<String, CloudVmMetaDataStatus> instanceMap) {
this.instanceMap = instanceMap;
}
@Override
public Object handle(Request request, Response response) throws Exception {
response.type("text/plain");
ObjectNode rootNode = JsonNodeFactory.instance.objectNode();
Set<String> hostNames = instanceMap.values().stream()
.map(cv -> HostNameUtil.generateHostNameByIp(cv.getMetaData().getPrivateIp())).collect(Collectors.toSet());
rootNode.putObject("hosts")
.set("Hosts", getObjectMapper().valueToTree(new Hosts(hostNames, "HEALTHY")));
ArrayNode items = rootNode.putArray("items");
items.addObject()
.set("Clusters", getObjectMapper().valueToTree(new Clusters("ambari_cluster")));
return rootNode;
}
}