#!/bin/bash
# Copyright 2020 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
### Obtain and parse a snapshot from a connected target.

## Connects to a running target and obtains a snapshot that contains useful
## information for debugging a target.
##
## Information supplied includes:
## - Build information and annotations.
## - Kernel and System logs.
## - Inspect Data.
##
## If no directory is supplied, a unique one will be generated.
##
## Usage: fx snapshot [(--output-directory|-o)] <DIRECTORY>] -- <TARGET ARGS>
##
##    --output-directory    (Optional) Directory where the files will be stored.
##                          Must be an existing directory.

# Load environment helpers.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $?
fx-config-read

# Flag Parsing.
output_dir=
is_output_dir_provided=false

while [[ $# -gt 0 ]]; do
  case "$1" in
    --help|-h)
      fx-command-help
      exit 0
      ;;
    --output-directory|-o)
      shift
      output_dir="$1"
      is_output_dir_provided=true
      ;;
    --)
      shift
      break   # Remaining flags are passed on to the target.
      ;;
    *)
      fx-error "Invalid flag $1"
      exit 1
  esac
  shift
done

# Check the validity of the output file.
if [[ "${is_output_dir_provided}" == "true" ]]; then
  if [[ -z "${output_dir}" ]]; then
    fx-error "No output directory provided."
    exit 1
  fi

  if [[ ! -d "${output_dir}" ]]; then
    fx-error "Path provided is not a directory."
    exit 1
  fi
fi

# If no output directory is supplied, generate a unique one according to time.
if [[ -z "${output_dir}" ]]; then
  # Generate an output directory.
  # Format is /tmp/snapshots/<YearMonthDay_HourMinuteSecond>
  uuid=`date +"%Y%m%d_%H%M%S"`
  output_dir="/tmp/snapshots/${uuid}"
  mkdir -p "${output_dir}"
  if [[ "$?" -ne 0 ]]; then
    rm -rf "${output_dir}"  # Just in case.
    fx-error "Failed to create output directory ${output_dir}."
    fx-error "Check errors or provide your own with --output-directory. See --help for more details."
    exit 1
  fi
fi

fx-info "Consider running \`ffx target snapshot\` instead. fx snapshot will eventually be deprecated."

# At this point, we know that we have a valid output directory.

error_bringing_snapshot=
tempfile="/tmp/__snapshot_temp"
output_file="${output_dir}/snapshot.zip"
# Obtain the snapshot and store it in a temporary location.
fx-command-run shell snapshot "${@}" > "${output_file}"
if [ "$?" -ne 0 ]; then
  fx-error "Could not obtain snapshot from target."
  error_bringing_snapshot=true
else
  echo "Exported ${output_file}"
fi

if [[ ! -z "${error_bringing_snapshot}" ]]; then
  # Do error cleanup.
  rm -f "${output_file}"
  if [[ "${is_output_dir_provided}" == "false" ]]; then
    rm -rf "${output_dir}"
  fi
  exit 1
fi
