Intent ID filter and resource type filter for CLI "allocation" command.
Change-Id: Ifa232e3dd783c415a487df81c57ef196a207e8fc
Showing
1 changed file
with
58 additions
and
16 deletions
... | @@ -17,12 +17,18 @@ package org.onosproject.cli.net; | ... | @@ -17,12 +17,18 @@ package org.onosproject.cli.net; |
17 | 17 | ||
18 | import static org.onosproject.net.DeviceId.deviceId; | 18 | import static org.onosproject.net.DeviceId.deviceId; |
19 | 19 | ||
20 | -import java.util.Collection; | 20 | +import java.util.Arrays; |
21 | +import java.util.Collections; | ||
22 | +import java.util.HashSet; | ||
23 | +import java.util.Set; | ||
21 | import java.util.stream.StreamSupport; | 24 | import java.util.stream.StreamSupport; |
22 | 25 | ||
26 | +import com.google.common.collect.ImmutableSet; | ||
23 | import org.apache.karaf.shell.commands.Argument; | 27 | import org.apache.karaf.shell.commands.Argument; |
24 | import org.apache.karaf.shell.commands.Command; | 28 | import org.apache.karaf.shell.commands.Command; |
25 | import org.apache.karaf.shell.commands.Option; | 29 | import org.apache.karaf.shell.commands.Option; |
30 | +import org.onlab.packet.MplsLabel; | ||
31 | +import org.onlab.packet.VlanId; | ||
26 | import org.onosproject.cli.AbstractShellCommand; | 32 | import org.onosproject.cli.AbstractShellCommand; |
27 | import org.onosproject.net.Device; | 33 | import org.onosproject.net.Device; |
28 | import org.onosproject.net.DeviceId; | 34 | import org.onosproject.net.DeviceId; |
... | @@ -31,6 +37,7 @@ import org.onosproject.net.Port; | ... | @@ -31,6 +37,7 @@ import org.onosproject.net.Port; |
31 | import org.onosproject.net.PortNumber; | 37 | import org.onosproject.net.PortNumber; |
32 | import org.onosproject.net.device.DeviceService; | 38 | import org.onosproject.net.device.DeviceService; |
33 | import org.onosproject.net.newresource.DiscreteResourceId; | 39 | import org.onosproject.net.newresource.DiscreteResourceId; |
40 | +import org.onosproject.net.intent.IntentId; | ||
34 | import org.onosproject.net.newresource.ResourceAllocation; | 41 | import org.onosproject.net.newresource.ResourceAllocation; |
35 | import org.onosproject.net.newresource.ResourceService; | 42 | import org.onosproject.net.newresource.ResourceService; |
36 | 43 | ||
... | @@ -44,10 +51,17 @@ import org.onosproject.net.newresource.Resources; | ... | @@ -44,10 +51,17 @@ import org.onosproject.net.newresource.Resources; |
44 | description = "Lists allocated resources") | 51 | description = "Lists allocated resources") |
45 | public class AllocationsCommand extends AbstractShellCommand { | 52 | public class AllocationsCommand extends AbstractShellCommand { |
46 | 53 | ||
47 | - // TODO add other resource types | 54 | + @Option(name = "-t", aliases = "--type", description = "List of resource types", |
48 | - @Option(name = "-l", aliases = "--lambda", description = "Lambda Resource", | 55 | + required = false, multiValued = true) |
49 | - required = false, multiValued = false) | 56 | + String[] typeStrings = null; |
50 | - private boolean lambda = true; | 57 | + |
58 | + Set<String> typesToPrint; | ||
59 | + | ||
60 | + @Option(name = "-i", aliases = "--intentId", description = "Intent ID", | ||
61 | + required = false, multiValued = true) | ||
62 | + String[] intentStrings; | ||
63 | + | ||
64 | + Set<String> intentsToPrint; | ||
51 | 65 | ||
52 | @Argument(index = 0, name = "deviceIdString", description = "Device ID", | 66 | @Argument(index = 0, name = "deviceIdString", description = "Device ID", |
53 | required = false, multiValued = false) | 67 | required = false, multiValued = false) |
... | @@ -67,6 +81,17 @@ public class AllocationsCommand extends AbstractShellCommand { | ... | @@ -67,6 +81,17 @@ public class AllocationsCommand extends AbstractShellCommand { |
67 | deviceService = get(DeviceService.class); | 81 | deviceService = get(DeviceService.class); |
68 | resourceService = get(ResourceService.class); | 82 | resourceService = get(ResourceService.class); |
69 | 83 | ||
84 | + if (typeStrings != null) { | ||
85 | + typesToPrint = new HashSet<>(Arrays.asList(typeStrings)); | ||
86 | + } else { | ||
87 | + typesToPrint = Collections.emptySet(); | ||
88 | + } | ||
89 | + | ||
90 | + if (intentStrings != null) { | ||
91 | + intentsToPrint = new HashSet<>(Arrays.asList(intentStrings)); | ||
92 | + } else { | ||
93 | + intentsToPrint = Collections.emptySet(); | ||
94 | + } | ||
70 | 95 | ||
71 | if (deviceIdStr != null && portNumberStr != null) { | 96 | if (deviceIdStr != null && portNumberStr != null) { |
72 | DeviceId deviceId = deviceId(deviceIdStr); | 97 | DeviceId deviceId = deviceId(deviceIdStr); |
... | @@ -104,20 +129,37 @@ public class AllocationsCommand extends AbstractShellCommand { | ... | @@ -104,20 +129,37 @@ public class AllocationsCommand extends AbstractShellCommand { |
104 | } | 129 | } |
105 | print("%s%s", Strings.repeat(" ", level), asVerboseString(num)); | 130 | print("%s%s", Strings.repeat(" ", level), asVerboseString(num)); |
106 | 131 | ||
107 | - // TODO: Current design cannot deal with sub-resources | 132 | + // FIXME: This workaround induces a lot of distributed store access. |
108 | - // (e.g., TX/RX under Port) | 133 | + // ResourceService should have an API to get all allocations under a parent resource. |
134 | + Set<Class<?>> subResourceTypes = ImmutableSet.<Class<?>>builder() | ||
135 | + .add(OchSignal.class) | ||
136 | + .add(VlanId.class) | ||
137 | + .add(MplsLabel.class) | ||
138 | + .build(); | ||
139 | + | ||
140 | + DiscreteResourceId resourceId = Resources.discrete(did, num).id(); | ||
141 | + for (Class<?> t : subResourceTypes) { | ||
142 | + resourceService.getResourceAllocations(resourceId, t).stream() | ||
143 | + .filter(a -> isSubjectToPrint(a)) | ||
144 | + .forEach(a -> print("%s%s allocated by %s", Strings.repeat(" ", level + 1), | ||
145 | + a.resource().valueAs(Object.class).orElse(""), asVerboseString(a.consumer()))); | ||
146 | + | ||
147 | + } | ||
148 | + } | ||
109 | 149 | ||
110 | - DiscreteResourceId resource = Resources.discrete(did, num).id(); | 150 | + private boolean isSubjectToPrint(ResourceAllocation allocation) { |
111 | - if (lambda) { | 151 | + if (!intentsToPrint.isEmpty() |
112 | - //print("Lambda resources:"); | 152 | + && allocation.consumer() instanceof IntentId |
113 | - Collection<ResourceAllocation> allocations | 153 | + && !intentsToPrint.contains(allocation.consumer().toString())) { |
114 | - = resourceService.getResourceAllocations(resource, OchSignal.class); | 154 | + return false; |
155 | + } | ||
115 | 156 | ||
116 | - for (ResourceAllocation a : allocations) { | 157 | + if (!typesToPrint.isEmpty() |
117 | - print("%s%s allocated by %s", Strings.repeat(" ", level + 1), | 158 | + && !typesToPrint.contains(allocation.resource().simpleTypeName())) { |
118 | - a.resource().valueAs(Object.class).orElse(""), asVerboseString(a.consumer())); | 159 | + return false; |
119 | - } | ||
120 | } | 160 | } |
161 | + | ||
162 | + return true; | ||
121 | } | 163 | } |
122 | 164 | ||
123 | /** | 165 | /** | ... | ... |
-
Please register or login to post a comment