#!/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 "*** Help for 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
