System Monitor Dockyard

The Dockyard is used as a library (with no GUI itself) that collects data from the Fuchsia device through the transport system. It responds to requests from the GUI for digestible (i.e. small) sections of data that will be presented to the user.

In the future, the Dockyard may execute as an independent process on the Host machine.

For the GUI

To get started with the Dockyard API, here's a brief overview for getting sample data for rendering in the GUI.

If something is unclear or if you prefer examples, consider looking in ./dockyard_unittests.cc to get an idea of how the pieces work together.

  • Create a Dockyard instance.
  • Add handlers for new stream names and stream sets:
    • dockyard.SetStreamNamesHandler(MyStreamNameHandler);
    • dockyard.SetStreamSetsHandler(MyStreamSetHandler);
  • For testing, create some pseudo-random samples
    • Create a RandomSampleGenerator
    • Pass it and the dockyard to GenerateRandomSamples()
  • Try requesting some Samples
    • Create a StreamSetsRequest
    • Pass it to dockyard.GetStreamSets()
    • Kick back and wait for MyStreamSetHandler to be called
      • (for testing ProcessRequests() can be used to force it).
  • When MyStreamSetHandler is called, loop over the data_sets to get the sample values.

RandomSampleGenerator

The RandomSampleGenerator has several options that allow for creating a wide variety of samples. It may take some tinkering with different time style and value generation styles to get the hang of it. Experimentation is encouraged.

StreamSetsRequest

The StreamSetsRequest includes settings for the rendering style. This affects how data is summarized. If every column in the GUI graph exactly matched a Sample, then no render style would be needed. That's expected to be very uncommon. So often, some kind of filtering will be necessary to approximate the actual data.

One reasonable approach is to take the average of the values for each column of the graph. Though this can be odd because some peaks and valleys may not reach their extremes. E.g. if the values 90 and 100 are averaged, the result is 95. If that is the peak of a graph, the rendered value can fall slightly short of what we might expect.

Using the rendering style SCULPTING pulls the highs to their peaks and the lows to their valleys. Of course, this is also an approximation and not a 100% true representation of the data.

Or maybe there's a desire to smooth a rather fuzzy looking rendering. If the data is rapidly jumping between values it can be hard to visualize the trend. Using the rendering style WIDE_SMOOTHING will blend neighboring values to produce a graph that is less jagged.

There are other rendering styles, again experimentation is encouraged.