1*72654f10SDeepak Kodihalli #pragma once 2*72654f10SDeepak Kodihalli 3*72654f10SDeepak Kodihalli #include <string> 4*72654f10SDeepak Kodihalli #include <vector> 5*72654f10SDeepak Kodihalli #include <experimental/filesystem> 6*72654f10SDeepak Kodihalli #include "elog_entry.hpp" 7*72654f10SDeepak Kodihalli #include "config.h" 8*72654f10SDeepak Kodihalli 9*72654f10SDeepak Kodihalli namespace phosphor 10*72654f10SDeepak Kodihalli { 11*72654f10SDeepak Kodihalli namespace logging 12*72654f10SDeepak Kodihalli { 13*72654f10SDeepak Kodihalli 14*72654f10SDeepak Kodihalli namespace fs = std::experimental::filesystem; 15*72654f10SDeepak Kodihalli 16*72654f10SDeepak Kodihalli /** @brief Function required by Cereal to perform serialization. 17*72654f10SDeepak Kodihalli * @tparam Archive - Cereal archive type (binary in our case). 18*72654f10SDeepak Kodihalli * @param[in] a - reference to Cereal archive. 19*72654f10SDeepak Kodihalli * @param[in] e - const reference to error entry. 20*72654f10SDeepak Kodihalli */ 21*72654f10SDeepak Kodihalli template<class Archive> 22*72654f10SDeepak Kodihalli void save(Archive& a, const Entry& e) 23*72654f10SDeepak Kodihalli { 24*72654f10SDeepak Kodihalli a(e.id(), e.severity(), e.timestamp(), 25*72654f10SDeepak Kodihalli e.message(), e.additionalData(), e.associations(), e.resolved()); 26*72654f10SDeepak Kodihalli } 27*72654f10SDeepak Kodihalli 28*72654f10SDeepak Kodihalli /** @brief Function required by Cereal to perform deserialization. 29*72654f10SDeepak Kodihalli * @tparam Archive - Cereal archive type (binary in our case). 30*72654f10SDeepak Kodihalli * @param[in] a - reference to Cereal archive. 31*72654f10SDeepak Kodihalli * @param[in] e - reference to error entry. 32*72654f10SDeepak Kodihalli */ 33*72654f10SDeepak Kodihalli template<class Archive> 34*72654f10SDeepak Kodihalli void load(Archive& a, Entry& e) 35*72654f10SDeepak Kodihalli { 36*72654f10SDeepak Kodihalli using namespace 37*72654f10SDeepak Kodihalli sdbusplus::xyz::openbmc_project::Logging::server; 38*72654f10SDeepak Kodihalli 39*72654f10SDeepak Kodihalli uint32_t id{}; 40*72654f10SDeepak Kodihalli Entry::Level severity{}; 41*72654f10SDeepak Kodihalli uint64_t timestamp{}; 42*72654f10SDeepak Kodihalli std::string message{}; 43*72654f10SDeepak Kodihalli std::vector<std::string> additionalData{}; 44*72654f10SDeepak Kodihalli bool resolved{}; 45*72654f10SDeepak Kodihalli AssociationList associations{}; 46*72654f10SDeepak Kodihalli 47*72654f10SDeepak Kodihalli a(id, severity, timestamp, message, 48*72654f10SDeepak Kodihalli additionalData, associations, resolved); 49*72654f10SDeepak Kodihalli 50*72654f10SDeepak Kodihalli e.id(id); 51*72654f10SDeepak Kodihalli e.severity(severity); 52*72654f10SDeepak Kodihalli e.timestamp(timestamp); 53*72654f10SDeepak Kodihalli e.message(message); 54*72654f10SDeepak Kodihalli e.additionalData(additionalData); 55*72654f10SDeepak Kodihalli e.sdbusplus::xyz::openbmc_project:: 56*72654f10SDeepak Kodihalli Logging::server::Entry::resolved(resolved); 57*72654f10SDeepak Kodihalli e.associations(associations); 58*72654f10SDeepak Kodihalli } 59*72654f10SDeepak Kodihalli 60*72654f10SDeepak Kodihalli /** @brief Serialize and persist error d-bus object 61*72654f10SDeepak Kodihalli * @param[in] a - const reference to error entry. 62*72654f10SDeepak Kodihalli * @param[in] dir - pathname of directory where the serialized error will 63*72654f10SDeepak Kodihalli * be placed. 64*72654f10SDeepak Kodihalli * @return fs::path - pathname of persisted error file 65*72654f10SDeepak Kodihalli */ 66*72654f10SDeepak Kodihalli fs::path serialize(const Entry& e, 67*72654f10SDeepak Kodihalli const fs::path& dir = fs::path(ERRLOG_PERSIST_PATH)); 68*72654f10SDeepak Kodihalli 69*72654f10SDeepak Kodihalli /** @brief Deserialze a persisted error into a d-bus object 70*72654f10SDeepak Kodihalli * @param[in] path - pathname of persisted error file 71*72654f10SDeepak Kodihalli * @param[in] e - reference to error object which is the target of 72*72654f10SDeepak Kodihalli * deserialization. 73*72654f10SDeepak Kodihalli * @return bool - true if the deserialization was successful, false otherwise. 74*72654f10SDeepak Kodihalli */ 75*72654f10SDeepak Kodihalli bool deserialize(const fs::path& path, Entry& e); 76*72654f10SDeepak Kodihalli 77*72654f10SDeepak Kodihalli } // namespace logging 78*72654f10SDeepak Kodihalli } // namespace phosphor 79