Committed by
Gerrit Code Review
GUI fixes/breaks.
Change-Id: Ic5c8b087cc32506162153b2756a677c7d9e3bdd7
Showing
6 changed files
with
98 additions
and
45 deletions
| ... | @@ -66,7 +66,7 @@ import static org.slf4j.LoggerFactory.getLogger; | ... | @@ -66,7 +66,7 @@ import static org.slf4j.LoggerFactory.getLogger; |
| 66 | public class DefaultTopologyProvider extends AbstractProvider | 66 | public class DefaultTopologyProvider extends AbstractProvider |
| 67 | implements TopologyProvider { | 67 | implements TopologyProvider { |
| 68 | 68 | ||
| 69 | - private static final int MAX_THREADS = 8; | 69 | + private static final int MAX_THREADS = 32; |
| 70 | private static final int DEFAULT_MAX_EVENTS = 1000; | 70 | private static final int DEFAULT_MAX_EVENTS = 1000; |
| 71 | private static final int DEFAULT_MAX_IDLE_MS = 10; | 71 | private static final int DEFAULT_MAX_IDLE_MS = 10; |
| 72 | private static final int DEFAULT_MAX_BATCH_MS = 50; | 72 | private static final int DEFAULT_MAX_BATCH_MS = 50; | ... | ... |
tools/test/topos/topo-200sw-linkalarm.py
0 → 100644
| 1 | + | ||
| 2 | +from mininet.topo import Topo | ||
| 3 | + | ||
| 4 | +class MyTopo( Topo ): | ||
| 5 | + "10 'floating' switch topology" | ||
| 6 | + | ||
| 7 | + def __init__( self ): | ||
| 8 | + # Initialize topology | ||
| 9 | + Topo.__init__( self ) | ||
| 10 | + | ||
| 11 | + sw_list = [] | ||
| 12 | + swC = self.addSwitch('sc', dpid = 'ffffffff00000001') | ||
| 13 | + | ||
| 14 | + for i in range(1, 201): | ||
| 15 | + switch=self.addSwitch('s'+str(i), dpid = str(i).zfill(16)) | ||
| 16 | + self.addLink(switch,swC) | ||
| 17 | + | ||
| 18 | + sw_list.append(switch) | ||
| 19 | + | ||
| 20 | +topos = { 'mytopo': ( lambda: MyTopo() ) } |
| ... | @@ -33,6 +33,7 @@ import org.onlab.onos.net.intent.PathIntent; | ... | @@ -33,6 +33,7 @@ import org.onlab.onos.net.intent.PathIntent; |
| 33 | import org.onlab.onos.net.intent.PointToPointIntent; | 33 | import org.onlab.onos.net.intent.PointToPointIntent; |
| 34 | import org.onlab.onos.net.link.LinkService; | 34 | import org.onlab.onos.net.link.LinkService; |
| 35 | 35 | ||
| 36 | +import java.util.ArrayList; | ||
| 36 | import java.util.HashSet; | 37 | import java.util.HashSet; |
| 37 | import java.util.List; | 38 | import java.util.List; |
| 38 | import java.util.Set; | 39 | import java.util.Set; |
| ... | @@ -71,17 +72,19 @@ public class TopologyViewIntentFilter { | ... | @@ -71,17 +72,19 @@ public class TopologyViewIntentFilter { |
| 71 | * Finds all path (host-to-host or point-to-point) intents that pertains | 72 | * Finds all path (host-to-host or point-to-point) intents that pertains |
| 72 | * to the given hosts. | 73 | * to the given hosts. |
| 73 | * | 74 | * |
| 74 | - * @param hosts set of hosts to query by | 75 | + * @param hosts set of hosts to query by |
| 75 | - * @param devices set of devices to query by | 76 | + * @param devices set of devices to query by |
| 77 | + * @param sourceIntents collection of intents to search | ||
| 76 | * @return set of intents that 'match' all hosts and devices given | 78 | * @return set of intents that 'match' all hosts and devices given |
| 77 | */ | 79 | */ |
| 78 | - Set<Intent> findPathIntents(Set<Host> hosts, Set<Device> devices) { | 80 | + List<Intent> findPathIntents(Set<Host> hosts, Set<Device> devices, |
| 81 | + Iterable<Intent> sourceIntents) { | ||
| 79 | // Derive from this the set of edge connect points. | 82 | // Derive from this the set of edge connect points. |
| 80 | Set<ConnectPoint> edgePoints = getEdgePoints(hosts); | 83 | Set<ConnectPoint> edgePoints = getEdgePoints(hosts); |
| 81 | 84 | ||
| 82 | // Iterate over all intents and produce a set that contains only those | 85 | // Iterate over all intents and produce a set that contains only those |
| 83 | // intents that target all selected hosts or derived edge connect points. | 86 | // intents that target all selected hosts or derived edge connect points. |
| 84 | - return getIntents(hosts, devices, edgePoints); | 87 | + return getIntents(hosts, devices, edgePoints, sourceIntents); |
| 85 | } | 88 | } |
| 86 | 89 | ||
| 87 | 90 | ||
| ... | @@ -94,10 +97,11 @@ public class TopologyViewIntentFilter { | ... | @@ -94,10 +97,11 @@ public class TopologyViewIntentFilter { |
| 94 | return edgePoints; | 97 | return edgePoints; |
| 95 | } | 98 | } |
| 96 | 99 | ||
| 97 | - // Produces a set of intents that target all selected hosts, devices or connect points. | 100 | + // Produces a list of intents that target all selected hosts, devices or connect points. |
| 98 | - private Set<Intent> getIntents(Set<Host> hosts, Set<Device> devices, | 101 | + private List<Intent> getIntents(Set<Host> hosts, Set<Device> devices, |
| 99 | - Set<ConnectPoint> edgePoints) { | 102 | + Set<ConnectPoint> edgePoints, |
| 100 | - Set<Intent> intents = new HashSet<>(); | 103 | + Iterable<Intent> sourceIntents) { |
| 104 | + List<Intent> intents = new ArrayList<>(); | ||
| 101 | if (hosts.isEmpty() && devices.isEmpty()) { | 105 | if (hosts.isEmpty() && devices.isEmpty()) { |
| 102 | return intents; | 106 | return intents; |
| 103 | } | 107 | } |
| ... | @@ -105,7 +109,7 @@ public class TopologyViewIntentFilter { | ... | @@ -105,7 +109,7 @@ public class TopologyViewIntentFilter { |
| 105 | Set<OpticalConnectivityIntent> opticalIntents = new HashSet<>(); | 109 | Set<OpticalConnectivityIntent> opticalIntents = new HashSet<>(); |
| 106 | 110 | ||
| 107 | // Search through all intents and see if they are relevant to our search. | 111 | // Search through all intents and see if they are relevant to our search. |
| 108 | - for (Intent intent : intentService.getIntents()) { | 112 | + for (Intent intent : sourceIntents) { |
| 109 | if (intentService.getIntentState(intent.id()) == INSTALLED) { | 113 | if (intentService.getIntentState(intent.id()) == INSTALLED) { |
| 110 | boolean isRelevant = false; | 114 | boolean isRelevant = false; |
| 111 | if (intent instanceof HostToHostIntent) { | 115 | if (intent instanceof HostToHostIntent) { |
| ... | @@ -140,7 +144,7 @@ public class TopologyViewIntentFilter { | ... | @@ -140,7 +144,7 @@ public class TopologyViewIntentFilter { |
| 140 | } | 144 | } |
| 141 | 145 | ||
| 142 | // Indicates whether the specified intent involves all of the given hosts. | 146 | // Indicates whether the specified intent involves all of the given hosts. |
| 143 | - private boolean isIntentRelevantToHosts(HostToHostIntent intent, Set<Host> hosts) { | 147 | + private boolean isIntentRelevantToHosts(HostToHostIntent intent, Iterable<Host> hosts) { |
| 144 | for (Host host : hosts) { | 148 | for (Host host : hosts) { |
| 145 | HostId id = host.id(); | 149 | HostId id = host.id(); |
| 146 | // Bail if intent does not involve this host. | 150 | // Bail if intent does not involve this host. |
| ... | @@ -152,7 +156,7 @@ public class TopologyViewIntentFilter { | ... | @@ -152,7 +156,7 @@ public class TopologyViewIntentFilter { |
| 152 | } | 156 | } |
| 153 | 157 | ||
| 154 | // Indicates whether the specified intent involves all of the given devices. | 158 | // Indicates whether the specified intent involves all of the given devices. |
| 155 | - private boolean isIntentRelevantToDevices(Intent intent, Set<Device> devices) { | 159 | + private boolean isIntentRelevantToDevices(Intent intent, Iterable<Device> devices) { |
| 156 | List<Intent> installables = intentService.getInstallableIntents(intent.id()); | 160 | List<Intent> installables = intentService.getInstallableIntents(intent.id()); |
| 157 | for (Device device : devices) { | 161 | for (Device device : devices) { |
| 158 | if (!isIntentRelevantToDevice(installables, device)) { | 162 | if (!isIntentRelevantToDevice(installables, device)) { |
| ... | @@ -192,7 +196,8 @@ public class TopologyViewIntentFilter { | ... | @@ -192,7 +196,8 @@ public class TopologyViewIntentFilter { |
| 192 | return false; | 196 | return false; |
| 193 | } | 197 | } |
| 194 | 198 | ||
| 195 | - private boolean isIntentRelevant(PointToPointIntent intent, Set<ConnectPoint> edgePoints) { | 199 | + private boolean isIntentRelevant(PointToPointIntent intent, |
| 200 | + Iterable<ConnectPoint> edgePoints) { | ||
| 196 | for (ConnectPoint point : edgePoints) { | 201 | for (ConnectPoint point : edgePoints) { |
| 197 | // Bail if intent does not involve this edge point. | 202 | // Bail if intent does not involve this edge point. |
| 198 | if (!point.equals(intent.egressPoint()) && | 203 | if (!point.equals(intent.egressPoint()) && |
| ... | @@ -205,7 +210,7 @@ public class TopologyViewIntentFilter { | ... | @@ -205,7 +210,7 @@ public class TopologyViewIntentFilter { |
| 205 | 210 | ||
| 206 | // Indicates whether the specified intent involves all of the given edge points. | 211 | // Indicates whether the specified intent involves all of the given edge points. |
| 207 | private boolean isIntentRelevant(MultiPointToSinglePointIntent intent, | 212 | private boolean isIntentRelevant(MultiPointToSinglePointIntent intent, |
| 208 | - Set<ConnectPoint> edgePoints) { | 213 | + Iterable<ConnectPoint> edgePoints) { |
| 209 | for (ConnectPoint point : edgePoints) { | 214 | for (ConnectPoint point : edgePoints) { |
| 210 | // Bail if intent does not involve this edge point. | 215 | // Bail if intent does not involve this edge point. |
| 211 | if (!point.equals(intent.egressPoint()) && | 216 | if (!point.equals(intent.egressPoint()) && |
| ... | @@ -218,7 +223,7 @@ public class TopologyViewIntentFilter { | ... | @@ -218,7 +223,7 @@ public class TopologyViewIntentFilter { |
| 218 | 223 | ||
| 219 | // Indicates whether the specified intent involves all of the given edge points. | 224 | // Indicates whether the specified intent involves all of the given edge points. |
| 220 | private boolean isIntentRelevant(OpticalConnectivityIntent opticalIntent, | 225 | private boolean isIntentRelevant(OpticalConnectivityIntent opticalIntent, |
| 221 | - Set<Intent> intents) { | 226 | + Iterable<Intent> intents) { |
| 222 | Link ccSrc = getFirstLink(opticalIntent.getSrc(), false); | 227 | Link ccSrc = getFirstLink(opticalIntent.getSrc(), false); |
| 223 | Link ccDst = getFirstLink(opticalIntent.getDst(), true); | 228 | Link ccDst = getFirstLink(opticalIntent.getDst(), true); |
| 224 | 229 | ... | ... |
| ... | @@ -676,13 +676,16 @@ public abstract class TopologyViewMessages { | ... | @@ -676,13 +676,16 @@ public abstract class TopologyViewMessages { |
| 676 | List<Intent> installables = intentService.getInstallableIntents(intent.id()); | 676 | List<Intent> installables = intentService.getInstallableIntents(intent.id()); |
| 677 | if (installables != null) { | 677 | if (installables != null) { |
| 678 | for (Intent installable : installables) { | 678 | for (Intent installable : installables) { |
| 679 | - String cls = isOptical ? trafficClass.type + " optical" : trafficClass.type; | 679 | + String type = isOptical ? trafficClass.type + " optical" : trafficClass.type; |
| 680 | if (installable instanceof PathIntent) { | 680 | if (installable instanceof PathIntent) { |
| 681 | - classifyLinks(cls, biLinks, ((PathIntent) installable).path().links()); | 681 | + classifyLinks(type, biLinks, trafficClass.showTraffic, |
| 682 | + ((PathIntent) installable).path().links()); | ||
| 682 | } else if (installable instanceof LinkCollectionIntent) { | 683 | } else if (installable instanceof LinkCollectionIntent) { |
| 683 | - classifyLinks(cls, biLinks, ((LinkCollectionIntent) installable).links()); | 684 | + classifyLinks(type, biLinks, trafficClass.showTraffic, |
| 685 | + ((LinkCollectionIntent) installable).links()); | ||
| 684 | } else if (installable instanceof OpticalPathIntent) { | 686 | } else if (installable instanceof OpticalPathIntent) { |
| 685 | - classifyLinks(cls, biLinks, ((OpticalPathIntent) installable).path().links()); | 687 | + classifyLinks(type, biLinks, trafficClass.showTraffic, |
| 688 | + ((OpticalPathIntent) installable).path().links()); | ||
| 686 | } | 689 | } |
| 687 | } | 690 | } |
| 688 | } | 691 | } |
| ... | @@ -695,12 +698,14 @@ public abstract class TopologyViewMessages { | ... | @@ -695,12 +698,14 @@ public abstract class TopologyViewMessages { |
| 695 | // Adds the link segments (path or tree) associated with the specified | 698 | // Adds the link segments (path or tree) associated with the specified |
| 696 | // connectivity intent | 699 | // connectivity intent |
| 697 | private void classifyLinks(String type, Map<LinkKey, BiLink> biLinks, | 700 | private void classifyLinks(String type, Map<LinkKey, BiLink> biLinks, |
| 698 | - Iterable<Link> links) { | 701 | + boolean showTraffic, Iterable<Link> links) { |
| 699 | if (links != null) { | 702 | if (links != null) { |
| 700 | for (Link link : links) { | 703 | for (Link link : links) { |
| 701 | BiLink biLink = addLink(biLinks, link); | 704 | BiLink biLink = addLink(biLinks, link); |
| 702 | if (isInfrastructureEgress(link)) { | 705 | if (isInfrastructureEgress(link)) { |
| 703 | - biLink.addLoad(statService.load(link)); | 706 | + if (showTraffic) { |
| 707 | + biLink.addLoad(statService.load(link)); | ||
| 708 | + } | ||
| 704 | biLink.addClass(type); | 709 | biLink.addClass(type); |
| 705 | } | 710 | } |
| 706 | } | 711 | } |
| ... | @@ -862,12 +867,18 @@ public abstract class TopologyViewMessages { | ... | @@ -862,12 +867,18 @@ public abstract class TopologyViewMessages { |
| 862 | 867 | ||
| 863 | // Auxiliary carrier of data for requesting traffic message. | 868 | // Auxiliary carrier of data for requesting traffic message. |
| 864 | protected class TrafficClass { | 869 | protected class TrafficClass { |
| 870 | + public final boolean showTraffic; | ||
| 865 | public final String type; | 871 | public final String type; |
| 866 | - public final Set<Intent> intents; | 872 | + public final Iterable<Intent> intents; |
| 873 | + | ||
| 874 | + TrafficClass(String type, Iterable<Intent> intents) { | ||
| 875 | + this(type, intents, false); | ||
| 876 | + } | ||
| 867 | 877 | ||
| 868 | - TrafficClass(String type, Set<Intent> intents) { | 878 | + TrafficClass(String type, Iterable<Intent> intents, boolean showTraffic) { |
| 869 | this.type = type; | 879 | this.type = type; |
| 870 | this.intents = intents; | 880 | this.intents = intents; |
| 881 | + this.showTraffic = showTraffic; | ||
| 871 | } | 882 | } |
| 872 | } | 883 | } |
| 873 | 884 | ... | ... |
This diff is collapsed. Click to expand it.
| ... | @@ -145,8 +145,10 @@ | ... | @@ -145,8 +145,10 @@ |
| 145 | P: togglePorts, | 145 | P: togglePorts, |
| 146 | U: [unpin, 'Unpin node (hover mouse over)'], | 146 | U: [unpin, 'Unpin node (hover mouse over)'], |
| 147 | R: [resetPanZoom, 'Reset pan / zoom'], | 147 | R: [resetPanZoom, 'Reset pan / zoom'], |
| 148 | - V: [showTrafficAction, 'Show related traffic'], | 148 | + V: [showRelatedIntentsAction, 'Show all related intents'], |
| 149 | - A: [showAllTrafficAction, 'Show all traffic'], | 149 | + N: [showNextIntentAction, 'Show next related intent'], |
| 150 | + W: [showSelectedIntentTrafficAction, 'Monitor traffic of selected intent'], | ||
| 151 | + A: [showAllTrafficAction, 'Monitor all traffic'], | ||
| 150 | F: [showDeviceLinkFlowsAction, 'Show device link flows'], | 152 | F: [showDeviceLinkFlowsAction, 'Show device link flows'], |
| 151 | X: [toggleNodeLock, 'Lock / unlock node positions'], | 153 | X: [toggleNodeLock, 'Lock / unlock node positions'], |
| 152 | Z: [toggleOblique, 'Toggle oblique view (Experimental)'], | 154 | Z: [toggleOblique, 'Toggle oblique view (Experimental)'], |
| ... | @@ -209,10 +211,11 @@ | ... | @@ -209,10 +211,11 @@ |
| 209 | oblique = false; | 211 | oblique = false; |
| 210 | 212 | ||
| 211 | // constants | 213 | // constants |
| 212 | - var hoverModeAll = 1, | 214 | + var hoverModeNone = 0, |
| 215 | + hoverModeAll = 1, | ||
| 213 | hoverModeFlows = 2, | 216 | hoverModeFlows = 2, |
| 214 | hoverModeIntents = 3, | 217 | hoverModeIntents = 3, |
| 215 | - hoverMode = hoverModeFlows; | 218 | + hoverMode = hoverModeNone; |
| 216 | 219 | ||
| 217 | // D3 selections | 220 | // D3 selections |
| 218 | var svg, | 221 | var svg, |
| ... | @@ -394,7 +397,7 @@ | ... | @@ -394,7 +397,7 @@ |
| 394 | cancelSummary(); | 397 | cancelSummary(); |
| 395 | stopAntTimer(); | 398 | stopAntTimer(); |
| 396 | } else { | 399 | } else { |
| 397 | - hoverMode = hoverModeFlows; | 400 | + hoverMode = hoverModeNone; |
| 398 | } | 401 | } |
| 399 | } | 402 | } |
| 400 | 403 | ||
| ... | @@ -1219,22 +1222,20 @@ | ... | @@ -1219,22 +1222,20 @@ |
| 1219 | } | 1222 | } |
| 1220 | 1223 | ||
| 1221 | function requestTrafficForMode() { | 1224 | function requestTrafficForMode() { |
| 1222 | - if (hoverMode === hoverModeAll) { | 1225 | + if (hoverMode === hoverModeFlows) { |
| 1223 | - requestAllTraffic(); | ||
| 1224 | - } else if (hoverMode === hoverModeFlows) { | ||
| 1225 | requestDeviceLinkFlows(); | 1226 | requestDeviceLinkFlows(); |
| 1226 | } else if (hoverMode === hoverModeIntents) { | 1227 | } else if (hoverMode === hoverModeIntents) { |
| 1227 | - requestSelectTraffic(); | 1228 | + requestRelatedIntents(); |
| 1228 | } | 1229 | } |
| 1229 | } | 1230 | } |
| 1230 | 1231 | ||
| 1231 | - function showTrafficAction() { | 1232 | + function showRelatedIntentsAction() { |
| 1232 | hoverMode = hoverModeIntents; | 1233 | hoverMode = hoverModeIntents; |
| 1233 | - requestSelectTraffic(); | 1234 | + requestRelatedIntents(); |
| 1234 | - flash('Related Traffic'); | 1235 | + flash('Related intents'); |
| 1235 | } | 1236 | } |
| 1236 | 1237 | ||
| 1237 | - function requestSelectTraffic() { | 1238 | + function requestRelatedIntents() { |
| 1238 | function hoverValid() { | 1239 | function hoverValid() { |
| 1239 | return hoverMode === hoverModeIntents && | 1240 | return hoverMode === hoverModeIntents && |
| 1240 | hovered && | 1241 | hovered && |
| ... | @@ -1242,13 +1243,24 @@ | ... | @@ -1242,13 +1243,24 @@ |
| 1242 | } | 1243 | } |
| 1243 | 1244 | ||
| 1244 | if (validateSelectionContext()) { | 1245 | if (validateSelectionContext()) { |
| 1245 | - sendMessage('requestTraffic', { | 1246 | + sendMessage('requestRelatedIntents', { |
| 1246 | ids: selectOrder, | 1247 | ids: selectOrder, |
| 1247 | hover: hoverValid() ? hovered.id : '' | 1248 | hover: hoverValid() ? hovered.id : '' |
| 1248 | }); | 1249 | }); |
| 1249 | } | 1250 | } |
| 1250 | } | 1251 | } |
| 1251 | 1252 | ||
| 1253 | + function showNextIntentAction() { | ||
| 1254 | + hoverMode = hoverModeNone; | ||
| 1255 | + sendMessage('requestNextRelatedIntent', {}); | ||
| 1256 | + flash('Next related intent'); | ||
| 1257 | + } | ||
| 1258 | + | ||
| 1259 | + function showSelectedIntentTrafficAction() { | ||
| 1260 | + hoverMode = hoverModeNone; | ||
| 1261 | + sendMessage('requestSelectedIntentTraffic', {}); | ||
| 1262 | + flash('Monitoring selected intent'); | ||
| 1263 | + } | ||
| 1252 | 1264 | ||
| 1253 | function showDeviceLinkFlowsAction() { | 1265 | function showDeviceLinkFlowsAction() { |
| 1254 | hoverMode = hoverModeFlows; | 1266 | hoverMode = hoverModeFlows; |
| ... | @@ -2010,13 +2022,17 @@ | ... | @@ -2010,13 +2022,17 @@ |
| 2010 | } | 2022 | } |
| 2011 | 2023 | ||
| 2012 | function nodeMouseOver(d) { | 2024 | function nodeMouseOver(d) { |
| 2013 | - hovered = d; | 2025 | + if (hovered != d) { |
| 2014 | - requestTrafficForMode(); | 2026 | + hovered = d; |
| 2027 | + requestTrafficForMode(); | ||
| 2028 | + } | ||
| 2015 | } | 2029 | } |
| 2016 | 2030 | ||
| 2017 | function nodeMouseOut(d) { | 2031 | function nodeMouseOut(d) { |
| 2018 | - hovered = null; | 2032 | + if (hovered != null) { |
| 2019 | - requestTrafficForMode(); | 2033 | + hovered = null; |
| 2034 | + requestTrafficForMode(); | ||
| 2035 | + } | ||
| 2020 | } | 2036 | } |
| 2021 | 2037 | ||
| 2022 | function addHostIcon(node, radius, iid) { | 2038 | function addHostIcon(node, radius, iid) { |
| ... | @@ -2498,7 +2514,7 @@ | ... | @@ -2498,7 +2514,7 @@ |
| 2498 | wsTrace('rx', msg); | 2514 | wsTrace('rx', msg); |
| 2499 | } | 2515 | } |
| 2500 | function wsTrace(rxtx, msg) { | 2516 | function wsTrace(rxtx, msg) { |
| 2501 | - console.log('[' + rxtx + '] ' + msg); | 2517 | + // console.log('[' + rxtx + '] ' + msg); |
| 2502 | } | 2518 | } |
| 2503 | 2519 | ||
| 2504 | // NOTE: Temporary hardcoded example for showing detail pane | 2520 | // NOTE: Temporary hardcoded example for showing detail pane |
| ... | @@ -2620,7 +2636,6 @@ | ... | @@ -2620,7 +2636,6 @@ |
| 2620 | emptySelect(); | 2636 | emptySelect(); |
| 2621 | } else if (nSel === 1) { | 2637 | } else if (nSel === 1) { |
| 2622 | singleSelect(); | 2638 | singleSelect(); |
| 2623 | - requestTrafficForMode(); | ||
| 2624 | } else { | 2639 | } else { |
| 2625 | multiSelect(); | 2640 | multiSelect(); |
| 2626 | } | 2641 | } |
| ... | @@ -2635,12 +2650,14 @@ | ... | @@ -2635,12 +2650,14 @@ |
| 2635 | function singleSelect() { | 2650 | function singleSelect() { |
| 2636 | // NOTE: detail is shown from showDetails event callback | 2651 | // NOTE: detail is shown from showDetails event callback |
| 2637 | requestDetails(); | 2652 | requestDetails(); |
| 2653 | + cancelTraffic(); | ||
| 2638 | requestTrafficForMode(); | 2654 | requestTrafficForMode(); |
| 2639 | } | 2655 | } |
| 2640 | 2656 | ||
| 2641 | function multiSelect() { | 2657 | function multiSelect() { |
| 2642 | haveDetails = true; | 2658 | haveDetails = true; |
| 2643 | populateMultiSelect(); | 2659 | populateMultiSelect(); |
| 2660 | + cancelTraffic(); | ||
| 2644 | requestTrafficForMode(); | 2661 | requestTrafficForMode(); |
| 2645 | } | 2662 | } |
| 2646 | 2663 | ||
| ... | @@ -2738,7 +2755,7 @@ | ... | @@ -2738,7 +2755,7 @@ |
| 2738 | function addSingleSelectActions(data) { | 2755 | function addSingleSelectActions(data) { |
| 2739 | detailPane.append('hr'); | 2756 | detailPane.append('hr'); |
| 2740 | // always want to allow 'show traffic' | 2757 | // always want to allow 'show traffic' |
| 2741 | - addAction(detailPane, 'Show Related Traffic', showTrafficAction); | 2758 | + addAction(detailPane, 'Show Related Traffic', showRelatedIntentsAction); |
| 2742 | 2759 | ||
| 2743 | if (data.type === 'switch') { | 2760 | if (data.type === 'switch') { |
| 2744 | addAction(detailPane, 'Show Device Flows', showDeviceLinkFlowsAction); | 2761 | addAction(detailPane, 'Show Device Flows', showDeviceLinkFlowsAction); |
| ... | @@ -2748,7 +2765,7 @@ | ... | @@ -2748,7 +2765,7 @@ |
| 2748 | function addMultiSelectActions() { | 2765 | function addMultiSelectActions() { |
| 2749 | detailPane.append('hr'); | 2766 | detailPane.append('hr'); |
| 2750 | // always want to allow 'show traffic' | 2767 | // always want to allow 'show traffic' |
| 2751 | - addAction(detailPane, 'Show Related Traffic', showTrafficAction); | 2768 | + addAction(detailPane, 'Show Related Traffic', showRelatedIntentsAction); |
| 2752 | // if exactly two hosts are selected, also want 'add host intent' | 2769 | // if exactly two hosts are selected, also want 'add host intent' |
| 2753 | if (nSel() === 2 && allSelectionsClass('host')) { | 2770 | if (nSel() === 2 && allSelectionsClass('host')) { |
| 2754 | addAction(detailPane, 'Create Host-to-Host Flow', addHostIntentAction); | 2771 | addAction(detailPane, 'Create Host-to-Host Flow', addHostIntentAction); | ... | ... |
-
Please register or login to post a comment