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 8 #include <sdbusplus/asio/object_server.hpp> 9 10 #include <memory> 11 #include <vector> 12 13 class TriggerManager : public interfaces::TriggerManager 14 { 15 public: 16 TriggerManager( 17 std::unique_ptr<interfaces::TriggerFactory> triggerFactory, 18 std::unique_ptr<interfaces::JsonStorage> triggerStorage, 19 const std::shared_ptr<sdbusplus::asio::object_server>& objServer); 20 21 TriggerManager(const TriggerManager&) = delete; 22 TriggerManager(TriggerManager&&) = delete; 23 TriggerManager& operator=(const TriggerManager&) = delete; 24 TriggerManager& operator=(TriggerManager&&) = delete; 25 26 void removeTrigger(const interfaces::Trigger* trigger) override; 27 28 static void verifyReportIds(const std::vector<std::string>& newReportIds); 29 30 std::vector<std::string> 31 getTriggerIdsForReport(const std::string& reportId) const override; 32 33 private: 34 std::unique_ptr<interfaces::TriggerFactory> triggerFactory; 35 std::unique_ptr<interfaces::JsonStorage> triggerStorage; 36 std::unique_ptr<sdbusplus::asio::dbus_interface> managerIface; 37 std::vector<std::unique_ptr<interfaces::Trigger>> triggers; 38 39 void verifyAddTrigger(const std::string& triggerId, 40 const std::string& triggerName, 41 const std::vector<std::string>& newReportIds) const; 42 43 interfaces::Trigger& 44 addTrigger(const std::string& triggerId, const std::string& triggerName, 45 const std::vector<std::string>& triggerActions, 46 const std::vector<LabeledSensorInfo>& labeledSensors, 47 const std::vector<std::string>& reportIds, 48 const LabeledTriggerThresholdParams& labeledThresholdParams); 49 void loadFromPersistent(); 50 51 public: 52 static constexpr size_t maxTriggers{TELEMETRY_MAX_TRIGGERS}; 53 static constexpr size_t maxTriggerIdLength{ 54 TELEMETRY_MAX_DBUS_PATH_LENGTH - 55 std::string_view(Trigger::triggerDir).length()}; 56 static constexpr const char* triggerManagerIfaceName = 57 "xyz.openbmc_project.Telemetry.TriggerManager"; 58 static constexpr const char* triggerManagerPath = 59 "/xyz/openbmc_project/Telemetry/Triggers"; 60 static constexpr const char* triggerNameDefault = "Trigger"; 61 }; 62