#!/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" || { echo "Unable to load 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
