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