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> 7*9b37b095SPatrick Venture 8*9b37b095SPatrick 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> 18b22ebbf3SWilliam A. Kennington III CreateSystemdNoFile(sdbusplus::bus::bus&& bus, 19b22ebbf3SWilliam A. Kennington III const std::string& service, 20b22ebbf3SWilliam A. Kennington III const std::string& mode); 21b22ebbf3SWilliam A. Kennington III 22b22ebbf3SWilliam A. Kennington III SystemdNoFile(sdbusplus::bus::bus&& bus, const std::string& service, 23b22ebbf3SWilliam A. Kennington III const std::string& mode) : 24b22ebbf3SWilliam A. Kennington III bus(std::move(bus)), 25b22ebbf3SWilliam A. Kennington III triggerService(service), mode(mode) 26*9b37b095SPatrick Venture {} 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) 79*9b37b095SPatrick Venture {} 80cf066aceSPatrick Venture 8193f3c550SWilliam A. Kennington III bool trigger() override; 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