From fec4d2cc3f5c1d98b616d6d9a6bc309bebb3783c Mon Sep 17 00:00:00 2001 From: Bertrand SIMONNET Date: Wed, 5 Aug 2015 16:04:14 -0700 Subject: [PATCH] metrics: Add a CLI flag to disable dbus. DBus is not setup in several targets and the metrics_daemon will crash if it cannot connect to DBus. Running metrics daemon without dbus allows us to test the daemon in any target. BUG: 22879597 Change-Id: Ica69c8e96c3df794a210a0fa3d44f85a98a660f0 --- metrics/metrics_daemon.cc | 45 +++++++++++++++++++--------------- metrics/metrics_daemon.h | 5 ++++ metrics/metrics_daemon_main.cc | 4 +++ 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/metrics/metrics_daemon.cc b/metrics/metrics_daemon.cc index 634027842..f9061d563 100644 --- a/metrics/metrics_daemon.cc +++ b/metrics/metrics_daemon.cc @@ -210,6 +210,7 @@ uint32_t MetricsDaemon::GetOsVersionHash() { void MetricsDaemon::Init(bool testing, bool uploader_active, + bool dbus_enabled, MetricsLibraryInterface* metrics_lib, const string& vmstats_path, const string& scaling_max_freq_path, @@ -220,6 +221,7 @@ void MetricsDaemon::Init(bool testing, const string& config_root) { testing_ = testing; uploader_active_ = uploader_active; + dbus_enabled_ = dbus_enabled; config_root_ = config_root; DCHECK(metrics_lib != nullptr); metrics_lib_ = metrics_lib; @@ -275,36 +277,39 @@ void MetricsDaemon::Init(bool testing, } int MetricsDaemon::OnInit() { - int return_code = chromeos::DBusDaemon::OnInit(); + int return_code = dbus_enabled_ ? chromeos::DBusDaemon::OnInit() : + chromeos::Daemon::OnInit(); if (return_code != EX_OK) return return_code; if (testing_) return EX_OK; - bus_->AssertOnDBusThread(); - CHECK(bus_->SetUpAsyncOperations()); + if (dbus_enabled_) { + bus_->AssertOnDBusThread(); + CHECK(bus_->SetUpAsyncOperations()); - if (bus_->is_connected()) { - const std::string match_rule = - base::StringPrintf(kCrashReporterMatchRule, - kCrashReporterInterface, - kCrashReporterUserCrashSignal); + if (bus_->is_connected()) { + const std::string match_rule = + base::StringPrintf(kCrashReporterMatchRule, + kCrashReporterInterface, + kCrashReporterUserCrashSignal); - bus_->AddFilterFunction(&MetricsDaemon::MessageFilter, this); + bus_->AddFilterFunction(&MetricsDaemon::MessageFilter, this); - DBusError error; - dbus_error_init(&error); - bus_->AddMatch(match_rule, &error); + DBusError error; + dbus_error_init(&error); + bus_->AddMatch(match_rule, &error); - if (dbus_error_is_set(&error)) { - LOG(ERROR) << "Failed to add match rule \"" << match_rule << "\". Got " - << error.name << ": " << error.message; - return EX_SOFTWARE; + if (dbus_error_is_set(&error)) { + LOG(ERROR) << "Failed to add match rule \"" << match_rule << "\". Got " + << error.name << ": " << error.message; + return EX_SOFTWARE; + } + } else { + LOG(ERROR) << "DBus isn't connected."; + return EX_UNAVAILABLE; } - } else { - LOG(ERROR) << "DBus isn't connected."; - return EX_UNAVAILABLE; } if (uploader_active_) { @@ -317,7 +322,7 @@ int MetricsDaemon::OnInit() { } void MetricsDaemon::OnShutdown(int* return_code) { - if (!testing_ && bus_->is_connected()) { + if (!testing_ && dbus_enabled_ && bus_->is_connected()) { const std::string match_rule = base::StringPrintf(kCrashReporterMatchRule, kCrashReporterInterface, diff --git a/metrics/metrics_daemon.h b/metrics/metrics_daemon.h index 49e6d7058..ccac52a19 100644 --- a/metrics/metrics_daemon.h +++ b/metrics/metrics_daemon.h @@ -31,6 +31,7 @@ class MetricsDaemon : public chromeos::DBusDaemon { // Initializes metrics class variables. void Init(bool testing, bool uploader_active, + bool dbus_enabled, MetricsLibraryInterface* metrics_lib, const std::string& vmstats_path, const std::string& cpuinfo_max_freq_path, @@ -289,6 +290,10 @@ class MetricsDaemon : public chromeos::DBusDaemon { // Whether the uploader is enabled or disabled. bool uploader_active_; + // Whether or not dbus should be used. + // If disabled, we will not collect the frequency of crashes. + bool dbus_enabled_; + // Root of the configuration files to use. std::string config_root_; diff --git a/metrics/metrics_daemon_main.cc b/metrics/metrics_daemon_main.cc index 01a6f7bd0..6c580ba25 100644 --- a/metrics/metrics_daemon_main.cc +++ b/metrics/metrics_daemon_main.cc @@ -29,6 +29,9 @@ int main(int argc, char** argv) { false, "run the uploader once and exit"); + // Enable dbus. + DEFINE_bool(withdbus, true, "Enable dbus"); + // Upload Service flags. DEFINE_int32(upload_interval_secs, 1800, @@ -58,6 +61,7 @@ int main(int argc, char** argv) { MetricsDaemon daemon; daemon.Init(FLAGS_uploader_test, FLAGS_uploader | FLAGS_uploader_test, + FLAGS_withdbus, &metrics_lib, "/proc/vmstat", kScalingMaxFreqPath,