1 #pragma once 2 3 #include "interfaces/json_storage.hpp" 4 #include "interfaces/threshold.hpp" 5 #include "interfaces/trigger.hpp" 6 #include "interfaces/trigger_factory.hpp" 7 #include "interfaces/trigger_manager.hpp" 8 #include "types/trigger_types.hpp" 9 #include "utils/messanger.hpp" 10 11 #include <boost/asio/io_context.hpp> 12 #include <sdbusplus/asio/object_server.hpp> 13 #include <sdbusplus/message.hpp> 14 15 #include <memory> 16 17 class Trigger : public interfaces::Trigger 18 { 19 public: 20 Trigger(boost::asio::io_context& ioc, 21 const std::shared_ptr<sdbusplus::asio::object_server>& objServer, 22 TriggerId&& id, const std::string& name, 23 const std::vector<TriggerAction>& triggerActions, 24 const std::shared_ptr<std::vector<std::string>> reportIds, 25 std::vector<std::shared_ptr<interfaces::Threshold>>&& thresholds, 26 interfaces::TriggerManager& triggerManager, 27 interfaces::JsonStorage& triggerStorage, 28 const interfaces::TriggerFactory& triggerFactory, 29 Sensors sensorsIn); 30 31 ~Trigger() = default; 32 Trigger(const Trigger&) = delete; 33 Trigger(Trigger&&) = delete; 34 Trigger& operator=(const Trigger&) = delete; 35 Trigger& operator=(Trigger&&) = delete; 36 getId() const37 std::string getId() const override 38 { 39 return *id; 40 } 41 getPath() const42 std::string getPath() const override 43 { 44 return path.str; 45 } 46 47 bool storeConfiguration() const; 48 49 private: 50 std::vector<LabeledSensorInfo> getLabeledSensorInfo() const; 51 std::vector<LabeledThresholdParam> getLabeledThresholds() const; 52 bool isDiscrete() const; 53 54 const TriggerId id; 55 const sdbusplus::message::object_path path; 56 std::string name; 57 std::vector<TriggerAction> triggerActions; 58 bool persistent = false; 59 std::shared_ptr<std::vector<std::string>> reportIds; 60 std::unique_ptr<sdbusplus::asio::dbus_interface> deleteIface; 61 std::unique_ptr<sdbusplus::asio::dbus_interface> triggerIface; 62 std::vector<std::shared_ptr<interfaces::Threshold>> thresholds; 63 64 interfaces::JsonStorage::FilePath fileName; 65 interfaces::JsonStorage& triggerStorage; 66 Sensors sensors; 67 utils::Messanger messanger; 68 69 public: 70 static constexpr const char* triggerIfaceName = 71 "xyz.openbmc_project.Telemetry.Trigger"; 72 static constexpr const char* deleteIfaceName = 73 "xyz.openbmc_project.Object.Delete"; 74 static constexpr size_t triggerVersion = 2; 75 }; 76