extract PowerStatusMonitor::handlePowerMatch
Extract this inline lambda into a named function.
Add a debug log statement for easier testing.
Tested: power match is triggered on power state change.
```
ipmitool power on
```
```
Jul 30 14:14:33 s8030-bmc-30303035c0c1 entity-manager[696]: power match triggered
Jul 30 14:14:34 s8030-bmc-30303035c0c1 entity-manager[696]: power match triggered
Jul 30 14:14:34 s8030-bmc-30303035c0c1 entity-manager[696]: power match triggered
Jul 30 14:14:34 s8030-bmc-30303035c0c1 entity-manager[696]: power match triggered
```
It looks like it is triggered multiple times but that has nothing to do
with the changes done in this patch.
Change-Id: If7828a1195565485aeb890223342d6a135da2c46
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/src/entity_manager/power_status_monitor.cpp b/src/entity_manager/power_status_monitor.cpp
index cd8b9ca..93617d2 100644
--- a/src/entity_manager/power_status_monitor.cpp
+++ b/src/entity_manager/power_status_monitor.cpp
@@ -1,10 +1,12 @@
#include "power_status_monitor.hpp"
+#include "phosphor-logging/lg2.hpp"
#include "utils.hpp"
-#include <boost/algorithm/string/predicate.hpp>
#include <sdbusplus/bus/match.hpp>
+#include <flat_map>
+
namespace power
{
@@ -22,6 +24,21 @@
return powerStatusOn;
}
+void PowerStatusMonitor::handlePowerMatch(sdbusplus::message_t& message)
+{
+ lg2::debug("power match triggered");
+
+ std::string objectName;
+ std::flat_map<std::string, std::variant<std::string>> values;
+ message.read(objectName, values);
+ auto findState = values.find(power::property);
+ if (findState != values.end())
+ {
+ powerStatusOn =
+ std::get<std::string>(findState->second).ends_with("Running");
+ }
+}
+
void PowerStatusMonitor::setupPowerMatch(
const std::shared_ptr<sdbusplus::asio::connection>& conn)
{
@@ -31,18 +48,7 @@
std::string(em_utils::properties::interface) + "',path='" +
std::string(power::path) + "',arg0='" +
std::string(power::interface) + "'",
- [this](sdbusplus::message_t& message) {
- std::string objectName;
- boost::container::flat_map<std::string, std::variant<std::string>>
- values;
- message.read(objectName, values);
- auto findState = values.find(power::property);
- if (findState != values.end())
- {
- powerStatusOn = boost::ends_with(
- std::get<std::string>(findState->second), "Running");
- }
- });
+ std::bind_front(&PowerStatusMonitor::handlePowerMatch, this));
conn->async_method_call(
[this](boost::system::error_code ec,
@@ -51,8 +57,7 @@
{
return;
}
- powerStatusOn =
- boost::ends_with(std::get<std::string>(state), "Running");
+ powerStatusOn = std::get<std::string>(state).ends_with("Running");
},
power::busname, power::path, em_utils::properties::interface,
em_utils::properties::get, power::interface, power::property);
diff --git a/src/entity_manager/power_status_monitor.hpp b/src/entity_manager/power_status_monitor.hpp
index e70031e..0955607 100644
--- a/src/entity_manager/power_status_monitor.hpp
+++ b/src/entity_manager/power_status_monitor.hpp
@@ -14,6 +14,8 @@
const std::shared_ptr<sdbusplus::asio::connection>& conn);
private:
+ void handlePowerMatch(sdbusplus::message_t& message);
+
bool powerStatusOn = false;
std::unique_ptr<sdbusplus::bus::match_t> powerMatch = nullptr;
};