blob: c897959ca7d119d2ea8d53f7b05155cef8ffe698 [file] [view]
# Triage (fx triage)
Reviewed on: 2019-12-08
Triage analyzes snapshots for out-of-range values. The analysis is specified by
configuration files.
## Building
To add this project to your build, append `--with //src/diagnostics/triage` in
the `fx set` invocation.
For example:
```
fx set core.chromebook-x64 --with '//topaz/bundles:buildbot' --with //src/diagnostics/triage
```
## Running
To fetch and analyze a fresh snapshot from the default device:
```
fx triage
```
To analyze an existing snapshot:
```
fx triage --data /path/to/snapshot.zip
```
or
```
fx triage --data /path/to/unzipped_snapshot_dir
```
To specify config files to use:
```
fx triage --config path/file1 --config path/file2 --config "path/with/globs/*.triage"
```
Note that the triage command, not the OS, must expand the globs, so put the path
in quotes.
TODO(cphoenix): Should these paths be relative to tree-root, or CWD?
Config file format is described in [Configuring 'fx triage'](config.md). It
includes:
* Selectors which specify the data to extract from the inspect.json produced
by snapshot.zip.
* Eval expressions which specify calculations.
* Actions to take on specified values.
* Tests to ensure your actions trigger (or not) appropriately with sample data
you supply.
## Testing
Use `--with //src/diagnostics/triage:tests` for all tests.
Unit tests for the Rust code are linked into CQ/CI. There are also a series of
integration tests which live in the integration.rs file which are run in CQ/CI
as well. To run them manually:
```
fx test triage_lib_tests
```
## Source layout
* //tools/devshell/contrib/triage - A bash script which implements the entry
point to the "fx triage" command.
* Invokes //src/diagnostics/triage/src/main.rs to analyze a snapshot.
* //src/diagnostics/triage/
* Entry point of the main "triage" program. Parses command line arguments,
loads files, launches analysis, and formats output.
* //src/diagnostics/lib/triage/src/
* metrics.rs - Data structures and calculation engine for metrics.
* metrics/fetch.rs - Business logic to read values from the
inspect.json file.
* act.rs - Data structures and business logic to store and carry out
actions.
* validate.rs - The data structures and business logic to store and
evaluate the self-tests specified in the config files.
* config.rs - Loads configuration information from *.triage files.
* config/parse.rs - A `nom`-based parser for Eval metrics.
* //src/diagnostics/triage/test_data/ - Data which is used in integration
testing.
* //src/diagnostics/triage/build
* triage_config_test.gni defines a gn target to run config tests in CQ.
* triage_config_test_runner defines a binary which executes the tests for
the triage_config_test.gni target.