[crashpad] support an override config
DX-707 #comment #done
DX-714 #comment #done
TESTED=`fx set --packages garnet/packages/config/crashpad_upload_to_prod_server ...` then `crasher` (report id a2c9dc128f7f1fb1)
Change-Id: I3ba118c8af03356ca2a51751eb4f15f46fc1b06b
diff --git a/bin/crashpad/BUILD.gn b/bin/crashpad/BUILD.gn
index bee8e93..f2a3d6d 100644
--- a/bin/crashpad/BUILD.gn
+++ b/bin/crashpad/BUILD.gn
@@ -42,6 +42,16 @@
]
}
+package("upload_to_prod_server_config") {
+ deprecated_system_image = true
+ resources = [
+ {
+ path = "configs/upload_to_prod_server.json"
+ dest = "crashpad_analyzer/override_config.json"
+ },
+ ]
+}
+
source_set("crashpad_analyzer_files") {
sources = [
"config.cc",
diff --git a/bin/crashpad/configs/upload_to_prod_server.json b/bin/crashpad/configs/upload_to_prod_server.json
new file mode 100644
index 0000000..524f7b3
--- /dev/null
+++ b/bin/crashpad/configs/upload_to_prod_server.json
@@ -0,0 +1,4 @@
+{
+ "local_crashpad_database_path": "/data/crashes",
+ "enable_upload_to_crash_server": true
+}
diff --git a/bin/crashpad/crashpad_analyzer_impl.cc b/bin/crashpad/crashpad_analyzer_impl.cc
index 3aa5871..921c30a 100644
--- a/bin/crashpad/crashpad_analyzer_impl.cc
+++ b/bin/crashpad/crashpad_analyzer_impl.cc
@@ -45,6 +45,9 @@
namespace crash {
namespace {
+const char kDefaultConfigPath[] = "/pkg/data/default_config.json";
+const char kOverrideConfigPath[] =
+ "/system/data/crashpad_analyzer/override_config.json";
const char kURL[] = "https://clients2.google.com/cr/report";
std::string GetPackageName(const zx::process& process) {
@@ -339,12 +342,12 @@
if (!database) {
FX_LOGS(ERROR) << "error initializing local crash report database at "
<< config.local_crashpad_database_path;
+ FX_LOGS(FATAL) << "failed to set up crash analyzer";
return nullptr;
}
// Today we enable uploads here. In the future, this will most likely be set
// in some external settings.
- // TODO(DX-714): re-enable upload once configurable.
database->GetSettings()->SetUploadsEnabled(
config.enable_upload_to_crash_server);
@@ -354,11 +357,20 @@
std::unique_ptr<CrashpadAnalyzerImpl> CrashpadAnalyzerImpl::TryCreate() {
Config config;
- if (ParseConfig("/pkg/data/default_config.json", &config) != ZX_OK) {
- return nullptr;
+
+ if (files::IsFile(kOverrideConfigPath) &&
+ ParseConfig(kOverrideConfigPath, &config) == ZX_OK) {
+ return CrashpadAnalyzerImpl::TryCreate(config);
}
- return CrashpadAnalyzerImpl::TryCreate(config);
+ // We try to load the default config included in the package if no override
+ // config was specified or we failed to parse it.
+ if (ParseConfig(kDefaultConfigPath, &config) == ZX_OK) {
+ return CrashpadAnalyzerImpl::TryCreate(config);
+ }
+
+ FX_LOGS(FATAL) << "failed to set up crash analyzer";
+ return nullptr;
}
} // namespace crash
diff --git a/bin/crashpad/meta/crashpad_analyzer.cmx b/bin/crashpad/meta/crashpad_analyzer.cmx
index 5c47725..e4da952 100644
--- a/bin/crashpad/meta/crashpad_analyzer.cmx
+++ b/bin/crashpad/meta/crashpad_analyzer.cmx
@@ -14,6 +14,9 @@
"services": [
"fuchsia.logger.LogSink",
"fuchsia.net.LegacySocketProvider"
+ ],
+ "system": [
+ "data/crashpad_analyzer"
]
}
}
diff --git a/packages/config/crashpad_upload_to_prod_server b/packages/config/crashpad_upload_to_prod_server
new file mode 100644
index 0000000..d0d516c
--- /dev/null
+++ b/packages/config/crashpad_upload_to_prod_server
@@ -0,0 +1,5 @@
+{
+ "packages": [
+ "//garnet/bin/crashpad:upload_to_prod_server_config"
+ ]
+}