crash-reporter: send payload sizes to help diagnose corruption
Change-Id: Ia68990138ebcc3dd6d644fe30d0721dde41c567e
BUG=6299
TEST=UserCrash, CrashSender, KernelCrash
Review URL: http://codereview.chromium.org/3820004
diff --git a/crash_reporter/crash_collector.cc b/crash_reporter/crash_collector.cc
index e91f70a..0391fa5 100644
--- a/crash_reporter/crash_collector.cc
+++ b/crash_reporter/crash_collector.cc
@@ -248,7 +248,8 @@
}
void CrashCollector::WriteCrashMetaData(const FilePath &meta_path,
- const std::string &exec_name) {
+ const std::string &exec_name,
+ const std::string &payload_path) {
std::map<std::string, std::string> contents;
if (!ReadKeyValueFile(FilePath(std::string(kLsbRelease)), '=', &contents)) {
logger_->LogError("Problem parsing %s", kLsbRelease);
@@ -259,11 +260,15 @@
if ((i = contents.find("CHROMEOS_RELEASE_VERSION")) != contents.end()) {
version = i->second;
}
+ int64 payload_size = -1;
+ file_util::GetFileSize(FilePath(payload_path), &payload_size);
std::string meta_data = StringPrintf("exec_name=%s\n"
"ver=%s\n"
+ "payload_size=%lld\n"
"done=1\n",
exec_name.c_str(),
- version.c_str());
+ version.c_str(),
+ payload_size);
if (!file_util::WriteFile(meta_path, meta_data.c_str(), meta_data.size())) {
logger_->LogError("Unable to write %s", meta_path.value().c_str());
}
diff --git a/crash_reporter/crash_collector.h b/crash_reporter/crash_collector.h
index 730a8e7..97bf0d6 100644
--- a/crash_reporter/crash_collector.h
+++ b/crash_reporter/crash_collector.h
@@ -89,7 +89,8 @@
// Write a file of metadata about crash.
void WriteCrashMetaData(const FilePath &meta_path,
- const std::string &exec_name);
+ const std::string &exec_name,
+ const std::string &payload_path);
CountCrashFunction count_crash_function_;
IsFeedbackAllowedFunction is_feedback_allowed_function_;
diff --git a/crash_reporter/crash_sender b/crash_reporter/crash_sender
index 244c31d..6849864 100644
--- a/crash_reporter/crash_sender
+++ b/crash_reporter/crash_sender
@@ -195,8 +195,10 @@
local board="$(get_board)"
local hwclass="$(get_hardware_class)"
local payload_extension="${kind}"
+ local write_payload_size="$(get_key_value "${meta_path}" "payload_size")"
[ "${kind}" = "minidump" ] && payload_extension="dmp"
local report_payload="$(get_base "${meta_path}").${payload_extension}"
+ local send_payload_size="$(stat --printf=%s "${report_payload}")"
lecho "Sending crash:"
lecho " Scheduled to send in ${sleep_time}s"
lecho " Metadata: ${meta_path} (${kind})"
@@ -236,6 +238,8 @@
-F "board=${board}" \
-F "hwclass=${hwclass}" \
-F "exec_name=${exec_name}" \
+ -F "write_payload_size=${write_payload_size}" \
+ -F "send_payload_size=${send_payload_size}" \
-F "guid=<${CONSENT_ID}" -o "${report_id}" 2>"${curl_stderr}"
curl_result=$?
set -e
diff --git a/crash_reporter/kernel_collector.cc b/crash_reporter/kernel_collector.cc
index f5e20b9..c6bb33f 100644
--- a/crash_reporter/kernel_collector.cc
+++ b/crash_reporter/kernel_collector.cc
@@ -104,7 +104,8 @@
WriteCrashMetaData(
root_crash_directory.Append(
StringPrintf("%s.meta", dump_basename.c_str())),
- kKernelExecName);
+ kKernelExecName,
+ kernel_crash_path.value());
logger_->LogInfo("Collected kernel crash diagnostics into %s",
kernel_crash_path.value().c_str());
diff --git a/crash_reporter/user_collector.cc b/crash_reporter/user_collector.cc
index 18ab7b9..4047eb4 100644
--- a/crash_reporter/user_collector.cc
+++ b/crash_reporter/user_collector.cc
@@ -278,7 +278,8 @@
WriteCrashMetaData(
crash_path.Append(
StringPrintf("%s.meta", dump_basename.c_str())),
- exec_name);
+ exec_name,
+ minidump_path.value());
if (conversion_result) {
logger_->LogInfo("Stored minidump to %s", minidump_path.value().c_str());