blob: b7a8acc1f4da1e1fc835c6a5a48ffefb6950f3d5 [file] [log] [blame]
tom6d2a43e2014-09-08 01:50:20 -07001package org.onlab.onos.cli.net;
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;
6import com.fasterxml.jackson.databind.node.ObjectNode;
tom6d2a43e2014-09-08 01:50:20 -07007import org.apache.karaf.shell.commands.Command;
8import org.onlab.onos.cli.AbstractShellCommand;
tom91c7bd02014-09-25 22:50:44 -07009import org.onlab.onos.cli.Comparators;
tom6d2a43e2014-09-08 01:50:20 -070010import org.onlab.onos.net.Device;
11import org.onlab.onos.net.device.DeviceService;
12
tomd79f7ec2014-09-08 13:29:18 -070013import java.util.Collections;
tomd79f7ec2014-09-08 13:29:18 -070014import java.util.List;
15
16import static com.google.common.collect.Lists.newArrayList;
17
tom6d2a43e2014-09-08 01:50:20 -070018/**
19 * Lists all infrastructure devices.
20 */
21@Command(scope = "onos", name = "devices",
22 description = "Lists all infrastructure devices")
23public class DevicesListCommand extends AbstractShellCommand {
24
25 private static final String FMT =
tomc290a122014-09-08 14:27:13 -070026 "id=%s, available=%s, role=%s, type=%s, mfr=%s, hw=%s, sw=%s, serial=%s";
tom6d2a43e2014-09-08 01:50:20 -070027
28 @Override
tom0872a172014-09-23 11:24:26 -070029 protected void execute() {
tomcaf3bf72014-09-23 13:20:53 -070030 DeviceService service = get(DeviceService.class);
tom32085cf2014-10-16 00:04:33 -070031 if (outputJson()) {
32 print("%s", json(service, getSortedDevices(service)));
33 } else {
34 for (Device device : getSortedDevices(service)) {
35 printDevice(service, device);
36 }
tom6d2a43e2014-09-08 01:50:20 -070037 }
tom6d2a43e2014-09-08 01:50:20 -070038 }
tomff7eb7c2014-09-08 12:49:03 -070039
40 /**
tom32085cf2014-10-16 00:04:33 -070041 * Returns JSON node representing the specified devices.
42 *
43 * @param service device service
44 * @param devices collection of devices
45 * @return JSON node
46 */
47 public static JsonNode json(DeviceService service, Iterable<Device> devices) {
48 ObjectMapper mapper = new ObjectMapper();
49 ArrayNode result = mapper.createArrayNode();
50 for (Device device : devices) {
51 result.add(json(service, mapper, device));
52 }
53 return result;
54 }
55
56 /**
57 * Returns JSON node representing the specified device.
58 *
59 * @param service device service
60 * @param mapper object mapper
61 * @param device infrastructure device
62 * @return JSON node
63 */
64 public static ObjectNode json(DeviceService service, ObjectMapper mapper,
65 Device device) {
66 ObjectNode result = mapper.createObjectNode();
67 if (device != null) {
68 result.put("id", device.id().toString())
69 .put("available", service.isAvailable(device.id()))
70 .put("role", service.getRole(device.id()).toString())
71 .put("mfr", device.manufacturer())
72 .put("hw", device.hwVersion())
73 .put("sw", device.swVersion())
74 .put("serial", device.serialNumber());
75 }
76 return result;
77 }
78
79 /**
tomd79f7ec2014-09-08 13:29:18 -070080 * Returns the list of devices sorted using the device ID URIs.
81 *
82 * @param service device service
83 * @return sorted device list
84 */
tom53945d52014-10-07 11:01:36 -070085 protected static List<Device> getSortedDevices(DeviceService service) {
tomd79f7ec2014-09-08 13:29:18 -070086 List<Device> devices = newArrayList(service.getDevices());
tom1380eee2014-09-24 09:22:02 -070087 Collections.sort(devices, Comparators.ELEMENT_COMPARATOR);
tomd79f7ec2014-09-08 13:29:18 -070088 return devices;
89 }
90
91 /**
tomff7eb7c2014-09-08 12:49:03 -070092 * Prints information about the specified device.
93 *
tomc290a122014-09-08 14:27:13 -070094 * @param service device service
95 * @param device infrastructure device
tomff7eb7c2014-09-08 12:49:03 -070096 */
tomc290a122014-09-08 14:27:13 -070097 protected void printDevice(DeviceService service, Device device) {
tom9eb57fb2014-09-11 19:42:38 -070098 if (device != null) {
99 print(FMT, device.id(), service.isAvailable(device.id()),
100 service.getRole(device.id()), device.type(),
101 device.manufacturer(), device.hwVersion(), device.swVersion(),
102 device.serialNumber());
103 }
tomff7eb7c2014-09-08 12:49:03 -0700104 }
105
tom6d2a43e2014-09-08 01:50:20 -0700106}