Example #1
0
 /** 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);
  }