1 #pragma once 2 3 #include "interfaces/report_manager.hpp" 4 #include "interfaces/trigger_factory.hpp" 5 #include "interfaces/trigger_manager.hpp" 6 #include "trigger.hpp" 7 #include "utils/dbus_path_utils.hpp" 8 9 #include <sdbusplus/asio/object_server.hpp> 10 11 #include <memory> 12 #include <vector> 13 14 class TriggerManager : public interfaces::TriggerManager 15 { 16 public: 17 TriggerManager( 18 std::unique_ptr<interfaces::TriggerFactory> triggerFactory, 19 std::unique_ptr<interfaces::JsonStorage> triggerStorage, 20 const std::shared_ptr<sdbusplus::asio::object_server>& objServer); 21 22 ~TriggerManager() = default; 23 TriggerManager(const TriggerManager&) = delete; 24 TriggerManager(TriggerManager&&) = delete; 25 TriggerManager& operator=(const TriggerManager&) = delete; 26 TriggerManager& operator=(TriggerManager&&) = delete; 27 28 void removeTrigger(const interfaces::Trigger* trigger) override; 29 30 static void verifyReportIds(const std::vector<std::string>& newReportIds); 31 static void verifyThresholdParams( 32 const LabeledTriggerThresholdParams& thresholdParams); 33 34 private: 35 std::unique_ptr<interfaces::TriggerFactory> triggerFactory; 36 std::unique_ptr<interfaces::JsonStorage> triggerStorage; 37 std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface; 38 std::vector<std::unique_ptr<interfaces::Trigger>> triggers; 39 40 void verifyAddTrigger( 41 const std::vector<std::string>& reportIds, 42 const LabeledTriggerThresholdParams& thresholdParams) const; 43 44 interfaces::Trigger& addTrigger( 45 const std::string& triggerId, const std::string& triggerName, 46 const std::vector<std::string>& triggerActions, 47 const std::vector<LabeledSensorInfo>& labeledSensors, 48 const std::vector<std::string>& reportIds, 49 const LabeledTriggerThresholdParams& labeledThresholdParams); 50 void loadFromPersistent(); 51 52 public: 53 static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS}; 54 static constexpr const char* triggerManagerIfaceName = 55 "xyz.openbmc_project.Telemetry.TriggerManager"; 56 static constexpr const char* triggerManagerPath = 57 "/xyz/openbmc_project/Telemetry/Triggers"; 58 static constexpr std::string_view triggerNameDefault = "Trigger"; 59 60 static_assert(!triggerNameDefault.empty(), 61 "Default trigger name cannot be empty."); 62 }; 63