package org.fastcatsearch.http.action.management.servers; import java.util.ArrayList; import java.util.List; import org.fastcatsearch.cluster.ClusterUtils; import org.fastcatsearch.cluster.Node; import org.fastcatsearch.cluster.NodeJobResult; import org.fastcatsearch.cluster.NodeService; import org.fastcatsearch.http.ActionAuthority; import org.fastcatsearch.http.ActionAuthorityLevel; import org.fastcatsearch.http.ActionMapping; import org.fastcatsearch.http.action.ActionRequest; import org.fastcatsearch.http.action.ActionResponse; import org.fastcatsearch.http.action.AuthAction; import org.fastcatsearch.job.management.GetServerSystemHealthJob; import org.fastcatsearch.job.management.GetServerSystemHealthJob.SystemHealthInfo; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.util.ResponseWriter; import org.fastcatsearch.util.ResultWriterException; /** * 데이터 : Node, JVM Path, JVM Version, JVM Option, Install Path * nodeId가 존재하면 하나의 데이터만 리턴하고 없으면 모든 노드의 데이터리턴. * * */ @ActionMapping(value = "/management/servers/systemHealth", authority = ActionAuthority.Servers, authorityLevel = ActionAuthorityLevel.READABLE) public class GetServerSystemHealthAction extends AuthAction { @Override public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception { String nodeId = request.getParameter("nodeId"); NodeService nodeService = ServiceManager.getInstance().getService(NodeService.class); ResponseWriter responseWriter = getDefaultResponseWriter(response.getWriter()); List<Node> nodeList = nodeService.getNodeArrayList(); if(nodeId != null && nodeId.length() > 0){ List<Node> list = new ArrayList<Node>(); for(Node node : nodeList){ if(node.id().equals(nodeId)){ list.add(node); } } nodeList = list; } responseWriter.object(); GetServerSystemHealthJob job = new GetServerSystemHealthJob(); NodeJobResult[] nodeJobResult = ClusterUtils.sendJobToNodeList(job, nodeService, nodeList, true); for(NodeJobResult jobResult : nodeJobResult) { if(jobResult.isSuccess()){ Node node = jobResult.node(); Object result = jobResult.result(); if(result != null){ SystemHealthInfo info = (SystemHealthInfo) result; writeSystemHealthInfo(info, node, responseWriter); } } } responseWriter.endObject(); responseWriter.done(); } private void writeSystemHealthInfo(SystemHealthInfo info, Node node, ResponseWriter responseWriter) throws ResultWriterException{ responseWriter.key(node.id()).object() .key("nodeName").value(node.name()) .key("jvmCpuUse").value(info.jvmCpuUse) .key("systemCpuUse").value(info.systemCpuUse) .key("systemLoadAverage").value(info.systemLoadAverage) .key("maxMemory").value(info.maxMemory) .key("committedMemory").value(info.committedMemory) .key("totalMemory").value(info.totalMemory) .key("usedMemory").value(info.usedMemory) .key("totalDiskSize").value(info.totalDiskSize) .key("usedDiskSize").value(info.usedDiskSize) .key("freeDiskSize").value(info.freeDiskSize) .endObject(); } }