Simon Hunt
Committed by Gerrit Code Review

ONOS-4971: Synthetic Link Data -- WIP

- adding CLI commands for dumping Model Cache contents.

Change-Id: I28dfe179835de6cd0c5356faf87af46a239eb772
...@@ -261,6 +261,15 @@ public class UiTopology extends UiElement { ...@@ -261,6 +261,15 @@ public class UiTopology extends UiElement {
261 } 261 }
262 262
263 /** 263 /**
264 + * Returns all links in the model.
265 + *
266 + * @return all links
267 + */
268 + public Set<UiLink> allLinks() {
269 + return new HashSet<>(linkLookup.values());
270 + }
271 +
272 + /**
264 * Returns the link with the specified identifier, or null if no such 273 * Returns the link with the specified identifier, or null if no such
265 * link exists. 274 * link exists.
266 * 275 *
...@@ -302,6 +311,15 @@ public class UiTopology extends UiElement { ...@@ -302,6 +311,15 @@ public class UiTopology extends UiElement {
302 } 311 }
303 312
304 /** 313 /**
314 + * Returns all hosts in the model.
315 + *
316 + * @return all hosts
317 + */
318 + public Set<UiHost> allHosts() {
319 + return new HashSet<>(hostLookup.values());
320 + }
321 +
322 + /**
305 * Returns the host with the specified identifier, or null if no such 323 * Returns the host with the specified identifier, or null if no such
306 * host exists. 324 * host exists.
307 * 325 *
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.ui.impl.topo.cli;
18 +
19 +import org.onosproject.cli.AbstractShellCommand;
20 +import org.onosproject.ui.model.topo.UiElement;
21 +
22 +import java.util.ArrayList;
23 +import java.util.Collections;
24 +import java.util.Comparator;
25 +import java.util.List;
26 +import java.util.Set;
27 +
28 +/**
29 + * Base class for model cache CLI commands.
30 + */
31 +abstract class AbstractElementCommand extends AbstractShellCommand {
32 +
33 + /**
34 + * Built in comparator for elements.
35 + */
36 + private static final Comparator<UiElement> ELEMENT_COMPARATOR =
37 + (o1, o2) -> o1.idAsString().compareTo(o2.idAsString());
38 +
39 + /**
40 + * Returns the given elements in a list, sorted by string representation
41 + * of the identifiers.
42 + *
43 + * @param elements the elements to sort
44 + * @return the sorted elements
45 + */
46 + protected List<UiElement> sorted(Set<? extends UiElement> elements) {
47 + List<UiElement> list = new ArrayList<>(elements);
48 + Collections.sort(list, ELEMENT_COMPARATOR);
49 + return list;
50 + }
51 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.ui.impl.topo.cli;
18 +
19 +import org.apache.karaf.shell.commands.Command;
20 +import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
21 +
22 +/**
23 + * CLI command to list the UiDevices stored in the ModelCache.
24 + */
25 +@Command(scope = "onos", name = "ui-cache-devices",
26 + description = "Lists UiDevices in the Model Cache")
27 +public class ListDevices extends AbstractElementCommand {
28 +
29 + @Override
30 + protected void execute() {
31 + UiSharedTopologyModel model = get(UiSharedTopologyModel.class);
32 + sorted(model.getDevices()).forEach(d -> print("%s", d));
33 + }
34 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.ui.impl.topo.cli;
18 +
19 +import org.apache.karaf.shell.commands.Command;
20 +import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
21 +
22 +/**
23 + * CLI command to list the UiH0osts stored in the ModelCache.
24 + */
25 +@Command(scope = "onos", name = "ui-cache-hosts",
26 + description = "Lists UiHosts in the Model Cache")
27 +public class ListHosts extends AbstractElementCommand {
28 +
29 + @Override
30 + protected void execute() {
31 + UiSharedTopologyModel model = get(UiSharedTopologyModel.class);
32 + sorted(model.getHosts()).forEach(h -> print("%s", h));
33 + }
34 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.ui.impl.topo.cli;
18 +
19 +import org.apache.karaf.shell.commands.Command;
20 +import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
21 +
22 +/**
23 + * CLI command to list the UiLinks stored in the ModelCache.
24 + */
25 +@Command(scope = "onos", name = "ui-cache-links",
26 + description = "Lists UiLinks in the Model Cache")
27 +public class ListLinks extends AbstractElementCommand {
28 +
29 + @Override
30 + protected void execute() {
31 + UiSharedTopologyModel model = get(UiSharedTopologyModel.class);
32 + sorted(model.getLinks()).forEach(l -> print("%s", l));
33 + }
34 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.ui.impl.topo.cli;
18 +
19 +import org.apache.karaf.shell.commands.Command;
20 +import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
21 +
22 +/**
23 + * CLI command to list the UiClusterMembers stored in the ModelCache.
24 + */
25 +@Command(scope = "onos", name = "ui-cache-members",
26 + description = "Lists UiClusterMembers in the Model Cache")
27 +public class ListMembers extends AbstractElementCommand {
28 +
29 + @Override
30 + protected void execute() {
31 + UiSharedTopologyModel model = get(UiSharedTopologyModel.class);
32 + // note: getClusterMembers() returns an already sorted list...
33 + model.getClusterMembers().forEach(m -> print("%s", m));
34 + }
35 +}
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
17 package org.onosproject.ui.impl.topo.cli; 17 package org.onosproject.ui.impl.topo.cli;
18 18
19 import org.apache.karaf.shell.commands.Command; 19 import org.apache.karaf.shell.commands.Command;
20 -import org.onosproject.cli.AbstractShellCommand;
21 import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel; 20 import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
22 21
23 /** 22 /**
...@@ -25,11 +24,11 @@ import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel; ...@@ -25,11 +24,11 @@ import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
25 */ 24 */
26 @Command(scope = "onos", name = "ui-cache-regions", 25 @Command(scope = "onos", name = "ui-cache-regions",
27 description = "Lists UiRegions in the Model Cache") 26 description = "Lists UiRegions in the Model Cache")
28 -public class ListRegions extends AbstractShellCommand { 27 +public class ListRegions extends AbstractElementCommand {
29 28
30 @Override 29 @Override
31 protected void execute() { 30 protected void execute() {
32 UiSharedTopologyModel model = get(UiSharedTopologyModel.class); 31 UiSharedTopologyModel model = get(UiSharedTopologyModel.class);
33 - model.getRegions().forEach(r -> print("%s", r)); 32 + sorted(model.getRegions()).forEach(r -> print("%s", r));
34 } 33 }
35 } 34 }
......
...@@ -298,6 +298,10 @@ class ModelCache { ...@@ -298,6 +298,10 @@ class ModelCache {
298 } 298 }
299 } 299 }
300 300
301 + Set<UiDevice> getAllDevices() {
302 + return uiTopology.allDevices();
303 + }
304 +
301 305
302 // === LINKS 306 // === LINKS
303 307
...@@ -357,6 +361,9 @@ class ModelCache { ...@@ -357,6 +361,9 @@ class ModelCache {
357 } 361 }
358 } 362 }
359 363
364 + Set<UiLink> getAllLinks() {
365 + return uiTopology.allLinks();
366 + }
360 367
361 // === HOSTS 368 // === HOSTS
362 369
...@@ -460,6 +467,10 @@ class ModelCache { ...@@ -460,6 +467,10 @@ class ModelCache {
460 } 467 }
461 } 468 }
462 469
470 + Set<UiHost> getAllHosts() {
471 + return uiTopology.allHosts();
472 + }
473 +
463 474
464 /** 475 /**
465 * Refreshes the internal state. 476 * Refreshes the internal state.
......
...@@ -63,6 +63,9 @@ import org.onosproject.net.topology.TopologyService; ...@@ -63,6 +63,9 @@ import org.onosproject.net.topology.TopologyService;
63 import org.onosproject.ui.impl.topo.UiTopoSession; 63 import org.onosproject.ui.impl.topo.UiTopoSession;
64 import org.onosproject.ui.model.ServiceBundle; 64 import org.onosproject.ui.model.ServiceBundle;
65 import org.onosproject.ui.model.topo.UiClusterMember; 65 import org.onosproject.ui.model.topo.UiClusterMember;
66 +import org.onosproject.ui.model.topo.UiDevice;
67 +import org.onosproject.ui.model.topo.UiHost;
68 +import org.onosproject.ui.model.topo.UiLink;
66 import org.onosproject.ui.model.topo.UiRegion; 69 import org.onosproject.ui.model.topo.UiRegion;
67 import org.slf4j.Logger; 70 import org.slf4j.Logger;
68 import org.slf4j.LoggerFactory; 71 import org.slf4j.LoggerFactory;
...@@ -200,7 +203,14 @@ public final class UiSharedTopologyModel ...@@ -200,7 +203,14 @@ public final class UiSharedTopologyModel
200 // Methods for topo session (or CLI) to use to get information from us 203 // Methods for topo session (or CLI) to use to get information from us
201 204
202 /** 205 /**
203 - * Returns the list of cluster members stored in our model cache. 206 + * Refreshes the cache's internal state.
207 + */
208 + public void refresh() {
209 + cache.refresh();
210 + }
211 +
212 + /**
213 + * Returns the list of cluster members stored in the model cache.
204 * 214 *
205 * @return list of cluster members 215 * @return list of cluster members
206 */ 216 */
...@@ -209,7 +219,7 @@ public final class UiSharedTopologyModel ...@@ -209,7 +219,7 @@ public final class UiSharedTopologyModel
209 } 219 }
210 220
211 /** 221 /**
212 - * Returns the set of regions stored in our model cache. 222 + * Returns the set of regions stored in the model cache.
213 * 223 *
214 * @return set of regions 224 * @return set of regions
215 */ 225 */
...@@ -237,10 +247,30 @@ public final class UiSharedTopologyModel ...@@ -237,10 +247,30 @@ public final class UiSharedTopologyModel
237 } 247 }
238 248
239 /** 249 /**
240 - * Refreshes the cache's internal state. 250 + * Returns the set of devices stored in the model cache.
251 + *
252 + * @return set of devices
241 */ 253 */
242 - public void refresh() { 254 + public Set<UiDevice> getDevices() {
243 - cache.refresh(); 255 + return cache.getAllDevices();
256 + }
257 +
258 + /**
259 + * Returns the set of hosts stored in the model cache.
260 + *
261 + * @return set of hosts
262 + */
263 + public Set<UiHost> getHosts() {
264 + return cache.getAllHosts();
265 + }
266 +
267 + /**
268 + * Returns the set of links stored in the model cache.
269 + *
270 + * @return set of links
271 + */
272 + public Set<UiLink> getLinks() {
273 + return cache.getAllLinks();
244 } 274 }
245 275
246 // ===================================================================== 276 // =====================================================================
......
...@@ -18,8 +18,20 @@ ...@@ -18,8 +18,20 @@
18 18
19 <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0"> 19 <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
20 <command> 20 <command>
21 + <action class="org.onosproject.ui.impl.topo.cli.ListMembers"/>
22 + </command>
23 + <command>
21 <action class="org.onosproject.ui.impl.topo.cli.ListRegions"/> 24 <action class="org.onosproject.ui.impl.topo.cli.ListRegions"/>
22 </command> 25 </command>
26 + <command>
27 + <action class="org.onosproject.ui.impl.topo.cli.ListDevices"/>
28 + </command>
29 + <command>
30 + <action class="org.onosproject.ui.impl.topo.cli.ListHosts"/>
31 + </command>
32 + <command>
33 + <action class="org.onosproject.ui.impl.topo.cli.ListLinks"/>
34 + </command>
23 </command-bundle> 35 </command-bundle>
24 36
25 <!--<bean id="macIDCompleter" class="org.onosproject.dhcp.cli.MacIdCompleter"/>--> 37 <!--<bean id="macIDCompleter" class="org.onosproject.dhcp.cli.MacIdCompleter"/>-->
......