ONOS-6259: Topo2 - Implement server-side highlighting model

- (Still WIP)
- Cleaned up createHandlersAndOverlays() in UiWebSocket.
- Augmented handlerCrossConnects to link Topo2MH to Topo2TrafficMH.
- Topo2Stop event now shuts down background traffic monitoring.

Change-Id: I87e7151ea813b7514521201ecffcf2c9eed22cd7
This commit is contained in:
Simon Hunt 2017-05-04 13:04:50 -07:00
parent 33a847b932
commit 2d7cd6fc33
3 changed files with 63 additions and 23 deletions

View File

@ -25,6 +25,7 @@ import org.onosproject.cluster.ClusterService;
import org.onosproject.cluster.ControllerNode;
import org.onosproject.ui.GlyphConstants;
import org.onosproject.ui.UiConnection;
import org.onosproject.ui.UiExtension;
import org.onosproject.ui.UiExtensionService;
import org.onosproject.ui.UiMessageHandler;
import org.onosproject.ui.UiMessageHandlerFactory;
@ -33,6 +34,7 @@ import org.onosproject.ui.UiTopoLayoutService;
import org.onosproject.ui.UiTopoOverlayFactory;
import org.onosproject.ui.impl.topo.Topo2Jsonifier;
import org.onosproject.ui.impl.topo.Topo2OverlayCache;
import org.onosproject.ui.impl.topo.Topo2TrafficMessageHandler;
import org.onosproject.ui.impl.topo.Topo2ViewMessageHandler;
import org.onosproject.ui.impl.topo.UiTopoSession;
import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
@ -249,6 +251,8 @@ public class UiWebSocket
overlayCache = new TopoOverlayCache();
overlay2Cache = new Topo2OverlayCache();
Map<Class<?>, UiMessageHandler> handlerInstances = new HashMap<>();
UiExtensionService service = directory.get(UiExtensionService.class);
service.getExtensions().forEach(ext -> {
UiMessageHandlerFactory factory = ext.messageHandlerFactory();
@ -257,21 +261,23 @@ public class UiWebSocket
try {
handler.init(this, directory);
handler.messageTypes().forEach(type -> handlers.put(type, handler));
handlerInstances.put(handler.getClass(), handler);
// need to inject the overlay cache into topology message handler
if (handler instanceof TopologyViewMessageHandler) {
((TopologyViewMessageHandler) handler).setOverlayCache(overlayCache);
}
if (handler instanceof Topo2ViewMessageHandler) {
((Topo2ViewMessageHandler) handler).setOverlayCache(overlay2Cache);
}
} catch (Exception e) {
log.warn("Unable to setup handler {} due to", handler, e);
}
});
}
registerOverlays(ext);
});
handlerCrossConnects(handlerInstances);
log.debug("#handlers = {}, #overlays = {}", handlers.size(), overlayCache.size());
}
private void registerOverlays(UiExtension ext) {
UiTopoOverlayFactory overlayFactory = ext.topoOverlayFactory();
if (overlayFactory != null) {
overlayFactory.newOverlays().forEach(overlayCache::add);
@ -281,9 +287,29 @@ public class UiWebSocket
if (overlay2Factory != null) {
overlay2Factory.newOverlays().forEach(overlay2Cache::add);
}
});
log.debug("#handlers = {}, #overlays = {}", handlers.size(),
overlayCache.size());
}
private void handlerCrossConnects(Map<Class<?>, UiMessageHandler> handlers) {
TopologyViewMessageHandler topomh = (TopologyViewMessageHandler)
handlers.get(TopologyViewMessageHandler.class);
if (topomh != null) {
topomh.setOverlayCache(overlayCache);
}
Topo2ViewMessageHandler topo2mh = (Topo2ViewMessageHandler)
handlers.get(Topo2ViewMessageHandler.class);
if (topo2mh != null) {
topo2mh.setOverlayCache(overlay2Cache);
// We also need a link to Topo2Traffic
Topo2TrafficMessageHandler topo2traffic = (Topo2TrafficMessageHandler)
handlers.get(Topo2TrafficMessageHandler.class);
if (topo2traffic != null) {
topo2mh.setTrafficHandler(topo2traffic);
} else {
log.error("No topo2 traffic handler found");
}
}
}
// Destroys message handlers.
@ -325,4 +351,3 @@ public class UiWebSocket
}
}

View File

@ -85,6 +85,13 @@ public class Topo2TrafficMessageHandler extends UiMessageHandler {
);
}
/**
* Shuts down the background traffic monitoring task.
*/
void ceaseAndDesist() {
traffic.stopMonitoring();
}
// ==================================================================
private final class Topo2AllTraffic extends RequestHandler {

View File

@ -72,6 +72,7 @@ public class Topo2ViewMessageHandler extends UiMessageHandler {
private UiTopoSession topoSession;
private Topo2Jsonifier t2json;
private Topo2OverlayCache overlay2Cache;
private Topo2TrafficMessageHandler trafficHandler;
@Override
@ -93,6 +94,15 @@ public class Topo2ViewMessageHandler extends UiMessageHandler {
this.overlay2Cache = overlay2Cache;
}
/**
* Sets a reference to the traffic message handler.
*
* @param traffic the traffic message handler instance
*/
public void setTrafficHandler(Topo2TrafficMessageHandler traffic) {
trafficHandler = traffic;
}
@Override
protected Collection<RequestHandler> createRequestHandlers() {
@ -202,12 +212,10 @@ public class Topo2ViewMessageHandler extends UiMessageHandler {
// client view has gone away; so shut down server-side processing
log.debug("topo2Stop: {}", payload);
// TODO: tell traffic monitor to stop monitoring...
// this requires this handler to know about traffic handler!!
trafficHandler.ceaseAndDesist();
// OLD CODE DID THE FOLLOWING...
// stopSummaryMonitoring();
// traffic.stopMonitoring();
}
}