| // Copyright 2021 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. |
| |
| #include <base/logging.h> |
| #include <dbus/bus.h> |
| #include <dbus/message.h> |
| #include <dbus/object_proxy.h> |
| #include <memory> |
| #include <utility> |
| |
| #include "federated/device_status_monitor.h" |
| #include "federated/network_status_training_condition.h" |
| #include "federated/power_supply_training_condition.h" |
| |
| namespace federated { |
| |
| DeviceStatusMonitor::DeviceStatusMonitor( |
| std::vector<std::unique_ptr<TrainingCondition>> training_conditions) |
| : training_conditions_(std::move(training_conditions)) { |
| DVLOG(1) << "Creating DeviceStatusMonitor"; |
| } |
| |
| std::unique_ptr<DeviceStatusMonitor> DeviceStatusMonitor::CreateFromDBus( |
| dbus::Bus* bus) { |
| std::vector<std::unique_ptr<TrainingCondition>> training_conditions(2); |
| training_conditions[0] = std::make_unique<PowerSupplyTrainingCondition>(bus); |
| training_conditions[1] = std::make_unique<NetworkStatusTrainingCondition>( |
| std::make_unique<shill::Client>(bus)); |
| |
| return std::make_unique<DeviceStatusMonitor>(std::move(training_conditions)); |
| } |
| |
| bool DeviceStatusMonitor::TrainingConditionsSatisfied() const { |
| DVLOG(1) << "DeviceStatusMonitor::TrainingConditionsSatisfied()"; |
| return std::all_of(training_conditions_.begin(), training_conditions_.end(), |
| [](auto const& condition) { |
| return condition->IsTrainingConditionSatisfied(); |
| }); |
| } |
| |
| } // namespace federated |