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