1 #pragma once 2 3 #include "dbus.hpp" 4 #include "interfaces.hpp" 5 6 #include <experimental/filesystem> 7 8 namespace ibm 9 { 10 namespace logging 11 { 12 13 namespace fs = std::experimental::filesystem; 14 15 /** 16 * @class Callout 17 * 18 * This class provides information about a callout by utilizing the 19 * xyz.openbmc_project.Inventory.Decorator.Asset and 20 * xyz.openbmc_project.Common.ObjectPath interfaces. 21 * 22 * It also has the ability to persist and restore its data. 23 */ 24 class Callout : public CalloutObject 25 { 26 public: 27 Callout() = delete; 28 Callout(const Callout&) = delete; 29 Callout& operator=(const Callout&) = delete; 30 Callout(Callout&&) = default; 31 Callout& operator=(Callout&&) = default; 32 ~Callout() = default; 33 34 /** 35 * Constructor 36 * 37 * Populates the Asset D-Bus properties with data from the property map. 38 * 39 * @param[in] bus - D-Bus object 40 * @param[in] objectPath - object path 41 * @param[in] inventoryPath - inventory path of the callout 42 * @param[in] id - which callout this is 43 * @param[in] timestamp - timestamp when the log was created 44 * @param[in] properties - the properties for the Asset interface. 45 */ 46 Callout(sdbusplus::bus::bus& bus, const std::string& objectPath, 47 const std::string& inventoryPath, size_t id, uint64_t timestamp, 48 const DbusPropertyMap& properties); 49 /** 50 * Constructor 51 * 52 * This version is for when the object is being restored and does 53 * not take the properties map. 54 * 55 * @param[in] bus - D-Bus object 56 * @param[in] objectPath - object path 57 * @param[in] id - which callout this is 58 * @param[in] timestamp - timestamp when the log was created 59 * @param[in] properties - the properties for the Asset interface. 60 */ 61 Callout(sdbusplus::bus::bus& bus, const std::string& objectPath, size_t id, 62 uint64_t timestamp); 63 64 /** 65 * Returns the callout ID 66 * 67 * @return id - the ID 68 */ 69 inline auto id() const 70 { 71 return entryID; 72 } 73 74 /** 75 * Sets the callout ID 76 * 77 * @param[in] id - the ID 78 */ 79 inline void id(uint32_t id) 80 { 81 entryID = id; 82 } 83 84 /** 85 * Returns the timestamp 86 * 87 * @return timestamp 88 */ 89 inline auto ts() const 90 { 91 return timestamp; 92 } 93 94 /** 95 * Sets the timestamp 96 * 97 * @param[in] ts - the timestamp 98 */ 99 inline void ts(uint64_t ts) 100 { 101 timestamp = ts; 102 } 103 104 /** 105 * Serializes the class instance into a file in the 106 * directory passed in. The filename will match the 107 * ID value passed into the constructor. 108 * 109 * @param[in] - the directory to save the file in. 110 */ 111 void serialize(const fs::path& dir); 112 113 /** 114 * Loads the class members in from a file written by a previous 115 * call to serialize(). The filename it uses is the ID 116 * value passed into the constructor in the directory 117 * passed to this function. 118 * 119 * @param[in] dir - the directory to look for the file in 120 * 121 * @return bool - true if the deserialization was successful, 122 * false if it wasn't 123 */ 124 bool deserialize(const fs::path& dir); 125 126 private: 127 /** 128 * Returns the fully qualified filename to use for the serialization 129 * data. The file is the ID value, like "0", in the base directory 130 * passed in. 131 * 132 * @param[in] baseDir - the directory the file will be in 133 * 134 * @return path - the filename 135 */ 136 inline auto getFilePath(const fs::path& baseDir) 137 { 138 return baseDir / std::to_string(entryID); 139 } 140 141 /** 142 * The unique identifier for the callout, as error logs can have 143 * multiple callouts. They start at 0. 144 */ 145 size_t entryID; 146 147 /** 148 * The timestamp of when the error log was created. 149 * Used for ensuring the callout data is being restored for 150 * the correct error log. 151 */ 152 uint64_t timestamp; 153 }; 154 } // namespace logging 155 } // namespace ibm 156