blob: 357d005e7295a00aa0ae7320c2d048cec080c096 [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
tom0872a172014-09-23 11:24:26 -070032 protected void execute() {
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 }
tom6d2a43e2014-09-08 01:50:20 -070037 }
tomff7eb7c2014-09-08 12:49:03 -070038
39 /**
tomd79f7ec2014-09-08 13:29:18 -070040 * Returns the list of devices sorted using the device ID URIs.
41 *
42 * @param service device service
43 * @return sorted device list
44 */
45 protected List<Device> getSortedDevices(DeviceService service) {
46 List<Device> devices = newArrayList(service.getDevices());
47 Collections.sort(devices, ID_COMPARATOR);
48 return devices;
49 }
50
51 /**
tomff7eb7c2014-09-08 12:49:03 -070052 * Prints information about the specified device.
53 *
tomc290a122014-09-08 14:27:13 -070054 * @param service device service
55 * @param device infrastructure device
tomff7eb7c2014-09-08 12:49:03 -070056 */
tomc290a122014-09-08 14:27:13 -070057 protected void printDevice(DeviceService service, Device device) {
tom9eb57fb2014-09-11 19:42:38 -070058 if (device != null) {
59 print(FMT, device.id(), service.isAvailable(device.id()),
60 service.getRole(device.id()), device.type(),
61 device.manufacturer(), device.hwVersion(), device.swVersion(),
62 device.serialNumber());
63 }
tomff7eb7c2014-09-08 12:49:03 -070064 }
65
tom6d2a43e2014-09-08 01:50:20 -070066}