1cf066aceSPatrick Venture #pragma once 2cf066aceSPatrick Venture 3cf066aceSPatrick Venture #include "status.hpp" 4cf066aceSPatrick Venture 5cf066aceSPatrick Venture #include <memory> 6cf066aceSPatrick Venture #include <sdbusplus/bus.hpp> 7b22ebbf3SWilliam A. Kennington III #include <sdbusplus/bus/match.hpp> 8cf066aceSPatrick Venture #include <string> 9cf066aceSPatrick Venture 10cf066aceSPatrick Venture namespace ipmi_flash 11cf066aceSPatrick Venture { 12cf066aceSPatrick Venture 13b22ebbf3SWilliam A. Kennington III class SystemdNoFile : public TriggerableActionInterface 14b22ebbf3SWilliam A. Kennington III { 15b22ebbf3SWilliam A. Kennington III public: 16b22ebbf3SWilliam A. Kennington III static std::unique_ptr<TriggerableActionInterface> 17b22ebbf3SWilliam A. Kennington III CreateSystemdNoFile(sdbusplus::bus::bus&& bus, 18b22ebbf3SWilliam A. Kennington III const std::string& service, 19b22ebbf3SWilliam A. Kennington III const std::string& mode); 20b22ebbf3SWilliam A. Kennington III 21b22ebbf3SWilliam A. Kennington III SystemdNoFile(sdbusplus::bus::bus&& 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) 25b22ebbf3SWilliam A. Kennington III { 26b22ebbf3SWilliam A. Kennington III } 27b22ebbf3SWilliam A. Kennington III 28b22ebbf3SWilliam A. Kennington III SystemdNoFile(const SystemdNoFile&) = delete; 29b22ebbf3SWilliam A. Kennington III SystemdNoFile& operator=(const SystemdNoFile&) = delete; 30b22ebbf3SWilliam A. Kennington III // sdbusplus match requires us to be pinned 31b22ebbf3SWilliam A. Kennington III SystemdNoFile(SystemdNoFile&&) = delete; 32b22ebbf3SWilliam A. Kennington III SystemdNoFile& operator=(SystemdNoFile&&) = delete; 33b22ebbf3SWilliam A. Kennington III 34b22ebbf3SWilliam A. Kennington III bool trigger() override; 35b22ebbf3SWilliam A. Kennington III void abort() override; 36b22ebbf3SWilliam A. Kennington III ActionStatus status() override; 37b22ebbf3SWilliam A. Kennington III 38b22ebbf3SWilliam A. Kennington III const std::string& getMode() const; 39b22ebbf3SWilliam A. Kennington III 40b22ebbf3SWilliam A. Kennington III private: 41b22ebbf3SWilliam A. Kennington III sdbusplus::bus::bus bus; 42b22ebbf3SWilliam A. Kennington III const std::string triggerService; 43b22ebbf3SWilliam A. Kennington III const std::string mode; 44b22ebbf3SWilliam A. Kennington III 45b22ebbf3SWilliam A. Kennington III std::optional<sdbusplus::bus::match::match> jobMonitor; 46b22ebbf3SWilliam A. Kennington III std::optional<std::string> job; 47b22ebbf3SWilliam A. Kennington III ActionStatus currentStatus = ActionStatus::unknown; 48b22ebbf3SWilliam A. Kennington III 49b22ebbf3SWilliam A. Kennington III void match(sdbusplus::message::message& m); 50b22ebbf3SWilliam A. Kennington III }; 51b22ebbf3SWilliam 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 */ 56b22ebbf3SWilliam 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) : 77b22ebbf3SWilliam A. Kennington III SystemdNoFile(std::move(bus), service, mode), 78b22ebbf3SWilliam A. Kennington III checkPath(path) 79cf066aceSPatrick Venture { 80cf066aceSPatrick Venture } 81cf066aceSPatrick Venture 82*93f3c550SWilliam A. Kennington III bool trigger() override; 83cf066aceSPatrick Venture ActionStatus status() override; 84cf066aceSPatrick Venture 85cf066aceSPatrick Venture private: 86cf066aceSPatrick Venture const std::string checkPath; 87e0216d23SPatrick Venture }; 88e0216d23SPatrick Venture 89cf066aceSPatrick Venture } // namespace ipmi_flash 90