| OLD | NEW |
| 1 #!/bin/sh | 1 #!/bin/sh |
| 2 | 2 |
| 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 set -e | 7 set -e |
| 8 | 8 |
| 9 # Product ID in crash report | 9 # Product ID in crash report |
| 10 CHROMEOS_PRODUCT=ChromeOS | 10 CHROMEOS_PRODUCT=ChromeOS |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 mktemp "${TIMESTAMPS_DIR}"/XXXX > /dev/null | 145 mktemp "${TIMESTAMPS_DIR}"/XXXX > /dev/null |
| 146 return 0 | 146 return 0 |
| 147 } | 147 } |
| 148 | 148 |
| 149 # Gets the base part of a crash report file, such as | 149 # Gets the base part of a crash report file, such as |
| 150 # name.01234.5678.9012 from name.01234.5678.9012.meta | 150 # name.01234.5678.9012 from name.01234.5678.9012.meta |
| 151 get_base() { | 151 get_base() { |
| 152 echo "${1%.*}" | 152 echo "${1%.*}" |
| 153 } | 153 } |
| 154 | 154 |
| 155 get_extension() { |
| 156 echo "${1##*.}" |
| 157 } |
| 158 |
| 155 # Return which kind of report the given metadata file relates to | 159 # Return which kind of report the given metadata file relates to |
| 156 get_kind() { | 160 get_kind() { |
| 157 # There should never be a report with both a dmp and kcrash file. | 161 local payload="$(get_key_value "$1" "payload")" |
| 158 # If that were to happen we arbitrarily consider this a minidump | 162 if [ ! -r "${payload}" ]; then |
| 159 # report and effectively ignore the kcrash. | 163 lecho "Missing payload: ${payload}" |
| 160 local base="$(get_base "$1")" | 164 echo "unknown" |
| 161 if [ -r "${base}.dmp" ]; then | 165 return |
| 166 fi |
| 167 local kind="$(get_extension "${payload}")" |
| 168 if [ "${kind}" = "dmp" ]; then |
| 162 echo "minidump" | 169 echo "minidump" |
| 163 return | 170 return |
| 164 fi | 171 fi |
| 165 if [ -r "${base}.kcrash" ]; then | 172 echo "${kind}" |
| 166 echo "kcrash" | |
| 167 return | |
| 168 fi | |
| 169 } | 173 } |
| 170 | 174 |
| 171 get_key_value() { | 175 get_key_value() { |
| 172 if ! grep -q "$2=" "$1"; then | 176 if ! grep -q "$2=" "$1"; then |
| 173 echo "undefined" | 177 echo "undefined" |
| 174 return | 178 return |
| 175 fi | 179 fi |
| 176 grep "$2=" "$1" | cut -d = -f 2- | 180 grep "$2=" "$1" | cut -d = -f 2- |
| 177 } | 181 } |
| 178 | 182 |
| 179 # Return the board name. | 183 # Return the board name. |
| 180 get_board() { | 184 get_board() { |
| 181 echo $(get_key_value "/etc/lsb-release" "CHROMEOS_RELEASE_BOARD") | 185 echo $(get_key_value "/etc/lsb-release" "CHROMEOS_RELEASE_BOARD") |
| 182 } | 186 } |
| 183 | 187 |
| 184 # Return the hardware class or "unknown". | 188 # Return the hardware class or "unknown". |
| 185 get_hardware_class() { | 189 get_hardware_class() { |
| 186 if [ -r "${HWCLASS_PATH}" ]; then | 190 if [ -r "${HWCLASS_PATH}" ]; then |
| 187 cat "${HWCLASS_PATH}" | 191 cat "${HWCLASS_PATH}" |
| 188 else | 192 else |
| 189 echo "unknown" | 193 echo "unknown" |
| 190 fi | 194 fi |
| 191 } | 195 } |
| 192 | 196 |
| 193 send_crash() { | 197 send_crash() { |
| 194 local meta_path="$1" | 198 local meta_path="$1" |
| 199 local report_payload="$(get_key_value "${meta_path}" "payload")" |
| 195 local kind="$(get_kind "${meta_path}")" | 200 local kind="$(get_kind "${meta_path}")" |
| 196 local exec_name="$(get_key_value "${meta_path}" "exec_name")" | 201 local exec_name="$(get_key_value "${meta_path}" "exec_name")" |
| 197 local sleep_time=$(generate_uniform_random $SECONDS_SEND_SPREAD) | 202 local sleep_time=$(generate_uniform_random $SECONDS_SEND_SPREAD) |
| 198 local url="${REPORT_UPLOAD_PROD_URL}" | 203 local url="${REPORT_UPLOAD_PROD_URL}" |
| 199 local chromeos_version="$(get_key_value "${meta_path}" "ver")" | 204 local chromeos_version="$(get_key_value "${meta_path}" "ver")" |
| 200 local board="$(get_board)" | 205 local board="$(get_board)" |
| 201 local hwclass="$(get_hardware_class)" | 206 local hwclass="$(get_hardware_class)" |
| 202 local payload_extension="${kind}" | |
| 203 local write_payload_size="$(get_key_value "${meta_path}" "payload_size")" | 207 local write_payload_size="$(get_key_value "${meta_path}" "payload_size")" |
| 204 local sig="$(get_key_value "${meta_path}" "sig")" | 208 local sig="$(get_key_value "${meta_path}" "sig")" |
| 205 [ "${kind}" = "minidump" ] && payload_extension="dmp" | 209 local send_payload_size="$(stat --printf=%s "${report_payload}" 2>/dev/null)" |
| 206 local report_payload="$(get_base "${meta_path}").${payload_extension}" | |
| 207 local send_payload_size="$(stat --printf=%s "${report_payload}")" | |
| 208 lecho "Sending crash:" | 210 lecho "Sending crash:" |
| 209 lecho " Scheduled to send in ${sleep_time}s" | 211 lecho " Scheduled to send in ${sleep_time}s" |
| 210 lecho " Metadata: ${meta_path} (${kind})" | 212 lecho " Metadata: ${meta_path} (${kind})" |
| 211 lecho " Payload: ${report_payload}" | 213 lecho " Payload: ${report_payload}" |
| 212 lecho " Version: ${chromeos_version}" | 214 lecho " Version: ${chromeos_version}" |
| 213 if is_mock; then | 215 if is_mock; then |
| 214 lecho " Product: ${CHROMEOS_PRODUCT}" | 216 lecho " Product: ${CHROMEOS_PRODUCT}" |
| 215 lecho " URL: ${url}" | 217 lecho " URL: ${url}" |
| 216 lecho " Board: ${board}" | 218 lecho " Board: ${board}" |
| 217 lecho " HWClass: ${hwclass}" | 219 lecho " HWClass: ${hwclass}" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 234 return 1 | 236 return 1 |
| 235 fi | 237 fi |
| 236 | 238 |
| 237 local report_id="${TMP_DIR}/report_id" | 239 local report_id="${TMP_DIR}/report_id" |
| 238 local curl_stderr="${TMP_DIR}/curl_stderr" | 240 local curl_stderr="${TMP_DIR}/curl_stderr" |
| 239 | 241 |
| 240 local extra_key1="write_payload_size" | 242 local extra_key1="write_payload_size" |
| 241 local extra_value1="${write_payload_size}" | 243 local extra_value1="${write_payload_size}" |
| 242 local extra_key2="send_payload_size" | 244 local extra_key2="send_payload_size" |
| 243 local extra_value2="${send_payload_size}" | 245 local extra_value2="${send_payload_size}" |
| 244 if [ "${kind}" = "kcrash" ]; then | 246 if [ "${sig}" != "unknown" ]; then |
| 245 extra_key1="sig" | 247 extra_key1="sig" |
| 246 extra_value1="${sig}" | 248 extra_value1="${sig}" |
| 247 extra_key2="sig2" | 249 extra_key2="sig2" |
| 248 extra_value2="${sig}" | 250 extra_value2="${sig}" |
| 249 fi | 251 fi |
| 250 | 252 |
| 251 set +e | 253 set +e |
| 252 curl "${url}" \ | 254 curl "${url}" \ |
| 253 -F "prod=${CHROMEOS_PRODUCT}" \ | 255 -F "prod=${CHROMEOS_PRODUCT}" \ |
| 254 -F "ver=${chromeos_version}" \ | 256 -F "ver=${chromeos_version}" \ |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 lecho "Removing old orphaned file: ${old_file}." | 304 lecho "Removing old orphaned file: ${old_file}." |
| 303 rm -f -- "${old_file}" | 305 rm -f -- "${old_file}" |
| 304 fi | 306 fi |
| 305 done | 307 done |
| 306 | 308 |
| 307 # Look through all metadata (*.meta) files, if any exist. | 309 # Look through all metadata (*.meta) files, if any exist. |
| 308 for meta_path in $(ls -1t "${dir}"/*.meta 2>/dev/null); do | 310 for meta_path in $(ls -1t "${dir}"/*.meta 2>/dev/null); do |
| 309 lecho "Considering metadata ${meta_path}." | 311 lecho "Considering metadata ${meta_path}." |
| 310 local kind=$(get_kind "${meta_path}") | 312 local kind=$(get_kind "${meta_path}") |
| 311 | 313 |
| 312 if [ "${kind}" != "minidump" ] && [ "${kind}" != "kcrash" ]; then | 314 if [ "${kind}" != "minidump" ] && \ |
| 313 lecho "Unknown report kind. Removing report." | 315 [ "${kind}" != "kcrash" ] && \ |
| 316 [ "${kind}" != "log" ]; then |
| 317 lecho "Unknown report kind ${kind}. Removing report." |
| 314 remove_report "${meta_path}" | 318 remove_report "${meta_path}" |
| 315 continue | 319 continue |
| 316 fi | 320 fi |
| 317 | 321 |
| 318 if ${METRICS_CLIENT} -g; then | 322 if ${METRICS_CLIENT} -g; then |
| 319 lecho "Guest mode has been entered. Delaying crash sending until exited." | 323 lecho "Guest mode has been entered. Delaying crash sending until exited." |
| 320 return 0 | 324 return 0 |
| 321 fi | 325 fi |
| 322 | 326 |
| 323 if ! ${METRICS_CLIENT} -c; then | 327 if ! ${METRICS_CLIENT} -c; then |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 TMP_DIR="$(mktemp -d /tmp/crash_sender.XXXX)" | 390 TMP_DIR="$(mktemp -d /tmp/crash_sender.XXXX)" |
| 387 | 391 |
| 388 # Send system-wide crashes | 392 # Send system-wide crashes |
| 389 send_crashes "/var/spool/crash" | 393 send_crashes "/var/spool/crash" |
| 390 | 394 |
| 391 # Send user-specific crashes | 395 # Send user-specific crashes |
| 392 send_crashes "/home/chronos/user/crash" | 396 send_crashes "/home/chronos/user/crash" |
| 393 } | 397 } |
| 394 | 398 |
| 395 main | 399 main |
| OLD | NEW |