/** Resolve the address this field points to */ void resolve() { value = node.address(); resolved = true; }
/** * Show ring * * @param model * @throws Exception */ @SuppressWarnings({"rawtypes", "unchecked"}) @RequestMapping(value = "/ring/", method = RequestMethod.GET) public void describeRing(ModelMap model) throws Exception { NodeProbe probe = clientProvider.getProbe(); if (probe == null) { // TODO JMX Connection failed throw new RuntimeException("JMX Connection failed."); } Set<String> liveNodes = probe.getLiveNodes(); Set<String> deadNodes = probe.getUnreachableNodes(); Set<String> joiningNodes = probe.getJoiningNodes(); Set<String> leavingNodes = probe.getLeavingNodes(); Map<String, String> loadMap = probe.getLoadMap(); Map<Token, String> endpointMap = probe.getTokenToEndpointMap(); List<Node> nodes = new ArrayList<Node>(endpointMap.size()); List<Token> sortedTokens = new ArrayList<Token>(endpointMap.keySet()); Collections.sort(sortedTokens); for (Object token : sortedTokens) { String primaryEndpoint = endpointMap.get(token); Node node = new Node(); node.address = primaryEndpoint; node.token = token.toString(); node.load = loadMap.get(node.address); node.up = liveNodes.contains(primaryEndpoint) ? "up" : deadNodes.contains(primaryEndpoint) ? "down" : "?"; node.state = joiningNodes.contains(primaryEndpoint) ? "Joining" : leavingNodes.contains(primaryEndpoint) ? "Leaving" : "Normal"; if (node.load == null) { node.load = "?"; } nodes.add(node); NodeProbe inProbe = clientProvider.getProbe(node.address); if (inProbe != null) { node.operationMode = inProbe.getOperationMode(); node.uptime = getUptimeString(inProbe.getUptime()); node.jmx = true; MemoryUsage memory = inProbe.getHeapMemoryUsage(); node.memoryUsed = String.format("%.2f MB", (double) memory.getUsed() / (1024 * 1024)); node.memoryMax = String.format("%.2f MB", (double) memory.getMax() / (1024 * 1024)); node.memoryCommited = String.format("%.2f MB", (double) memory.getCommitted() / (1024 * 1024)); } } // List live nodes which are not in range. for (String deadAddress : deadNodes) { Node deadNode = new Node(); deadNode.address = deadAddress; deadNode.load = loadMap.get(deadAddress); NodeProbe inProbe = clientProvider.getProbe(deadAddress); if (inProbe != null) { deadNode.operationMode = inProbe.getOperationMode(); deadNode.uptime = getUptimeString(inProbe.getUptime()); } } model.put("nodes", nodes); model.put("menu_ring", Boolean.TRUE); }