| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef DIAGNOSTICS_CROS_HEALTHD_SYSTEM_CONTEXT_H_ |
| #define DIAGNOSTICS_CROS_HEALTHD_SYSTEM_CONTEXT_H_ |
| |
| #include <memory> |
| |
| #include <base/memory/scoped_refptr.h> |
| #include <brillo/dbus/dbus_connection.h> |
| #include <chromeos/chromeos-config/libcros_config/cros_config_interface.h> |
| #include <dbus/bus.h> |
| #include <dbus/object_proxy.h> |
| #include <mojo/public/cpp/platform/platform_channel_endpoint.h> |
| |
| #include "diagnostics/common/system/bluetooth_client.h" |
| #include "diagnostics/common/system/debugd_adapter.h" |
| #include "diagnostics/common/system/powerd_adapter.h" |
| #include "diagnostics/cros_healthd/executor/executor_adapter.h" |
| #include "diagnostics/cros_healthd/system/system_config_interface.h" |
| #include "diagnostics/cros_healthd/system/system_utilities.h" |
| |
| namespace org { |
| namespace chromium { |
| class debugdProxyInterface; |
| } // namespace chromium |
| } // namespace org |
| |
| namespace diagnostics { |
| |
| // A context class for holding the helper objects used in cros_healthd, which |
| // simplifies the passing of the helper objects to other objects. For instance, |
| // instead of passing various helper objects to an object via its constructor, |
| // the context object is passed. |
| class Context { |
| public: |
| // The no-arg constructor exists so that MockContext doesn't need to specify a |
| // Mojo endpoint. |
| Context(); |
| // All production uses should use this constructor. |
| explicit Context(mojo::PlatformChannelEndpoint endpoint); |
| Context(const Context&) = delete; |
| Context& operator=(const Context&) = delete; |
| virtual ~Context(); |
| |
| // Initializes all helper objects in the context. Returns true on success. |
| // Must be called before any of the accessors are used. |
| virtual bool Initialize(); |
| |
| // Accessors for the various helper objects: |
| |
| // Use the object returned by bluetooth_client() to subscribe to notifications |
| // for D-Bus objects representing Bluetooth adapters and devices. |
| BluetoothClient* bluetooth_client() const; |
| // Use the object returned by debugd_proxy() to make calls to debugd. Example: |
| // cros_healthd calls out to debugd when it needs to collect smart battery |
| // metrics like manufacture_date_smart and temperature_smart. |
| org::chromium::debugdProxyInterface* debugd_proxy() const; |
| // Use the object returned by debugd_adapter() to make calls to debugd. |
| // Example: cros_healthd calls out to debugd with async callbacks when it |
| // needs to trigger nvme self-test or collect data like progress info. |
| DebugdAdapter* debugd_adapter() const; |
| // Use the object returned by power_manager_proxy() to make calls to |
| // power_manager. Example: cros_healthd calls out to power_manager when it |
| // needs to collect battery metrics like cycle count. |
| dbus::ObjectProxy* power_manager_proxy() const; |
| // Use the object returned by powerd_adapter() to subscribe to notifications |
| // from powerd. |
| PowerdAdapter* powerd_adapter() const; |
| // Use the object returned by system_config() to determine which conditional |
| // features a device supports. |
| SystemConfigInterface* system_config() const; |
| // Use the object returned by executor() to make calls to the root-level |
| // executor. |
| ExecutorAdapter* executor() const; |
| // Use the object returned by system_utils() to access system utilities. |
| SystemUtilities* system_utils() const; |
| |
| private: |
| // Allows MockContext to override the default helper objects. |
| friend class MockContext; |
| |
| // Used to connect to the root-level executor via Mojo. |
| mojo::PlatformChannelEndpoint endpoint_; |
| |
| // This should be the only connection to D-Bus. Use |connection_| to get the |
| // |dbus_bus_|. |
| brillo::DBusConnection connection_; |
| // Used by this object to initiate D-Bus clients. |
| scoped_refptr<dbus::Bus> dbus_bus_; |
| |
| // Used by this object to initialize the SystemConfig. Used for reading |
| // cros_config properties to determine device feature support. |
| std::unique_ptr<brillo::CrosConfigInterface> cros_config_; |
| |
| // Members accessed via the accessor functions defined above. |
| std::unique_ptr<BluetoothClient> bluetooth_client_; |
| std::unique_ptr<org::chromium::debugdProxyInterface> debugd_proxy_; |
| std::unique_ptr<DebugdAdapter> debugd_adapter_; |
| // Owned by |dbus_bus_|. |
| dbus::ObjectProxy* power_manager_proxy_; |
| std::unique_ptr<PowerdAdapter> powerd_adapter_; |
| std::unique_ptr<SystemConfigInterface> system_config_; |
| std::unique_ptr<ExecutorAdapter> executor_; |
| std::unique_ptr<SystemUtilities> system_utils_; |
| }; |
| |
| } // namespace diagnostics |
| |
| #endif // DIAGNOSTICS_CROS_HEALTHD_SYSTEM_CONTEXT_H_ |