| #pragma once |
| |
| #include <sdbusplus/bus.hpp> |
| |
| namespace phosphor |
| { |
| namespace unit |
| { |
| namespace failure |
| { |
| |
| /** |
| * @class Monitor |
| * |
| * This class will analyze a unit to see if it is in the failed |
| * state. If it is, it will either start or stop a target unit. |
| * |
| * The use case is for running from the OnFailure directive in a |
| * unit file. If that unit keeps failing and restarting, it will |
| * eventually exceed its rate limits and stop being restarted. |
| * This application will allow another unit to be started when that |
| * occurs. |
| */ |
| class Monitor |
| { |
| public: |
| /** |
| * The valid actions - either starting or stopping a unit |
| */ |
| enum class Action |
| { |
| start, |
| stop |
| }; |
| |
| Monitor() = delete; |
| Monitor(const Monitor&) = delete; |
| Monitor(Monitor&&) = default; |
| Monitor& operator=(const Monitor&) = delete; |
| Monitor& operator=(Monitor&&) = delete; |
| ~Monitor() = default; |
| |
| /** |
| * Constructor |
| * |
| * @param[in] sourceUnit - the source unit |
| * @param[in] targetUnit - the target unit |
| * @param[in] action - the action to run on the target |
| */ |
| Monitor(const std::string& sourceUnit, const std::string& targetUnit, |
| Action action) : |
| bus(sdbusplus::bus::new_default()), |
| source(sourceUnit), target(targetUnit), action(action) |
| {} |
| |
| /** |
| * Analyzes the source unit to check if it is in a failed state. |
| * If it is, then it runs the action on the target unit. |
| */ |
| void analyze(); |
| |
| private: |
| /** |
| * Returns the dbus object path of the source unit |
| */ |
| std::string getSourceUnitPath(); |
| |
| /** |
| * Says if the unit object passed in has an |
| * ActiveState property equal to 'failed'. |
| * |
| * @param[in] path - the unit object path to check |
| * |
| * @return - true if this unit is in the failed state |
| */ |
| bool inFailedState(const std::string& path); |
| |
| /** |
| * Runs the action on the target unit. |
| */ |
| void runTargetAction(); |
| |
| /** |
| * The dbus object |
| */ |
| sdbusplus::bus_t bus; |
| |
| /** |
| * The source unit |
| */ |
| const std::string source; |
| |
| /** |
| * The target unit |
| */ |
| const std::string target; |
| |
| /** |
| * The action to run on the target if the source |
| * unit is in failed state. |
| */ |
| const Action action; |
| }; |
| } // namespace failure |
| } // namespace unit |
| } // namespace phosphor |