blob: 47303110a1a220850cc9ec27e2ff849ba3182144 [file] [log] [blame]
Jayanth Othayothd0f00642017-09-04 06:26:30 -05001#pragma once
2
Jayanth Othayoth24964822017-09-04 22:07:06 -05003#include <set>
4#include <cereal/access.hpp>
5
Jayanth Othayothd0f00642017-09-04 06:26:30 -05006#include <sdbusplus/bus.hpp>
7#include <sdbusplus/server.hpp>
Jayanth Othayothd0f00642017-09-04 06:26:30 -05008
Jayanth Othayoth24964822017-09-04 22:07:06 -05009#include "config.h"
Jayanth Othayothd0f00642017-09-04 06:26:30 -050010#include "dump_manager.hpp"
11
12namespace phosphor
13{
14namespace dump
15{
16namespace elog
17{
18
19using IMgr = phosphor::dump::internal::Manager;
Jayanth Othayoth24964822017-09-04 22:07:06 -050020using EId = uint32_t;
21using ElogList = std::set<EId>;
Jayanth Othayothd0f00642017-09-04 06:26:30 -050022
23/** @class Watch
Jayanth Othayoth24964822017-09-04 22:07:06 -050024 * @brief Adds d-bus signal based watch for elog add and delete.
Jayanth Othayothd0f00642017-09-04 06:26:30 -050025 * @details This implements methods for watching for InternalFailure
26 * type error message and call appropriate function to initiate dump
27 */
28class Watch
29{
30 public:
31 Watch() = delete;
32 ~Watch() = default;
33 Watch(const Watch&) = delete;
34 Watch& operator=(const Watch&) = delete;
35 Watch(Watch&&) = default;
36 Watch& operator=(Watch&&) = default;
37
Jayanth Othayoth24964822017-09-04 22:07:06 -050038 /** @brief constructs watch for elog add and delete signals.
Jayanth Othayothd0f00642017-09-04 06:26:30 -050039 * @param[in] bus - The Dbus bus object
40 * @param[in] intMgr - Dump internal Manager object
41 */
Jayanth Othayoth24964822017-09-04 22:07:06 -050042 Watch(sdbusplus::bus::bus& bus, IMgr& iMgr);
Jayanth Othayothd0f00642017-09-04 06:26:30 -050043 private:
44
Jayanth Othayoth24964822017-09-04 22:07:06 -050045 friend class cereal::access;
46
47 /** @brief Function required by Cereal to perform serialization.
48 * @tparam Archive - Cereal archive type (binary in our case).
49 * @param[in] a - reference to Cereal archive.
Vishwanatha Subbanna31085972017-10-05 17:06:37 +053050 * @param[in] version - Class version that enables handling
51 * a serialized data across code levels
Jayanth Othayoth24964822017-09-04 22:07:06 -050052 */
53 template<class Archive>
Vishwanatha Subbanna31085972017-10-05 17:06:37 +053054 void serialize(Archive& a, const std::uint32_t version)
Jayanth Othayoth24964822017-09-04 22:07:06 -050055 {
56 a(elogList);
Vishwanatha Subbanna31085972017-10-05 17:06:37 +053057
58 //TODO: openbmc/phosphor-debug-collector#1
59 // Split into load/save so that it enables
60 // version compare during serialization
Jayanth Othayoth24964822017-09-04 22:07:06 -050061 }
62
63 /** @brief Callback function for error log add.
Jayanth Othayothd0f00642017-09-04 06:26:30 -050064 * @details InternalError type error message initiates
65 * Internal error type dump request.
66 * @param[in] msg - Data associated with subscribed signal
67 */
Jayanth Othayoth24964822017-09-04 22:07:06 -050068 void addCallback(sdbusplus::message::message& msg);
69
70 /** @brief Callback function for error log delete.
71 * @param[in] msg - Data associated with subscribed signal
72 */
73 void delCallback(sdbusplus::message::message& msg);
74
75 /** @brief get elog ID from elog entry object string.
76 * @param[in] objectPath - elog entry object path.
77 * @return - elog id.
78 */
79 inline EId getEid(const std::string& objectPath)
80 {
81 fs::path path(objectPath);
82 return std::stoul(path.filename());
83 }
Jayanth Othayothd0f00642017-09-04 06:26:30 -050084
85 /** @brief Dump internal Manager object. */
86 IMgr& iMgr;
87
Jayanth Othayoth24964822017-09-04 22:07:06 -050088 /** @brief sdbusplus signal match for elog add */
89 sdbusplus::bus::match_t addMatch;
90
91 /** @brief sdbusplus signal match for elog delete */
92 sdbusplus::bus::match_t delMatch;
93
94 /** @brief List of elog ids, which have associated dumps created */
95 ElogList elogList;
Jayanth Othayothd0f00642017-09-04 06:26:30 -050096};
97
98}//namespace elog
99}//namespace dump
100}//namespace phosphor