| #!/bin/bash |
| # Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| #### CATEGORY=Run, inspect and debug |
| ### generate a report of error conditions |
| |
| ## usage: fx triage [--config <config-file>] |
| ## [--bugreport <path-to-bugreport>] |
| ## Processes "fx bugreport" output looking for problems specified in a config |
| ## file. If no bugreport output is specified (no '--inspect') it runs a new |
| ## "fx bugreport" and uses its "inspect.json" file. |
| ## |
| ## --config <config-file-or-dir> Path to config file or dir |
| ## --bugreport <dir> Directory to get an inspect.json file from |
| ## --tag <tag> Adds an action tag to include |
| ## --exclude-tag <tag> Adds an action tag to exclude |
| ## --test (deprecated) Run self-tests (only) |
| ## |
| ## 0 or more --config paths may be given. Path is relative to CWD, or absolute. |
| ## If path is a directory, path/*.triage will be loaded. |
| ## If 0 paths are given, config defaults to |
| ## /src/diagnostics/config/triage/*.triage. |
| ## |
| ## 0 or more --tag values may be given. If tags are provided, only actions with |
| ## matching tags will be included. |
| ## |
| ## 0 or more --exclude-tag values may be given. If exclude tags are provided, |
| ## actions with matching tags will be excluded. This value is ignored if |
| ## any --tag values are included. |
| ## |
| ## If no --tag values or --exclude-tag values are included then all of the |
| ## actions will be included. |
| ## |
| ## 0 or more --bugreport paths may be given. Path is relative to CWD, or |
| ## absolute. Each path is a directory containing an unpacked "bugreport.zip". |
| ## If no --bugreport is given, `fx bugreport` will be invoked and analyzed. |
| |
| set -e |
| trap 'echo Failed: ${BASH_COMMAND}' ERR |
| |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"\ |
| /../lib/image_build_vars.sh |
| |
| # Defaults. |
| config_paths=( ) |
| testit="" |
| directories=( ) |
| tags=( ) |
| exclude_tags=( ) |
| flags="" |
| |
| # Flag parsing. |
| while [[ "$1" =~ ^- ]]; do |
| case "$1" in |
| -h|--help) |
| fx-command-help |
| exit 0 |
| ;; |
| --config) |
| shift |
| config_paths+=( "$1" ) |
| ;; |
| --bugreport) |
| shift |
| directories+=( "$1" ) |
| ;; |
| --tag) |
| shift |
| tags+=( "$1" ) |
| ;; |
| --exclude-tag) |
| shift |
| exclude_tags+=( "$1" ) |
| ;; |
| --test) |
| testit="yes" |
| ;; |
| *) |
| echo Bad option "$1" |
| echo |
| fx-command-help |
| exit 1 |
| esac |
| shift |
| done |
| |
| triage_exe="${HOST_OUT_DIR}/../host-tools/triage" |
| |
| if [[ -n "$testit" ]]; then |
| echo "[ERROR] fx triage --test is deprecated!" |
| echo "please use 'fx test triage_lib_test' instead" |
| exit |
| fi |
| |
| if (( !"${#config_paths[@]}" )); then |
| config_paths=( "${FUCHSIA_DIR}/src/diagnostics/config/triage/" ) |
| fi |
| |
| config_files=( ) |
| for config_path in "${config_paths[@]}"; do |
| if [[ -d "${config_path}" ]] ; then |
| config_files+=( "${config_path}"/*.triage ) |
| else |
| config_files+=( "${config_path}" ) |
| fi |
| done |
| |
| for config_file in "${config_files[@]}" |
| do |
| flags="${flags} --config ${config_file}" |
| done |
| |
| if [ -z "${directories}" ]; then |
| temp_dir=$(mktemp -d) |
| trap 'rm -rf "${temp_dir}"' EXIT |
| fx-command-run bugreport --output-directory "${temp_dir}" > /dev/null |
| unzip "${temp_dir}/bugreport.zip" -d "${temp_dir}" > /dev/null |
| directories+="${temp_dir}" |
| fi |
| |
| for directory in "${directories[@]}" |
| do |
| flags="${flags} --bugreport ${directory}" |
| done |
| |
| for tag in "${tags[@]}" |
| do |
| flags="${flags} --tag ${tag}" |
| done |
| |
| for tag in "${exclude_tags[@]}" |
| do |
| flags="${flags} --exclude-tag ${tag}" |
| done |
| |
| if [[ ! -f "$triage_exe" ]]; then |
| echo "Building Triage..." |
| fx-command-run build triage |
| fi |
| |
| echo "${triage_exe} ${flags}" |
| $triage_exe ${flags} |