1cf066aceSPatrick Venture #pragma once 2cf066aceSPatrick Venture 3cf066aceSPatrick Venture #include "status.hpp" 4cf066aceSPatrick Venture 5cf066aceSPatrick Venture #include <memory> 6cf066aceSPatrick Venture #include <sdbusplus/bus.hpp> 7*b22ebbf3SWilliam A. Kennington III #include <sdbusplus/bus/match.hpp> 8cf066aceSPatrick Venture #include <string> 9cf066aceSPatrick Venture 10cf066aceSPatrick Venture namespace ipmi_flash 11cf066aceSPatrick Venture { 12cf066aceSPatrick Venture 13*b22ebbf3SWilliam A. Kennington III class SystemdNoFile : public TriggerableActionInterface 14*b22ebbf3SWilliam A. Kennington III { 15*b22ebbf3SWilliam A. Kennington III public: 16*b22ebbf3SWilliam A. Kennington III static std::unique_ptr<TriggerableActionInterface> 17*b22ebbf3SWilliam A. Kennington III CreateSystemdNoFile(sdbusplus::bus::bus&& bus, 18*b22ebbf3SWilliam A. Kennington III const std::string& service, 19*b22ebbf3SWilliam A. Kennington III const std::string& mode); 20*b22ebbf3SWilliam A. Kennington III 21*b22ebbf3SWilliam A. Kennington III SystemdNoFile(sdbusplus::bus::bus&& bus, const std::string& service, 22*b22ebbf3SWilliam A. Kennington III const std::string& mode) : 23*b22ebbf3SWilliam A. Kennington III bus(std::move(bus)), 24*b22ebbf3SWilliam A. Kennington III triggerService(service), mode(mode) 25*b22ebbf3SWilliam A. Kennington III { 26*b22ebbf3SWilliam A. Kennington III } 27*b22ebbf3SWilliam A. Kennington III 28*b22ebbf3SWilliam A. Kennington III SystemdNoFile(const SystemdNoFile&) = delete; 29*b22ebbf3SWilliam A. Kennington III SystemdNoFile& operator=(const SystemdNoFile&) = delete; 30*b22ebbf3SWilliam A. Kennington III // sdbusplus match requires us to be pinned 31*b22ebbf3SWilliam A. Kennington III SystemdNoFile(SystemdNoFile&&) = delete; 32*b22ebbf3SWilliam A. Kennington III SystemdNoFile& operator=(SystemdNoFile&&) = delete; 33*b22ebbf3SWilliam A. Kennington III 34*b22ebbf3SWilliam A. Kennington III bool trigger() override; 35*b22ebbf3SWilliam A. Kennington III void abort() override; 36*b22ebbf3SWilliam A. Kennington III ActionStatus status() override; 37*b22ebbf3SWilliam A. Kennington III 38*b22ebbf3SWilliam A. Kennington III const std::string& getMode() const; 39*b22ebbf3SWilliam A. Kennington III 40*b22ebbf3SWilliam A. Kennington III private: 41*b22ebbf3SWilliam A. Kennington III sdbusplus::bus::bus bus; 42*b22ebbf3SWilliam A. Kennington III const std::string triggerService; 43*b22ebbf3SWilliam A. Kennington III const std::string mode; 44*b22ebbf3SWilliam A. Kennington III 45*b22ebbf3SWilliam A. Kennington III std::optional<sdbusplus::bus::match::match> jobMonitor; 46*b22ebbf3SWilliam A. Kennington III std::optional<std::string> job; 47*b22ebbf3SWilliam A. Kennington III ActionStatus currentStatus = ActionStatus::unknown; 48*b22ebbf3SWilliam A. Kennington III 49*b22ebbf3SWilliam A. Kennington III void match(sdbusplus::message::message& m); 50*b22ebbf3SWilliam A. Kennington III }; 51*b22ebbf3SWilliam A. Kennington III 52cf066aceSPatrick Venture /** 53cf066aceSPatrick Venture * Representation of what is used for triggering an action with systemd and 54cf066aceSPatrick Venture * checking the result by reading a file. 55cf066aceSPatrick Venture */ 56*b22ebbf3SWilliam A. Kennington III class SystemdWithStatusFile : public SystemdNoFile 57cf066aceSPatrick Venture { 58cf066aceSPatrick Venture public: 59cf066aceSPatrick Venture /** 60cf066aceSPatrick Venture * Create a default SystemdWithStatusFile object that uses systemd to 61cf066aceSPatrick Venture * trigger the process. 62cf066aceSPatrick Venture * 63cf066aceSPatrick Venture * @param[in] bus - an sdbusplus handler for a bus to use. 64cf066aceSPatrick Venture * @param[in] path - the path to check for verification status. 65cf066aceSPatrick Venture * @param[in] service - the systemd service to start to trigger 66cf066aceSPatrick Venture * verification. 67cf066aceSPatrick Venture * @param[in] mode - the job-mode when starting the systemd Unit. 68cf066aceSPatrick Venture */ 69cf066aceSPatrick Venture static std::unique_ptr<TriggerableActionInterface> 70cf066aceSPatrick Venture CreateSystemdWithStatusFile(sdbusplus::bus::bus&& bus, 71cf066aceSPatrick Venture const std::string& path, 72cf066aceSPatrick Venture const std::string& service, 73cf066aceSPatrick Venture const std::string& mode); 74cf066aceSPatrick Venture 75cf066aceSPatrick Venture SystemdWithStatusFile(sdbusplus::bus::bus&& bus, const std::string& path, 76cf066aceSPatrick Venture const std::string& service, const std::string& mode) : 77*b22ebbf3SWilliam A. Kennington III SystemdNoFile(std::move(bus), service, mode), 78*b22ebbf3SWilliam A. Kennington III checkPath(path) 79cf066aceSPatrick Venture { 80cf066aceSPatrick Venture } 81cf066aceSPatrick Venture 82cf066aceSPatrick Venture ActionStatus status() override; 83cf066aceSPatrick Venture 84cf066aceSPatrick Venture private: 85cf066aceSPatrick Venture const std::string checkPath; 86e0216d23SPatrick Venture }; 87e0216d23SPatrick Venture 88cf066aceSPatrick Venture } // namespace ipmi_flash 89