summaryrefslogtreecommitdiffstats
path: root/host_state_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'host_state_manager.cpp')
-rw-r--r--host_state_manager.cpp68
1 files changed, 28 insertions, 40 deletions
diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index 6b13276..0991cf7 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -2,14 +2,18 @@
#include <map>
#include <string>
#include <systemd/sd-bus.h>
+#include <cereal/cereal.hpp>
+#include <cereal/types/string.hpp>
+#include <cereal/types/vector.hpp>
+#include <cereal/types/tuple.hpp>
+#include <cereal/archives/json.hpp>
+#include <fstream>
#include <sdbusplus/server.hpp>
#include <phosphor-logging/log.hpp>
#include <phosphor-logging/elog-errors.hpp>
-#include <experimental/filesystem>
#include <xyz/openbmc_project/Control/Power/RestorePolicy/server.hpp>
#include <xyz/openbmc_project/Common/error.hpp>
#include "host_state_manager.hpp"
-#include "host_state_serialize.hpp"
#include "config.h"
@@ -98,9 +102,7 @@ void Host::determineInitialState()
server::Host::requestedHostTransition(Transition::Off);
}
- auto restore = getStateRestoreSetting();
-
- if ((!restore) || (!deserialize(HOST_STATE_PERSIST_PATH, *this)))
+ if (!deserialize(HOST_STATE_PERSIST_PATH))
{
//set to default value.
server::Host::requestedHostTransition(Transition::Off);
@@ -109,40 +111,6 @@ void Host::determineInitialState()
return;
}
-bool Host::getStateRestoreSetting() const
-{
- using namespace settings;
- using namespace sdbusplus::xyz::openbmc_project::Common::Error;
- using namespace sdbusplus::xyz::openbmc_project::Control::Power::server;
-
- auto method =
- bus.new_method_call(
- settings.service(settings.powerRestorePolicy,
- powerRestoreIntf).c_str(),
- settings.powerRestorePolicy.c_str(),
- "org.freedesktop.DBus.Properties",
- "Get");
-
- method.append(powerRestoreIntf, "PowerRestorePolicy");
- auto reply = bus.call(method);
- if (reply.is_method_error())
- {
- log<level::ERR>("Error in PowerRestorePolicy Get");
- elog<InternalFailure>();
- }
-
- sdbusplus::message::variant<std::string> result;
- reply.read(result);
- auto powerPolicy = result.get<std::string>();
-
- if (RestorePolicy::Policy::Restore ==
- RestorePolicy::convertPolicyFromString(powerPolicy))
- {
- return true;
- }
- return false;
-}
-
void Host::executeTransition(Transition tranReq)
{
auto sysdUnit = SYSTEMD_TARGET_TABLE.find(tranReq)->second;
@@ -319,6 +287,26 @@ uint32_t Host::decrementRebootCount()
return rebootCount;
}
+fs::path Host::serialize(const fs::path& dir)
+{
+ std::ofstream os(dir.c_str(), std::ios::binary);
+ cereal::JSONOutputArchive oarchive(os);
+ oarchive(*this);
+ return dir;
+}
+
+bool Host::deserialize(const fs::path& path)
+{
+ if (fs::exists(path))
+ {
+ std::ifstream is(path.c_str(), std::ios::in | std::ios::binary);
+ cereal::JSONInputArchive iarchive(is);
+ iarchive(*this);
+ return true;
+ }
+ return false;
+}
+
Host::Transition Host::requestedHostTransition(Transition value)
{
log<level::INFO>(
@@ -339,7 +327,7 @@ Host::Transition Host::requestedHostTransition(Transition value)
executeTransition(value);
auto retVal = server::Host::requestedHostTransition(value);
- serialize(*this);
+ serialize();
return retVal;
}
OpenPOWER on IntegriCloud