1 #pragma once
2 
3 #include "data_interface.hpp"
4 #include "log_manager.hpp"
5 #include "paths.hpp"
6 #include "repository.hpp"
7 
8 namespace openpower
9 {
10 namespace pels
11 {
12 
13 using namespace phosphor::logging;
14 
15 /**
16  * @brief PEL manager object
17  */
18 class Manager
19 {
20   public:
21     Manager() = delete;
22     ~Manager() = default;
23     Manager(const Manager&) = default;
24     Manager& operator=(const Manager&) = default;
25     Manager(Manager&&) = default;
26     Manager& operator=(Manager&&) = default;
27 
28     /**
29      * @brief constructor
30      *
31      * @param[in] logManager - internal::Manager object
32      */
33     explicit Manager(phosphor::logging::internal::Manager& logManager,
34                      std::unique_ptr<DataInterfaceBase>&& dataIface) :
35         _logManager(logManager),
36         _repo(getPELRepoPath()), _dataIface(std::move(dataIface))
37     {
38     }
39 
40     /**
41      * @brief Creates a PEL based on the OpenBMC event log contents.  If
42      *        a PEL was passed in via the RAWPEL specifier in the
43      *        additionalData parameter, use that instead.
44      *
45      * @param[in] message - the event log message property
46      * @param[in] obmcLogID - the corresponding OpenBMC event log id
47      * @param[in] timestamp - the Timestamp property
48      * @param[in] severity - the event log severity
49      * @param[in] additionalData - the AdditionalData property
50      * @param[in] associations - the Associations property
51      */
52     void create(const std::string& message, uint32_t obmcLogID,
53                 uint64_t timestamp, Entry::Level severity,
54                 const std::vector<std::string>& additionalData,
55                 const std::vector<std::string>& associations);
56 
57     /**
58      * @brief Erase a PEL based on its OpenBMC event log ID
59      *
60      * @param[in] obmcLogID - the corresponding OpenBMC event log id
61      */
62     void erase(uint32_t obmcLogID);
63 
64     /** @brief Says if an OpenBMC event log may not be manually deleted at this
65      *         time because its corresponding PEL cannot be.
66      *
67      * There are PEL retention policies that can prohibit the manual deletion
68      * of PELs (and therefore OpenBMC event logs).
69      *
70      * @param[in] obmcLogID - the OpenBMC event log ID
71      * @return bool - true if prohibited
72      */
73     bool isDeleteProhibited(uint32_t obmcLogID);
74 
75   private:
76     /**
77      * @brief Adds a received raw PEL to the PEL repository
78      *
79      * @param[in] rawPelPath - The path to the file that contains the
80      *                         raw PEL.
81      * @param[in] obmcLogID - the corresponding OpenBMC event log id
82      */
83     void addRawPEL(const std::string& rawPelPath, uint32_t obmcLogID);
84 
85     /**
86      * @brief Creates a PEL based on the OpenBMC event log contents.
87      *
88      * @param[in] message - The event log message property
89      * @param[in] obmcLogID - the corresponding OpenBMC event log id
90      * @param[in] timestamp - The timestamp property
91      * @param[in] severity - The event log severity
92      * @param[in] additionalData - The AdditionalData property
93      * @param[in] associations - The associations property
94      */
95     void createPEL(const std::string& message, uint32_t obmcLogID,
96                    uint64_t timestamp, Entry::Level severity,
97                    const std::vector<std::string>& additionalData,
98                    const std::vector<std::string>& associations);
99 
100     /**
101      * @brief Reference to phosphor-logging's Manager class
102      */
103     internal::Manager& _logManager;
104 
105     /**
106      * @brief The PEL repository object
107      */
108     Repository _repo;
109 
110     /**
111      * @brief The API the PEL sections use to gather data
112      */
113     std::unique_ptr<DataInterfaceBase> _dataIface;
114 };
115 
116 } // namespace pels
117 } // namespace openpower
118