xref: /openbmc/phosphor-logging/elog_serialize.hpp (revision 72654f10e45056ab55b77d835e2bfd01e8d98480)
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