xref: /openbmc/phosphor-dbus-monitor/src/event_manager.hpp (revision 3fe976cc22e579860f5b1832d920636d93145507)
1cd22786aSRatan Gupta #pragma once
2cd22786aSRatan Gupta 
33e84ec66SRatan Gupta #include "event_entry.hpp"
43e84ec66SRatan Gupta 
5*3fe976ccSGeorge Liu #include <sdbusplus/bus.hpp>
6*3fe976ccSGeorge Liu 
73e84ec66SRatan Gupta #include <map>
83e84ec66SRatan Gupta #include <memory>
93e84ec66SRatan Gupta #include <queue>
10ae4c95c6SAndrew Geissler #include <string>
11cd22786aSRatan Gupta 
12cd22786aSRatan Gupta namespace phosphor
13cd22786aSRatan Gupta {
14cd22786aSRatan Gupta namespace events
15cd22786aSRatan Gupta {
16cd22786aSRatan Gupta 
17cd22786aSRatan Gupta /** @class Manager
18cd22786aSRatan Gupta  *  @brief OpenBMC Event manager implementation.
19cd22786aSRatan Gupta  */
20cd22786aSRatan Gupta class Manager
21cd22786aSRatan Gupta {
22cd22786aSRatan Gupta   public:
23cd22786aSRatan Gupta     Manager() = default;
24cd22786aSRatan Gupta     Manager(const Manager&) = delete;
25cd22786aSRatan Gupta     Manager& operator=(const Manager&) = delete;
26cd22786aSRatan Gupta     Manager(Manager&&) = default;
27cd22786aSRatan Gupta     Manager& operator=(Manager&&) = default;
28cd22786aSRatan Gupta     virtual ~Manager() = default;
29cd22786aSRatan Gupta 
30cd22786aSRatan Gupta     /** @brief Create the D-Bus Event object.
31cd22786aSRatan Gupta      *  @detail Add the objectPath,propertyName, propertyValue
32cd22786aSRatan Gupta      *          as additional data of the event object.
33cd22786aSRatan Gupta      *  @param[in] eventName - Name of the event.
343e84ec66SRatan Gupta      *  @param[in] eventMessage - Message for the event.
35cd22786aSRatan Gupta      *  @param[in] objectPath - Path of the D-Bus object.
36cd22786aSRatan Gupta      *  @param[in] propertyName - Name of the property.
37cd22786aSRatan Gupta      *  @param[in] propertyValue - Value of the property.
38cd22786aSRatan Gupta      */
39d1eac88dSBrad Bishop     void create(const std::string& eventName, const std::string& eventMessage,
40d1eac88dSBrad Bishop                 const std::string& objectPath, const std::string& propertyName,
41cd22786aSRatan Gupta                 const std::string& propertyValue);
42cd22786aSRatan Gupta 
436524b9d8SDhruvaraj Subhashchandran     /** @brief Construct event d-bus objects from their persisted
446524b9d8SDhruvaraj Subhashchandran      *         representations.
456524b9d8SDhruvaraj Subhashchandran      */
466524b9d8SDhruvaraj Subhashchandran     void restore();
476524b9d8SDhruvaraj Subhashchandran 
483e84ec66SRatan Gupta   private:
493e84ec66SRatan Gupta     using EventName = std::string;
503e84ec66SRatan Gupta     /** @brief Queue of events */
513e84ec66SRatan Gupta     using EventQueue = std::queue<std::unique_ptr<Entry>>;
523e84ec66SRatan Gupta 
533e84ec66SRatan Gupta     using EventMap = std::map<EventName, EventQueue>;
543e84ec66SRatan Gupta     /** @brief Map of event name  and the list of events **/
553e84ec66SRatan Gupta     EventMap eventMap;
56cd22786aSRatan Gupta };
57cd22786aSRatan Gupta 
58cd22786aSRatan Gupta Manager& getManager();
59cd22786aSRatan Gupta 
60cd22786aSRatan Gupta } // namespace events
61cd22786aSRatan Gupta } // namespace phosphor
62