#include "power_status_monitor.hpp" #include "utils.hpp" #include #include namespace power { const static constexpr char* busname = "xyz.openbmc_project.State.Host"; const static constexpr char* interface = "xyz.openbmc_project.State.Host"; const static constexpr char* path = "/xyz/openbmc_project/state/host0"; const static constexpr char* property = "CurrentHostState"; bool PowerStatusMonitor::isPowerOn() { if (!powerMatch) { throw std::runtime_error("Power Match Not Created"); } return powerStatusOn; } void PowerStatusMonitor::setupPowerMatch( const std::shared_ptr& conn) { powerMatch = std::make_unique( static_cast(*conn), "type='signal',interface='" + 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> values; message.read(objectName, values); auto findState = values.find(power::property); if (findState != values.end()) { powerStatusOn = boost::ends_with( std::get(findState->second), "Running"); } }); conn->async_method_call( [this](boost::system::error_code ec, const std::variant& state) { if (ec) { return; } powerStatusOn = boost::ends_with(std::get(state), "Running"); }, power::busname, power::path, em_utils::properties::interface, em_utils::properties::get, power::interface, power::property); } } // namespace power