1d02153c9SJayanth Othayoth #pragma once
2d02153c9SJayanth Othayoth 
3d02153c9SJayanth Othayoth #include <map>
4d02153c9SJayanth Othayoth 
5d02153c9SJayanth Othayoth #include "dump_utils.hpp"
6d02153c9SJayanth Othayoth #include "watch.hpp"
7*bf6ec600SJayanth Othayoth #include "config.h"
8d02153c9SJayanth Othayoth 
9d02153c9SJayanth Othayoth namespace phosphor
10d02153c9SJayanth Othayoth {
11d02153c9SJayanth Othayoth namespace dump
12d02153c9SJayanth Othayoth {
13d02153c9SJayanth Othayoth namespace core
14d02153c9SJayanth Othayoth {
15*bf6ec600SJayanth Othayoth using Watch = phosphor::dump::inotify::Watch;
16d02153c9SJayanth Othayoth using UserMap = phosphor::dump::inotify::UserMap;
17d02153c9SJayanth Othayoth 
18*bf6ec600SJayanth Othayoth /** @class Manager
19*bf6ec600SJayanth Othayoth  *  @brief OpenBMC Core manager implementation.
20d02153c9SJayanth Othayoth  */
21*bf6ec600SJayanth Othayoth class Manager
22*bf6ec600SJayanth Othayoth {
23*bf6ec600SJayanth Othayoth     public:
24*bf6ec600SJayanth Othayoth         Manager() = delete;
25*bf6ec600SJayanth Othayoth         Manager(const Manager&) = default;
26*bf6ec600SJayanth Othayoth         Manager& operator=(const Manager&) = delete;
27*bf6ec600SJayanth Othayoth         Manager(Manager&&) = delete;
28*bf6ec600SJayanth Othayoth         Manager& operator=(Manager&&) = delete;
29*bf6ec600SJayanth Othayoth         virtual ~Manager() = default;
30d02153c9SJayanth Othayoth 
31*bf6ec600SJayanth Othayoth         /** @brief Constructor to create core watch object.
32*bf6ec600SJayanth Othayoth          *  @param[in] event - Dump manager sd_event loop.
33*bf6ec600SJayanth Othayoth          */
34*bf6ec600SJayanth Othayoth         Manager(const EventPtr& event) :
35*bf6ec600SJayanth Othayoth             eventLoop(event.get()),
36*bf6ec600SJayanth Othayoth             coreWatch(eventLoop,
37*bf6ec600SJayanth Othayoth                       IN_NONBLOCK,
38*bf6ec600SJayanth Othayoth                       IN_CLOSE_WRITE,
39*bf6ec600SJayanth Othayoth                       EPOLLIN,
40*bf6ec600SJayanth Othayoth                       CORE_FILE_DIR,
41*bf6ec600SJayanth Othayoth                       std::bind(
42*bf6ec600SJayanth Othayoth                           std::mem_fn(
43*bf6ec600SJayanth Othayoth                               &phosphor::dump::core::Manager::watchCallback),
44*bf6ec600SJayanth Othayoth                           this, std::placeholders::_1))
45*bf6ec600SJayanth Othayoth         {}
46*bf6ec600SJayanth Othayoth 
47*bf6ec600SJayanth Othayoth     private:
48d3273eadSJayanth Othayoth         /** @brief Helper function for initiating dump request using
49d3273eadSJayanth Othayoth          *         D-bus internal create interface.
50d3273eadSJayanth Othayoth          *  @param [in] files - Core files list
51d3273eadSJayanth Othayoth          */
52d3273eadSJayanth Othayoth         void createHelper(const std::vector<std::string>& files);
53d3273eadSJayanth Othayoth 
54*bf6ec600SJayanth Othayoth 
55*bf6ec600SJayanth Othayoth         /** @brief Implementation of core watch call back
56*bf6ec600SJayanth Othayoth          * @param [in] fileInfo - map of file info  path:event
57*bf6ec600SJayanth Othayoth          */
58*bf6ec600SJayanth Othayoth         void watchCallback(const UserMap& fileInfo);
59*bf6ec600SJayanth Othayoth 
60*bf6ec600SJayanth Othayoth         /** @brief sdbusplus Dump event loop */
61*bf6ec600SJayanth Othayoth         EventPtr eventLoop;
62*bf6ec600SJayanth Othayoth 
63*bf6ec600SJayanth Othayoth         /** @brief Core watch object */
64*bf6ec600SJayanth Othayoth         Watch coreWatch;
65*bf6ec600SJayanth Othayoth };
66*bf6ec600SJayanth Othayoth 
67d02153c9SJayanth Othayoth } // namepsace core
68d02153c9SJayanth Othayoth } // namespace dump
69d02153c9SJayanth Othayoth } // namespace phosphor
70