blob: 469a6f49fe0863278f0b7bdf36275d74c7461851 [file] [log] [blame] [view]
# Diagnostics Tool
Reviewed on: 2020-04-15
The Diagnostics Tool is a utility for interacting with diagnostics data on a
Fuchsia system.
The Diagnostics Platform exposes filtered views of all diagnostics data on a
system, subject to the constraints in selector files. This tool currently
provides an interactive terminal UI to aid writing the selector configuration.
## Building
To add this project to your build, append `--with
//src/diagnostics/tool:diag_tool_host` to the `fx set` invocation.
For example:
```
fx set core.chromebook-x64 --with //src/diagnostics/tool:diag_tool_host
```
After building the tool binary, you will be able to execute it from your Fuchsia
project root directory at: `./out/default/host-tools/diag_tool`.
## Running
### Prerequisites
In order to run this tool, you will first require a json dump of Inspect data.
You can obtain the initial dump through fx snapshot.
While connected to a running Fuchsia device, run the following commands:
```
fx snapshot -o <path/to/snapshot/dump>
unzip <path/to/snapshot/dump>/snapshot.zip -d <path/to/snapshot/dump/contents>
```
Now, under `<path/to/snapshot/dump/contents>`, you will have a file named
`inspect.json` which contains a json serialization of all inspect data on the
system.
### Generating Selectors
*NOTE: This section assumes a json file at
`<path/to/snapshot/dump/contents>/inspect.json` exists which includes the json
serialized inspect hierarchy for the reader's component.*
The diagnostics tool helps clients define their selector configuration files by
auto-generating a base-file explicitly including all diagnostics data the client
exposes.
Running the following command will produce a large file of all explicit selector
strings for every diagnostics property found in `<component_name>.cmx`'s
hierarchy within the provided inspect.json file. This large list acts as the
starting point for your integration.
```
./out/default/host-tools/diag_tool -s <path/to/snapshot/dump/contents>/inspect.json generate -c <component_name>.cmx <selectors.cfg>
```
The output file is `<selectors.cfg>`, which will be used in the next section.
### Interactively Applying Selectors
Once you have your initial file of explicit selectors from the Generating
Selectors section above, it's time to interactively start refining the list. In
one terminal pane, open the selector file in your prefered editor. In a second
pane, run the following command:
```
./out/default/host-tools/diag_tool -s <path/to/snapshot/dump/contents>/inspect.json apply -c <component_name>.cmx <selectors.cfg>
```
In the pane where the above command was run, an interactive session will open
which shows the `<component_name>.cmx` hierarchy as filtered by the selectors in
`<selectors.cfg>`. By default, the hierarchy should be fully present, and
missing data will appear as RED text in the window.
This interactive session has 3 important keys:
* (Q) will exist the interactive session.
* (H) will collapse all RED, missing data and only display the explicit
hierarchy being selected for by your configuration file.
* (R) will refresh your interactive session. You may edit `<selectors.cfg>` in
a seprarate window and press R to apply the edited selectors to the session.
## Testing
To run unit tests:
```
fx set ... --with //src/diagnostics/tool:diag_tool_tests
fx run-test inspect_validator_tests
```