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 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 | 154 |
155 get_extension() { | 155 get_extension() { |
156 echo "${1##*.}" | 156 echo "${1##*.}" |
157 } | 157 } |
158 | 158 |
159 # Return which kind of report the given metadata file relates to | 159 # Return which kind of report the given metadata file relates to |
160 get_kind() { | 160 get_kind() { |
161 local payload="$(get_key_value "$1" "payload")" | 161 local payload="$(get_key_value "$1" "payload")" |
162 if [ ! -r "${payload}" ]; then | 162 if [ ! -r "${payload}" ]; then |
163 lecho "Missing payload: ${payload}" | 163 lecho "Missing payload: ${payload}" |
164 echo "unknown" | 164 echo "undefined" |
165 return | 165 return |
166 fi | 166 fi |
167 local kind="$(get_extension "${payload}")" | 167 local kind="$(get_extension "${payload}")" |
168 if [ "${kind}" = "dmp" ]; then | 168 if [ "${kind}" = "dmp" ]; then |
169 echo "minidump" | 169 echo "minidump" |
170 return | 170 return |
171 fi | 171 fi |
172 echo "${kind}" | 172 echo "${kind}" |
173 } | 173 } |
174 | 174 |
175 get_key_value() { | 175 get_key_value() { |
176 if ! grep -q "$2=" "$1"; then | 176 if ! grep -q "$2=" "$1"; then |
177 echo "undefined" | 177 echo "undefined" |
178 return | 178 return |
179 fi | 179 fi |
180 grep "$2=" "$1" | cut -d = -f 2- | 180 grep "$2=" "$1" | cut -d = -f 2- |
181 } | 181 } |
182 | 182 |
183 # Return the board name. | 183 # Return the board name. |
184 get_board() { | 184 get_board() { |
185 echo $(get_key_value "/etc/lsb-release" "CHROMEOS_RELEASE_BOARD") | 185 echo $(get_key_value "/etc/lsb-release" "CHROMEOS_RELEASE_BOARD") |
186 } | 186 } |
187 | 187 |
188 # Return the hardware class or "unknown". | 188 # Return the hardware class or "undefined". |
189 get_hardware_class() { | 189 get_hardware_class() { |
190 if [ -r "${HWCLASS_PATH}" ]; then | 190 if [ -r "${HWCLASS_PATH}" ]; then |
191 cat "${HWCLASS_PATH}" | 191 cat "${HWCLASS_PATH}" |
192 else | 192 else |
193 echo "unknown" | 193 echo "undefined" |
194 fi | 194 fi |
195 } | 195 } |
196 | 196 |
197 send_crash() { | 197 send_crash() { |
198 local meta_path="$1" | 198 local meta_path="$1" |
199 local report_payload="$(get_key_value "${meta_path}" "payload")" | 199 local report_payload="$(get_key_value "${meta_path}" "payload")" |
200 local kind="$(get_kind "${meta_path}")" | 200 local kind="$(get_kind "${meta_path}")" |
201 local exec_name="$(get_key_value "${meta_path}" "exec_name")" | 201 local exec_name="$(get_key_value "${meta_path}" "exec_name")" |
202 local sleep_time=$(generate_uniform_random $SECONDS_SEND_SPREAD) | 202 local sleep_time=$(generate_uniform_random $SECONDS_SEND_SPREAD) |
203 local url="${REPORT_UPLOAD_PROD_URL}" | 203 local url="${REPORT_UPLOAD_PROD_URL}" |
204 local chromeos_version="$(get_key_value "${meta_path}" "ver")" | 204 local chromeos_version="$(get_key_value "${meta_path}" "ver")" |
205 local board="$(get_board)" | 205 local board="$(get_board)" |
206 local hwclass="$(get_hardware_class)" | 206 local hwclass="$(get_hardware_class)" |
207 local write_payload_size="$(get_key_value "${meta_path}" "payload_size")" | 207 local write_payload_size="$(get_key_value "${meta_path}" "payload_size")" |
208 local sig="$(get_key_value "${meta_path}" "sig")" | 208 local sig="$(get_key_value "${meta_path}" "sig")" |
209 local send_payload_size="$(stat --printf=%s "${report_payload}" 2>/dev/null)" | 209 local send_payload_size="$(stat --printf=%s "${report_payload}" 2>/dev/null)" |
| 210 |
| 211 local extra_key1="write_payload_size" |
| 212 local extra_value1="${write_payload_size}" |
| 213 local extra_key2="send_payload_size" |
| 214 local extra_value2="${send_payload_size}" |
| 215 if [ "${sig}" != "undefined" ]; then |
| 216 extra_key1="sig" |
| 217 extra_value1="${sig}" |
| 218 extra_key2="sig2" |
| 219 extra_value2="${sig}" |
| 220 fi |
| 221 |
210 lecho "Sending crash:" | 222 lecho "Sending crash:" |
211 lecho " Scheduled to send in ${sleep_time}s" | 223 lecho " Scheduled to send in ${sleep_time}s" |
212 lecho " Metadata: ${meta_path} (${kind})" | 224 lecho " Metadata: ${meta_path} (${kind})" |
213 lecho " Payload: ${report_payload}" | 225 lecho " Payload: ${report_payload}" |
214 lecho " Version: ${chromeos_version}" | 226 lecho " Version: ${chromeos_version}" |
215 if is_mock; then | 227 if is_mock; then |
216 lecho " Product: ${CHROMEOS_PRODUCT}" | 228 lecho " Product: ${CHROMEOS_PRODUCT}" |
217 lecho " URL: ${url}" | 229 lecho " URL: ${url}" |
218 lecho " Board: ${board}" | 230 lecho " Board: ${board}" |
219 lecho " HWClass: ${hwclass}" | 231 lecho " HWClass: ${hwclass}" |
220 [ "${sig}" != "undefined" ] && lecho " Sig: ${sig}" | 232 lecho " ${extra_key1}: ${extra_value1}" |
| 233 lecho " ${extra_key2}: ${extra_value2}" |
221 fi | 234 fi |
222 lecho " Exec name: ${exec_name}" | 235 lecho " Exec name: ${exec_name}" |
223 if is_mock; then | 236 if is_mock; then |
224 local mock_in=$(cat "${MOCK_CRASH_SENDING}") | 237 local mock_in=$(cat "${MOCK_CRASH_SENDING}") |
225 if [ "${mock_in}" = "" ]; then | 238 if [ "${mock_in}" = "" ]; then |
226 lecho "Mocking successful send" | 239 lecho "Mocking successful send" |
227 return 0 | 240 return 0 |
228 else | 241 else |
229 lecho "Mocking unsuccessful send" | 242 lecho "Mocking unsuccessful send" |
230 return 1 | 243 return 1 |
231 fi | 244 fi |
232 fi | 245 fi |
233 | 246 |
234 if ! sleep ${sleep_time}; then | 247 if ! sleep ${sleep_time}; then |
235 lecho "Sleep failed" | 248 lecho "Sleep failed" |
236 return 1 | 249 return 1 |
237 fi | 250 fi |
238 | 251 |
239 local report_id="${TMP_DIR}/report_id" | 252 local report_id="${TMP_DIR}/report_id" |
240 local curl_stderr="${TMP_DIR}/curl_stderr" | 253 local curl_stderr="${TMP_DIR}/curl_stderr" |
241 | 254 |
242 local extra_key1="write_payload_size" | |
243 local extra_value1="${write_payload_size}" | |
244 local extra_key2="send_payload_size" | |
245 local extra_value2="${send_payload_size}" | |
246 if [ "${sig}" != "unknown" ]; then | |
247 extra_key1="sig" | |
248 extra_value1="${sig}" | |
249 extra_key2="sig2" | |
250 extra_value2="${sig}" | |
251 fi | |
252 | |
253 set +e | 255 set +e |
254 curl "${url}" \ | 256 curl "${url}" \ |
255 -F "prod=${CHROMEOS_PRODUCT}" \ | 257 -F "prod=${CHROMEOS_PRODUCT}" \ |
256 -F "ver=${chromeos_version}" \ | 258 -F "ver=${chromeos_version}" \ |
257 -F "upload_file_${kind}=@${report_payload}" \ | 259 -F "upload_file_${kind}=@${report_payload}" \ |
258 -F "board=${board}" \ | 260 -F "board=${board}" \ |
259 -F "hwclass=${hwclass}" \ | 261 -F "hwclass=${hwclass}" \ |
260 -F "exec_name=${exec_name}" \ | 262 -F "exec_name=${exec_name}" \ |
261 -F "${extra_key1}=${extra_value1}" \ | 263 -F "${extra_key1}=${extra_value1}" \ |
262 -F "${extra_key2}=${extra_value2}" \ | 264 -F "${extra_key2}=${extra_value2}" \ |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 TMP_DIR="$(mktemp -d /tmp/crash_sender.XXXX)" | 392 TMP_DIR="$(mktemp -d /tmp/crash_sender.XXXX)" |
391 | 393 |
392 # Send system-wide crashes | 394 # Send system-wide crashes |
393 send_crashes "/var/spool/crash" | 395 send_crashes "/var/spool/crash" |
394 | 396 |
395 # Send user-specific crashes | 397 # Send user-specific crashes |
396 send_crashes "/home/chronos/user/crash" | 398 send_crashes "/home/chronos/user/crash" |
397 } | 399 } |
398 | 400 |
399 main | 401 main |
OLD | NEW |