xref: /openbmc/phosphor-debug-collector/elog_watch.hpp (revision d0f0064eb989a93e241c599641654f12141ef636)
1 #pragma once
2 
3 #include <sdbusplus/bus.hpp>
4 #include <sdbusplus/server.hpp>
5 #include "config.h"
6 
7 #include "dump_manager.hpp"
8 
9 namespace phosphor
10 {
11 namespace dump
12 {
13 namespace elog
14 {
15 
16 using IMgr = phosphor::dump::internal::Manager;
17 
18 /** @class Watch
19  *  @brief Adds d-bus signal based watch for elog commit.
20  *  @details This implements methods for watching for InternalFailure
21  *  type error message and call appropriate function to initiate dump
22  */
23 class Watch
24 {
25     public:
26         Watch() = delete;
27         ~Watch() = default;
28         Watch(const Watch&) = delete;
29         Watch& operator=(const Watch&) = delete;
30         Watch(Watch&&) = default;
31         Watch& operator=(Watch&&) = default;
32 
33         /** @brief constructs watch for elog commits.
34          *  @param[in] bus -  The Dbus bus object
35          *  @param[in] intMgr - Dump internal Manager object
36          */
37         Watch(sdbusplus::bus::bus& bus, IMgr& iMgr):
38             iMgr(iMgr),
39             elogMatch(
40                 bus,
41                 sdbusplus::bus::match::rules::interfacesAdded() +
42                 sdbusplus::bus::match::rules::path_namespace(
43                                               OBJ_LOGGING),
44                 std::bind(std::mem_fn(&Watch::callback),
45                           this, std::placeholders::_1))
46         {
47             //Do nothing
48         }
49     private:
50 
51         /** @brief Callback function for error log commit.
52          *  @details InternalError type error message initiates
53          *           Internal error type dump request.
54          *  @param[in] msg  - Data associated with subscribed signal
55          */
56         void callback(sdbusplus::message::message& msg);
57 
58         /**  @brief Dump internal Manager object. */
59         IMgr& iMgr;
60 
61         /** @brief sdbusplus signal match for elog commit */
62         sdbusplus::bus::match_t elogMatch;
63 };
64 
65 }//namespace elog
66 }//namespace dump
67 }//namespace phosphor
68