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