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