K - public class TurbineDataDispatcher<K extends TurbineData>
extends java.lang.Object
InstanceMonitor connections to TurbineDataHandler listeners.
When registering a TurbineDataHandler with the dispatcher, one must specify the Instance or host that the handler is interested in receiving data from.
The dispatcher maintains a HandlerQueueTuple object for each registered handler and hence all handlers can receive data from multiple InstanceMonitor objects.
This is how the ClusterMonitor object actually works. For each Instance that it needs to monitor, it opens a connection to that host using
an InstanceMonitor and then stores that object in a MonitorConsole for later use and discovery. The ClusterMonitor then also registers it's {TurbineDataHandler
as a listener to that host in the dispatcher so that it can receive events. This way a single handler can be registered for multiple host monitors.
Note that another use of the dispatcher is the opposite case where multiple listeners can express interest in data from the same host. In this case
we can have multiple TurbineDataHandler objects registered to the same InstanceMonitor via the dispatcher.
InstanceMonitor| Modifier and Type | Class and Description |
|---|---|
static class |
TurbineDataDispatcher.UnitTest |
| Constructor and Description |
|---|
TurbineDataDispatcher(java.lang.String name)
Public constructor
|
| Modifier and Type | Method and Description |
|---|---|
void |
deregisterEventHandler(java.lang.String handlerName)
De register an event listener
|
void |
deregisterEventHandler(TurbineDataHandler<K> handler)
Deregister an event listener
|
TurbineDataHandler<K> |
findHandlerForHost(Instance host,
java.lang.String handlerName)
Helper method to check if a handler is registered for a host.
|
java.util.Set<java.lang.String> |
getAllHandlerNames()
Helpful method used to print out all the handler names.
|
java.lang.String |
getName() |
void |
handleHostLost(Instance host)
This is meant to be called when a monitor is shutting down.
|
void |
pushData(java.util.Collection<java.lang.String> handlers,
java.util.Collection<K> statsData)
Method that pushes data to a collection of handlers directly
|
void |
pushData(java.util.Collection<java.lang.String> handlers,
K statsData) |
boolean |
pushData(Instance host,
java.util.Collection<K> statsData)
Common loop life-cycle logic.
|
boolean |
pushData(Instance host,
K statsData) |
void |
registerEventHandler(Instance host,
TurbineDataHandler<K> handler)
Register event listener to this host
|
boolean |
running() |
void |
stopDispatcher()
Stop the dispatcher.
|
public TurbineDataDispatcher(java.lang.String name)
public java.lang.String getName()
public void handleHostLost(Instance host)
host - public void registerEventHandler(Instance host, TurbineDataHandler<K> handler)
host - handler - public void deregisterEventHandler(java.lang.String handlerName)
handlerName - public void deregisterEventHandler(TurbineDataHandler<K> handler)
handler - public TurbineDataHandler<K> findHandlerForHost(Instance host, java.lang.String handlerName)
host - handlerName - public boolean pushData(Instance host, java.util.Collection<K> statsData)
This will asynchronously invoke handleData on all listeners. We do it asynchronously because we can potentially have quite a few handlers and some of them with delays which we don't want to have impact all other handlers.
host - statsData - java.lang.InterruptedExceptionpublic void pushData(java.util.Collection<java.lang.String> handlers,
java.util.Collection<K> statsData)
handlers - statsData - public void pushData(java.util.Collection<java.lang.String> handlers,
K statsData)
public void stopDispatcher()
public boolean running()
public java.util.Set<java.lang.String> getAllHandlerNames()