blob: d9bdf94cfbccfc4d41ce1b1b209541bbf480a50d [file] [log] [blame]
tome4729872014-09-23 00:37:37 -07001package org.onlab.onos.cli;
2
tom32085cf2014-10-16 00:04:33 -07003import com.fasterxml.jackson.databind.JsonNode;
4import com.fasterxml.jackson.databind.ObjectMapper;
5import com.fasterxml.jackson.databind.node.ArrayNode;
tome4729872014-09-23 00:37:37 -07006import org.apache.karaf.shell.commands.Command;
7import org.onlab.onos.cluster.ClusterService;
8import org.onlab.onos.cluster.ControllerNode;
9
10import java.util.Collections;
tome4729872014-09-23 00:37:37 -070011import java.util.List;
12
13import static com.google.common.collect.Lists.newArrayList;
14
15/**
16 * Lists all controller cluster nodes.
17 */
18@Command(scope = "onos", name = "nodes",
19 description = "Lists all controller cluster nodes")
20public class NodesListCommand extends AbstractShellCommand {
21
22 private static final String FMT =
tomee49c372014-09-26 15:14:50 -070023 "id=%s, address=%s:%s, state=%s %s";
tome4729872014-09-23 00:37:37 -070024
tome4729872014-09-23 00:37:37 -070025 @Override
tom0872a172014-09-23 11:24:26 -070026 protected void execute() {
27 ClusterService service = get(ClusterService.class);
tome4729872014-09-23 00:37:37 -070028 List<ControllerNode> nodes = newArrayList(service.getNodes());
tom1380eee2014-09-24 09:22:02 -070029 Collections.sort(nodes, Comparators.NODE_COMPARATOR);
tom32085cf2014-10-16 00:04:33 -070030 if (outputJson()) {
31 print("%s", json(service, nodes));
32 } else {
33 ControllerNode self = service.getLocalNode();
34 for (ControllerNode node : nodes) {
35 print(FMT, node.id(), node.ip(), node.tcpPort(),
36 service.getState(node.id()),
37 node.equals(self) ? "*" : "");
38 }
39 }
40 }
41
42 // Produces JSON structure.
43 private JsonNode json(ClusterService service, List<ControllerNode> nodes) {
44 ObjectMapper mapper = new ObjectMapper();
45 ArrayNode result = mapper.createArrayNode();
tome4729872014-09-23 00:37:37 -070046 ControllerNode self = service.getLocalNode();
47 for (ControllerNode node : nodes) {
tom32085cf2014-10-16 00:04:33 -070048 result.add(mapper.createObjectNode()
49 .put("id", node.id().toString())
50 .put("ip", node.ip().toString())
51 .put("tcpPort", node.tcpPort())
52 .put("state", service.getState(node.id()).toString())
53 .put("self", node.equals(self)));
tome4729872014-09-23 00:37:37 -070054 }
tom32085cf2014-10-16 00:04:33 -070055 return result;
tome4729872014-09-23 00:37:37 -070056 }
57
58}