package com.pinterest.doctorkafka.servlet; import com.pinterest.doctorkafka.DoctorKafkaMain; import com.pinterest.doctorkafka.KafkaClusterManager; import com.pinterest.doctorkafka.errors.ClusterInfoError; import org.apache.kafka.common.PartitionInfo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.google.gson.Gson; import com.google.gson.JsonArray; import java.io.PrintWriter; import java.util.List; import java.util.Map; public class UnderReplicatedPartitionsServlet extends DoctorKafkaServlet { private static final Logger LOG = LogManager.getLogger(UnderReplicatedPartitionsServlet.class); private static final Gson gson = new Gson(); @Override public void renderJSON(PrintWriter writer, Map<String, String> params) { String clusterName = params.get("cluster"); KafkaClusterManager clusterMananger = DoctorKafkaMain.doctorKafka.getClusterManager(clusterName); if (clusterMananger == null) { ClusterInfoError error = new ClusterInfoError("Failed to find cluster manager for {}", clusterName); writer.print(gson.toJson(error)); return; } List<PartitionInfo> urps = clusterMananger.getUnderReplicatedPartitions(); JsonArray json = new JsonArray(); for (PartitionInfo partitionInfo : urps) { json.add(gson.toJsonTree(partitionInfo)); } writer.print(json); } @Override public void renderHTML(PrintWriter writer, Map<String, String> params) { String clusterName = params.get("cluster"); printHeader(writer); KafkaClusterManager clusterMananger = DoctorKafkaMain.doctorKafka.getClusterManager(clusterName); if (clusterMananger == null) { writer.print("Failed to find cluster manager for " + clusterName); return; } writer.print("<div> <p><a href=\"/\">Home</a> > " + clusterName + " under replicated partitions </p> </div>"); List<PartitionInfo> urps = clusterMananger.getUnderReplicatedPartitions(); writer.print("<table class=\"table\"> <tbody>"); for (PartitionInfo partitionInfo : urps) { writer.print("<tr> <td>"); writer.print(partitionInfo); writer.print("</td> </tr>"); } writer.print("</tbody> </table>"); printFooter(writer); } }