#!/bin/bash
# Copyright 2018 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
### listen for logs from the on-device log_listener

## usage: fx log [-h | --help] [--raw] [-r | --remote-symbols] LOG_LISTENER_FLAGS
##
##    --experimental          use the experimental C++ symbolizer
##
##    --legacy                use the legacy Go symbolizer
##
##    --raw                   do not attempt to symbolize the log
##
##    --remote-symbols|-r     attemp to resolve symbols using predefined remote
##                            symbol servers for symbols that cannot be resolved
##                            locally. See `fx help symbolize` for more
##                            information on remote symbol servers.
##
##    --help|-h               show this help and attempt to also show the
##                            on-device log_listener help
##
##    LOG_LISTENER_FLAGS      bypass flags for the on-device log_listener, options are listed at
##                            https://fuchsia.dev/fuchsia-src/reference/diagnostics/logs/log_listener
##
## Creates an SSH connection with a device and starts listening for logs.
## It will listen to the device specified with `fx -d DEVICE log` or
## `fx set-device`, otherwise it will try to find a connected device.
##
## If the command hangs without printing anything, first check to make sure `fx shell`
## works on its own.
##
## For more information on flags supported by the on-device log_listener, see
## https://fuchsia.dev/fuchsia-src/reference/diagnostics/consumers/log_listener.

set -o pipefail

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?

function listen {
  while true; do
    fx-command-run wait || return
    fx-command-run shell log_listener "$@"
    local error_code=$?
    if [[ "${error_code}" -eq 0 ]]; then
      # this is necessary, so that "--dump_logs yes" works as expected.
      break
    fi
    echo "$(date '+%Y-%m-%d %H:%M:%S %Z'): Connection lost (status ${error_code}), reconnecting..."
  done
}

declare is_raw=0
declare is_remote=0
declare symbolizer=( "fx-command-run" "symbolize" )

while [[ $# -ne 0 ]]; do
  case "$1" in
  -h|--help)
    fx-command-help
    echo
    echo "[Attempting to shell into a connected device to provide help for the on-device log_listener]"
    fx-command-exec shell log_listener -h
    exit 0
    ;;
  --raw)
    is_raw=1
    ;;
  --remote-symbols|-r)
    is_remote=1
    symbolizer+=("-r")
    ;;
  --experimental|--legacy)
    symbolizer+=("$1")
    ;;
  *)
    break
  esac
  shift
done

if (( is_raw )) && (( is_remote )); then
  fx-error "Invalid syntax: --raw and -r cannot be used together"
  fx-command-help
  exit 1
fi

if (( is_raw )); then
  listen "$@"
else
  listen "$@" | "${symbolizer[@]}"
fi
