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