1 #include "trigger_manager.hpp" 2 3 TriggerManager::TriggerManager( 4 std::unique_ptr<interfaces::TriggerFactory> triggerFactoryIn, 5 std::unique_ptr<interfaces::JsonStorage> triggerStorageIn, 6 const std::shared_ptr<sdbusplus::asio::object_server>& objServer) : 7 triggerFactory(std::move(triggerFactoryIn)), 8 triggerStorage(std::move(triggerStorageIn)) 9 { 10 managerIface = objServer->add_unique_interface( 11 triggerManagerPath, triggerManagerIfaceName, [this](auto& iface) { 12 iface.register_method( 13 "AddTrigger", 14 [this]( 15 boost::asio::yield_context& yield, const std::string& name, 16 bool isDiscrete, bool logToJournal, bool logToRedfish, 17 bool updateReport, 18 const std::vector<std::pair<sdbusplus::message::object_path, 19 std::string>>& sensors, 20 const std::vector<std::string>& reportNames, 21 const TriggerThresholdParams& thresholds) { 22 if (triggers.size() >= maxTriggers) 23 { 24 throw sdbusplus::exception::SdBusError( 25 static_cast<int>(std::errc::too_many_files_open), 26 "Reached maximal trigger count"); 27 } 28 29 for (const auto& trigger : triggers) 30 { 31 if (trigger->getName() == name) 32 { 33 throw sdbusplus::exception::SdBusError( 34 static_cast<int>(std::errc::file_exists), 35 "Duplicate trigger"); 36 } 37 } 38 39 triggers.emplace_back(triggerFactory->make( 40 yield, name, isDiscrete, logToJournal, logToRedfish, 41 updateReport, sensors, reportNames, thresholds, *this, 42 *triggerStorage)); 43 return triggers.back()->getPath(); 44 }); 45 }); 46 } 47 48 void TriggerManager::removeTrigger(const interfaces::Trigger* trigger) 49 { 50 triggers.erase( 51 std::remove_if(triggers.begin(), triggers.end(), 52 [trigger](const auto& x) { return trigger == x.get(); }), 53 triggers.end()); 54 } 55