| Index: crash_sender | 
| diff --git a/crash_sender b/crash_sender | 
| deleted file mode 100644 | 
| index 4332117ae43a3e291c03ff047d0f2763efb91843..0000000000000000000000000000000000000000 | 
| --- a/crash_sender | 
| +++ /dev/null | 
| @@ -1,206 +0,0 @@ | 
| -#!/bin/sh | 
| - | 
| -# Copyright (c) 2010 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. | 
| - | 
| -set -e | 
| - | 
| -# Product ID in crash report | 
| -CHROMEOS_PRODUCT=ChromeOS | 
| - | 
| -# Send up to 8 crashes per day. | 
| -MAX_CRASH_RATE=8 | 
| - | 
| -# Minidump uploading tool (provided by Google Breakpad). | 
| -MINIDUMP_UPLOADER=/usr/bin/minidump_upload | 
| - | 
| -# URL to send non-official build crashes to. | 
| -MINIDUMP_UPLOAD_STAGING_URL="http://clients2.google.com/cr/staging_report" | 
| - | 
| -# URL to send official build crashes to. | 
| -MINIDUMP_UPLOAD_PROD_URL="http://clients2.google.com/cr/report" | 
| - | 
| -# File whose existence mocks crash sending.  If empty we pretend the | 
| -# crash sending was successful, otherwise unsuccessful. | 
| -MOCK_CRASH_SENDING="/tmp/mock-crash-sending" | 
| - | 
| -# File whose existence causes crash sending to be delayed (for testing). | 
| -PAUSE_CRASH_SENDING="/tmp/pause-crash-sending" | 
| - | 
| -# File whose existence implies we're running and not to start again. | 
| -RUN_FILE="/var/run/crash_sender.pid" | 
| - | 
| -# Maximum time to sleep between sends. | 
| -SECONDS_SEND_SPREAD=600 | 
| - | 
| -# The syslog tag for all logging we emit. | 
| -TAG="$(basename $0)[$$]" | 
| - | 
| -# Directory to store timestamp files indicating the uploads in the past 24 | 
| -# hours. | 
| -TIMESTAMPS_DIR="/var/lib/crash_sender" | 
| - | 
| -lecho() { | 
| -  logger -t "${TAG}" "$@" | 
| -} | 
| - | 
| -remove_run_file() { | 
| -  rm -f "${RUN_FILE}" | 
| -} | 
| - | 
| -check_not_already_running() { | 
| -  if [ ! -f "${RUN_FILE}" ]; then | 
| -    return | 
| -  fi | 
| -  local last_pid=$(cat "${RUN_FILE}") | 
| -  if [ ! -f "/proc/${last_pid}/cmdline" ]; then | 
| -    trap remove_run_file EXIT | 
| -    echo $$ > "${RUN_FILE}" | 
| -    return | 
| -  fi | 
| -  # This could just be an unrelated process, but it's ok to be conservative. | 
| -  lecho "Already running.  Exiting now." | 
| -  exit 1 | 
| -} | 
| - | 
| -get_version() { | 
| -  grep ^CHROMEOS_RELEASE_VERSION /etc/lsb-release | cut -d = -f 2- | 
| -} | 
| - | 
| -is_official() { | 
| -  grep ^CHROMEOS_RELEASE_DESCRIPTION /etc/lsb-release | cut -d = -f 2- | \ | 
| -      grep Official | 
| -} | 
| - | 
| -# Generate a uniform random number in 0..max-1. | 
| -generate_uniform_random() { | 
| -  local max=$1 | 
| -  local random="$(od -An -N4 -tu /dev/urandom)" | 
| -  echo $((random % max)) | 
| -} | 
| - | 
| -is_feedback_disabled() { | 
| -  # See crosbug.com/3303. | 
| -  return 1 | 
| -} | 
| - | 
| -is_on_3g() { | 
| -  # See crosbug.com/3304. | 
| -  return 1 | 
| -} | 
| - | 
| -# Check if sending a crash now does not exceed the maximum 24hr rate and | 
| -# commit to doing so, if not. | 
| -check_rate() { | 
| -  mkdir -p ${TIMESTAMPS_DIR} | 
| -  # Only consider minidumps written in the past 24 hours by removing all older. | 
| -  find "${TIMESTAMPS_DIR}" -mindepth 1 -mmin +$((24 * 60)) -exec rm '{}' ';' | 
| -  local sends_in_24hrs=$(echo "${TIMESTAMPS_DIR}"/* | wc -w) | 
| -  lecho "Current send rate: ${sends_in_24hrs}sends/24hrs" | 
| -  if [ ${sends_in_24hrs} -ge ${MAX_CRASH_RATE} ]; then | 
| -    lecho "Cannot send more crashes:" | 
| -    lecho "  current ${sends_in_24hrs}send/24hrs >= " \ | 
| -          "max ${MAX_CRASH_RATE}send/24hrs" | 
| -    return 1 | 
| -  fi | 
| -  mktemp "${TIMESTAMPS_DIR}"/XXXX > /dev/null | 
| -  return 0 | 
| -} | 
| - | 
| -send_crash() { | 
| -  local sleep_time=$(generate_uniform_random $SECONDS_SEND_SPREAD) | 
| -  local url="${MINIDUMP_UPLOAD_STAGING_URL}" | 
| -  if is_official; then | 
| -    url="${MINIDUMP_UPLOAD_PROD_URL}" | 
| -  fi | 
| -  lecho "Sending crash:" | 
| -  lecho "  Scheduled to send in ${sleep_time}s" | 
| -  lecho "  Minidump: ${minidump_path}" | 
| -  lecho "  URL: ${url}" | 
| -  lecho "  Product: ${CHROMEOS_PRODUCT}" | 
| -  lecho "  Version: ${chromeos_version}" | 
| -  if [ -s "${minidump_path}" ]; then | 
| -    # We cannot tell much from the minidump without symbols, but we can tell | 
| -    # at least what modules were loaded at the time of crash | 
| -    local modules="$(/usr/bin/minidump_dump "${minidump_path}" 2>&- | \ | 
| -                     grep 'code_file' | sed -e 's/^.* = "//g;s/"//g' | \ | 
| -                     tr '\n' ' ')" | 
| -    lecho "  Mapped: ${modules}" | 
| -  fi | 
| -  if [ -f "${MOCK_CRASH_SENDING}" ]; then | 
| -    local mock_in=$(cat "${MOCK_CRASH_SENDING}") | 
| -    if [ "${mock_in}" = "" ]; then | 
| -      lecho "Mocking successful send" | 
| -      return 0 | 
| -    else | 
| -      lecho "Mocking unsuccessful send" | 
| -      return 1 | 
| -    fi | 
| -  fi | 
| - | 
| -  if ! sleep ${sleep_time}; then | 
| -    lecho "Sleep failed" | 
| -    return 1 | 
| -  fi | 
| - | 
| -  "${MINIDUMP_UPLOADER}" -p "${CHROMEOS_PRODUCT}" \ | 
| -          -v "${chromeos_version}" "${minidump_path}" "${url}" | 
| -  return $? | 
| -} | 
| - | 
| -# Send all crashes from the given directory.  The directory is currently | 
| -# expected to just contain a bunch of minidumps - but this will change | 
| -# over time to be a directory of directories where the minidump and core | 
| -# file are in the directory as well as other metadata about the context | 
| -# of the crash (executable name for instance). | 
| -send_crashes() { | 
| -  local dir="$1" | 
| -  lecho "Considering crashes in ${dir}" | 
| -  # Cycle through minidumps, most recent first.  That way if we're about | 
| -  # to exceed the daily rate, we send the most recent minidumps. | 
| -  if [ ! -d "${dir}" ]; then | 
| -    return | 
| -  fi | 
| -  for file in $(ls -1t "${dir}"); do | 
| -    local minidump_path="${dir}/${file}" | 
| -    lecho "Considering crash ${minidump_path}" | 
| -    if ! check_rate; then | 
| -      lecho "Sending ${minidump_path} would exceed rate.  Leaving for later." | 
| -      return 0 | 
| -   fi | 
| -    local chromeos_version=$(get_version) | 
| -    if is_feedback_disabled; then | 
| -      lecho "Uploading is disabled.  Removing crash." | 
| -      rm "${minidump_path}" | 
| -    elif is_on_3g; then | 
| -      lecho "Not sending crash report while on 3G, saving for later." | 
| -    elif send_crash ${minidump_path}; then | 
| -      # Send was successful, now remove | 
| -      lecho "Successfully sent crash ${minidump_path} and removing" | 
| -      rm "${minidump_path}" | 
| -    else | 
| -      lecho "Problem sending ${minidump_path}, not removing" | 
| -    fi | 
| -  done | 
| -} | 
| - | 
| -main() { | 
| -  lecho "Starting" | 
| -  if [ -e "${PAUSE_CRASH_SENDING}" ]; then | 
| -    lecho "Exiting early due to ${PAUSE_CRASH_SENDING}" | 
| -    exit 1 | 
| -  fi | 
| - | 
| -  check_not_already_running | 
| - | 
| -  # Send system-wide crashes | 
| -  send_crashes "/var/spool/crash" | 
| - | 
| -  # Send user-specific crashes | 
| -  send_crashes "/home/chronos/user/crash" | 
| - | 
| -  lecho "Done" | 
| -} | 
| - | 
| -main | 
|  |