1*89fa082aSMatt Spinler #pragma once 2*89fa082aSMatt Spinler #include "bcd_time.hpp" 3*89fa082aSMatt Spinler #include "pel.hpp" 4*89fa082aSMatt Spinler 5*89fa082aSMatt Spinler #include <algorithm> 6*89fa082aSMatt Spinler #include <filesystem> 7*89fa082aSMatt Spinler 8*89fa082aSMatt Spinler namespace openpower 9*89fa082aSMatt Spinler { 10*89fa082aSMatt Spinler namespace pels 11*89fa082aSMatt Spinler { 12*89fa082aSMatt Spinler 13*89fa082aSMatt Spinler /** 14*89fa082aSMatt Spinler * @class Repository 15*89fa082aSMatt Spinler * 16*89fa082aSMatt Spinler * The class handles saving and retrieving PELs on the BMC. 17*89fa082aSMatt Spinler */ 18*89fa082aSMatt Spinler class Repository 19*89fa082aSMatt Spinler { 20*89fa082aSMatt Spinler public: 21*89fa082aSMatt Spinler Repository() = delete; 22*89fa082aSMatt Spinler ~Repository() = default; 23*89fa082aSMatt Spinler Repository(const Repository&) = default; 24*89fa082aSMatt Spinler Repository& operator=(const Repository&) = default; 25*89fa082aSMatt Spinler Repository(Repository&&) = default; 26*89fa082aSMatt Spinler Repository& operator=(Repository&&) = default; 27*89fa082aSMatt Spinler 28*89fa082aSMatt Spinler /** 29*89fa082aSMatt Spinler * @brief Constructor 30*89fa082aSMatt Spinler * 31*89fa082aSMatt Spinler * @param[in] basePath - the base filesystem path for the repository 32*89fa082aSMatt Spinler */ 33*89fa082aSMatt Spinler Repository(const std::filesystem::path& basePath); 34*89fa082aSMatt Spinler 35*89fa082aSMatt Spinler /** 36*89fa082aSMatt Spinler * @brief Adds a PEL to the repository 37*89fa082aSMatt Spinler * 38*89fa082aSMatt Spinler * Throws File.Error.Open or File.Error.Write exceptions on failure 39*89fa082aSMatt Spinler * 40*89fa082aSMatt Spinler * @param[in] pel - the PEL to add 41*89fa082aSMatt Spinler */ 42*89fa082aSMatt Spinler void add(std::unique_ptr<PEL>& pel); 43*89fa082aSMatt Spinler 44*89fa082aSMatt Spinler /** 45*89fa082aSMatt Spinler * @brief Generates the filename to use for the PEL ID and BCDTime. 46*89fa082aSMatt Spinler * 47*89fa082aSMatt Spinler * @param[in] pelID - the PEL ID 48*89fa082aSMatt Spinler * @param[in] time - the BCD time 49*89fa082aSMatt Spinler * 50*89fa082aSMatt Spinler * @return string - A filename string of <BCD_time>_<pelID> 51*89fa082aSMatt Spinler */ 52*89fa082aSMatt Spinler static std::string getPELFilename(uint32_t pelID, const BCDTime& time); 53*89fa082aSMatt Spinler 54*89fa082aSMatt Spinler private: 55*89fa082aSMatt Spinler /** 56*89fa082aSMatt Spinler * @brief The filesystem path to the PEL logs. 57*89fa082aSMatt Spinler */ 58*89fa082aSMatt Spinler const std::filesystem::path _logPath; 59*89fa082aSMatt Spinler }; 60*89fa082aSMatt Spinler 61*89fa082aSMatt Spinler } // namespace pels 62*89fa082aSMatt Spinler } // namespace openpower 63