* @throws CassandraServerManagementException
* for errors during accessing nodes
*/
public NodeInformation[] getNodes() throws CassandraServerManagementException {
StorageServiceMBean storageServiceMBean = cassandraMBeanLocator.locateStorageServiceMBean();
Map<Token, String> tokenToEndpoint = storageServiceMBean.getTokenToEndpointMap();
List<Token> sortedTokens = new ArrayList<Token>(tokenToEndpoint.keySet());
Collections.sort(sortedTokens);
Collection<String> liveNodes = storageServiceMBean.getLiveNodes();
Collection<String> deadNodes = storageServiceMBean.getUnreachableNodes();
Collection<String> joiningNodes = storageServiceMBean.getJoiningNodes();
Collection<String> leavingNodes = storageServiceMBean.getLeavingNodes();
Map<String, String> loadMap = storageServiceMBean.getLoadMap();
List<NodeInformation> nodeInformations = new ArrayList<NodeInformation>();
// Calculate per-token ownership of the ring
Map<Token, Float> ownerships = storageServiceMBean.getOwnership();
for (Token token : sortedTokens) {
String primaryEndpoint = tokenToEndpoint.get(token);
String status = liveNodes.contains(primaryEndpoint)
? "Up"