#!/bin/bash

# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Script to generate stackdumps from BVT failures.

# This can only run inside the chroot since we need minidump_stackwalk.
. "$(dirname $0)/common.sh" || exit 1
assert_inside_chroot "$@"

usage() {
    echo "Usage: $0 url_or_path_to_debug_tgz url_to_bvt_test_results"
}

if [ -z "$1" ] ; then
  usage
  die_notrace "The URL or path to symbols tarball (debug.tgz) is required"
fi

if [ -z "$2" ] ; then
  usage
  die_notrace "The URL to BVT test results is required"
fi

# Die on any errors.
switch_to_strict_mode

BREAKPAD_DIR="debug/breakpad"
STACKS_GENERATED=""
OUTPUT_DIR="$(mktemp -d)"

extract_tarball() {
  info "Extracting breakpad symbols from $1..."
  tar zxf "$1" -C "${OUTPUT_DIR}" "${BREAKPAD_DIR}"
}

generate_stacktrace() {
  echo "$1.txt"
  minidump_stackwalk "$1" "${OUTPUT_DIR}/${BREAKPAD_DIR}" \
      >"$1.txt" 2>/dev/null
}

find_and_generate_stacktraces() {
  find "${OUTPUT_DIR}" -name "*.dmp" |
    while read filename ; do
      generate_stacktrace "${filename}"
    done
}

cleanup() {
  if [ -n "${OUTPUT_DIR}" -a -z "${STACKS_GENERATED}" ] ; then
    rm -rf "${OUTPUT_DIR}"
  fi
}

trap cleanup INT TERM EXIT

info "Downloading minidumps from $2..."
wget -q -nv -r -l 10 -np -A "*.dmp" -P "${OUTPUT_DIR}" $2
if [[ -z "$(find "${OUTPUT_DIR}" -name "*.dmp")" ]] ; then
  die "No minidumps found"
fi

if [[ -f "$1" ]] ; then
  extract_tarball "$1"
else
  info "Downloading symbols tarball from $1..."
  wget -P "${OUTPUT_DIR}" "$1"
  TARBALL="${OUTPUT_DIR}/$(basename $1)"
  extract_tarball "$TARBALL"
  rm -f "$TARBALL"
fi

info "Generating stack traces..."
STACKS_GENERATED=$(find_and_generate_stacktraces)
echo $STACKS_GENERATED
