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