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.GetServerSystemInfoJob; import org.fastcatsearch.job.management.GetServerSystemInfoJob.ServerSystemInfo; 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/systemInfo", authority = ActionAuthority.Servers, authorityLevel = ActionAuthorityLevel.READABLE) public class GetServerSystemInfoAction 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(); GetServerSystemInfoJob job = new GetServerSystemInfoJob(); 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){ ServerSystemInfo info = (ServerSystemInfo) result; writeSystemInfo(info, node, responseWriter); } } } responseWriter.endObject(); responseWriter.done(); } private void writeSystemInfo(ServerSystemInfo info, Node node, ResponseWriter responseWriter) throws ResultWriterException{ responseWriter.key(node.id()).object() .key("nodeName").value(node.name()) .key("osName").value(info.osName) .key("osArch").value(info.osArch) .key("userName").value(info.userName) .key("fileEncoding").value(info.fileEncoding) .key("javaHome").value(info.javaHome) .key("javaVendor").value(info.javaVendor) .key("javaVersion").value(info.javaVersion) .key("javaClasspath").value(info.javaClasspath) .key("homePath").value(info.homePath) .key("serverId").value(environment.getServerId()) .endObject(); } }