blob: 9a90ef2efb3e36f210a569d23fb5810542c6213a [file] [log] [blame]
tom6d2a43e2014-09-08 01:50:20 -07001package org.onlab.onos.cli.net;
2
3import org.apache.karaf.shell.commands.Command;
4import org.onlab.onos.cli.AbstractShellCommand;
5import org.onlab.onos.net.Device;
6import org.onlab.onos.net.device.DeviceService;
7
tomd79f7ec2014-09-08 13:29:18 -07008import java.util.Collections;
9import java.util.Comparator;
10import java.util.List;
11
12import static com.google.common.collect.Lists.newArrayList;
13
tom6d2a43e2014-09-08 01:50:20 -070014/**
15 * Lists all infrastructure devices.
16 */
17@Command(scope = "onos", name = "devices",
18 description = "Lists all infrastructure devices")
19public class DevicesListCommand extends AbstractShellCommand {
20
21 private static final String FMT =
tomc290a122014-09-08 14:27:13 -070022 "id=%s, available=%s, role=%s, type=%s, mfr=%s, hw=%s, sw=%s, serial=%s";
tom6d2a43e2014-09-08 01:50:20 -070023
tomd79f7ec2014-09-08 13:29:18 -070024 protected static final Comparator<Device> ID_COMPARATOR = new Comparator<Device>() {
25 @Override
26 public int compare(Device d1, Device d2) {
27 return d1.id().uri().toString().compareTo(d2.id().uri().toString());
28 }
29 };
30
tom6d2a43e2014-09-08 01:50:20 -070031 @Override
32 protected Object doExecute() throws Exception {
tomff7eb7c2014-09-08 12:49:03 -070033 DeviceService service = getService(DeviceService.class);
tomd79f7ec2014-09-08 13:29:18 -070034 for (Device device : getSortedDevices(service)) {
tomc290a122014-09-08 14:27:13 -070035 printDevice(service, device);
tom6d2a43e2014-09-08 01:50:20 -070036 }
37 return null;
38 }
tomff7eb7c2014-09-08 12:49:03 -070039
40 /**
tomd79f7ec2014-09-08 13:29:18 -070041 * Returns the list of devices sorted using the device ID URIs.
42 *
43 * @param service device service
44 * @return sorted device list
45 */
46 protected List<Device> getSortedDevices(DeviceService service) {
47 List<Device> devices = newArrayList(service.getDevices());
48 Collections.sort(devices, ID_COMPARATOR);
49 return devices;
50 }
51
52 /**
tomff7eb7c2014-09-08 12:49:03 -070053 * Prints information about the specified device.
54 *
tomc290a122014-09-08 14:27:13 -070055 * @param service device service
56 * @param device infrastructure device
tomff7eb7c2014-09-08 12:49:03 -070057 */
tomc290a122014-09-08 14:27:13 -070058 protected void printDevice(DeviceService service, Device device) {
tom9eb57fb2014-09-11 19:42:38 -070059 if (device != null) {
60 print(FMT, device.id(), service.isAvailable(device.id()),
61 service.getRole(device.id()), device.type(),
62 device.manufacturer(), device.hwVersion(), device.swVersion(),
63 device.serialNumber());
64 }
tomff7eb7c2014-09-08 12:49:03 -070065 }
66
tom6d2a43e2014-09-08 01:50:20 -070067}