Data Collection and Communications Topology
Topology Overview

The data collection topology consists of a single secure daemon per host, a session for each workbench client connected to that host, and various data collectors that are controlled by the workbench client. The collection stack is illustrated below. There is a two way control channel that is provided to provide two way messaging between any of the components. There is also a unidirectional data channel that is optimized to collect data from the application under test and propogate this data back to the Eclipse workbench.

As much as possible, the entire stack is written in Java. However, due to the current restrictions in the Java programming model, there are several native interfaces that are used by the components that make up the for process management, local communications (local communications do not use TPC), and the data channel.




Daemon Process

The daemon is the bootstrapping point for all connections to the node hosting the application under test. Connections are accepted from local and remote workbench instances. The connections may be authenticated and encrypted based upon the authentication rules provided to the daemon. Once the connection is successfully authenticated, the daemon is responsible for creating a properly configured session for all further communications from the connected client.

The daemon is also the central registration point for all data collection elements on the node. When data collectors are created by the application under test, they must register with the daemon so that they can be discovered by remote clients.



Session Process
Sessions are essentially the same as the daemon. The primary difference is that the session has a configuration that is a subset of the master configuration provided to the daemon. The session is spawned into a separate process in order to localize all the functions for a specific client.



Data Collector
Data Collectors are created by application code with the intention of providing services to a client and/or externalize data so that it can be consumed by the client. The application code can create one or more data collection elements that will be registered with the daemon so that a client can discover and interact with the data collection element at any point during the lifetime of the data collector.