mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-23 13:21:21 +02:00
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:
parent
33a847b932
commit
2d7cd6fc33
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user