Open Mission Control Technologies, or Open MCT (https://nasa.github.io/openmct/), is a framework being developed by the NASA Ames Research Center and the Jet Propulsion Laboratory for mission planning and operations and browser-based viewing of streaming data. This app-kit aims to leverage Open MCT as a CT data viewer. Combining CT and Open MCT technologies provides an opportunity to facilitate:
- connecting new data sources to Open MCT
- CT as a data streaming backbone for distributed Open MCT deployments
- CT as a replay/archiving repository for Open MCT data
- Open MCT as a powerful data viewer for CT data streams
Stream CT data to Open MCT. Base this prototype implementation on the Open MCT tutorial (https://github.com/nasa/openmct-tutorial).
Investigate CT-to-Open MCT data transfer limits
Initial CT/Open MCT tests indicate good performance (including streaming 8kHz audio from CT to Open MCT). Transfer rates may be limited by the fact that each sample is wrapped/delivered in its own JSON structure. The goal of this task is to verify performance and determine data transfer rate limits.
Optimize CT/Open MCT data transfer
Investigate CT/Open MCT data transfer optimizations. Ideas include: (1) Fetch historical data directly from CTweb server when a plot is initialized; this will require that CTweb deliver data in JSON format. This would alleviate the need to queue historical data in the user's Open MCT application. (2) Can a telemetry generator send an array of values (i.e. "packed data") to Open MCT? If so, this would alleviate some of the networking/data overhead associated with transferring individually timestamped JSON data points.
Open MCT tree updates in real time
The Open MCT UI for the prototype CT/Open MCT implementation (first goal above) includes a CT channel tree, populated at startup. As channels come and go in CT, it would be useful to mirror those changes in the Open MCT tree. This task will investigate how the Open MCT composition provider can be called in real-time to update the object tree.
Extend prototype implementation to be network accessible
The prototype implementation runs on localhost. Extend this implementation to allow Open MCT to access data from a remote CTweb server.
A prototype implementation to use Open MCT as a CloudTurbine data viewer has been developed. The implementation, based on the Open MCT tutorial, is available at https://github.com/jpw-erigo/openmct-tutorial. A white paper is available describing the implementation. As shown in the overview picture at the top of this page, CT data is retrieved using CTweb. Detailed flow diagrams of the prototype implementation are shown below. The first one outlines the steps taken during initialization (populating the channel list in Open MCT). The second image shows how data is retrieved via CTweb and displayed in the Open MCT browser UI.
In response to the question, “Can a telemetry generator send an array of values (i.e. “packed data”) to Open MCT?”, the answer is “yes, sort of”. Open MCT developer Andrew Henry was very helpful in showing me the following option. It comes down to the implementation of the client-side realtime telemetry provider, which (in our case) receives new data from CloudTurbine and pass it along to Open MCT listeners (e.g., plots). Our version of this code (a slightly tweaked version of what is included in the NASA Open MCT tutorial) can be found at https://github.com/jpw-erigo/openmct-tutorial/blob/master/realtime-telemetry-plugin.js. Packed data can be sent to the telemetry provider, but this telemetry provider must then unpack it and send it point-by-point to the listeners. So, the client-side will have some additional work unpacking the data, but using such a packed-data scheme would alleviate network transport congestion (which could be useful in high sample rate cases). Andrew further pointed out that we can use any desired packing format, so long as there is support on the client-side (browser) for unpacking it.
The Open MCT composition provider is used to populate the object tree; in our case, this is used to display the list of available CT channels in the Open MCT browser interface. Our version of the code to set this tree up (a slightly tweaked version of what is included in the NASA Open MCT tutorial) can be found at https://github.com/jpw-erigo/openmct-tutorial/blob/master/ct-dictionary-plugin.js. It would be great if the Open MCT composition provider could be called in real-time to update the displayed list of channels (i.e., as CloudTurbine channels come and go). We have heard that support for this feature is planned but not yet implemented. Thus, the “Open MCT tree updates in real time” task will need to remain an open item for now.