1 #pragma once
2 
3 #include "event_entry.hpp"
4 
5 #include <map>
6 #include <memory>
7 #include <queue>
8 #include <sdbusplus/bus.hpp>
9 
10 namespace phosphor
11 {
12 namespace events
13 {
14 
15 /** @class Manager
16  *  @brief OpenBMC Event manager implementation.
17  */
18 class Manager
19 {
20   public:
21     Manager() = default;
22     Manager(const Manager&) = delete;
23     Manager& operator=(const Manager&) = delete;
24     Manager(Manager&&) = default;
25     Manager& operator=(Manager&&) = default;
26     virtual ~Manager() = default;
27 
28     /** @brief Create the D-Bus Event object.
29      *  @detail Add the objectPath,propertyName, propertyValue
30      *          as additional data of the event object.
31      *  @param[in] eventName - Name of the event.
32      *  @param[in] eventMessage - Message for the event.
33      *  @param[in] objectPath - Path of the D-Bus object.
34      *  @param[in] propertyName - Name of the property.
35      *  @param[in] propertyValue - Value of the property.
36      */
37     void create(const std::string& eventName, const std::string& eventMessage,
38                 const std::string& objectPath, const std::string& propertyName,
39                 const std::string& propertyValue);
40 
41     /** @brief Construct event d-bus objects from their persisted
42      *         representations.
43      */
44     void restore();
45 
46   private:
47     using EventName = std::string;
48     /** @brief Queue of events */
49     using EventQueue = std::queue<std::unique_ptr<Entry>>;
50 
51     using EventMap = std::map<EventName, EventQueue>;
52     /** @brief Map of event name  and the list of events **/
53     EventMap eventMap;
54 };
55 
56 Manager& getManager();
57 
58 } // namespace events
59 } // namespace phosphor
60