176833cb5SWludzik, Jozef #include "trigger_manager.hpp" 276833cb5SWludzik, Jozef 376833cb5SWludzik, Jozef TriggerManager::TriggerManager( 476833cb5SWludzik, Jozef std::unique_ptr<interfaces::TriggerFactory> triggerFactoryIn, 576833cb5SWludzik, Jozef const std::shared_ptr<sdbusplus::asio::object_server>& objServer) : 676833cb5SWludzik, Jozef triggerFactory(std::move(triggerFactoryIn)) 776833cb5SWludzik, Jozef { 876833cb5SWludzik, Jozef managerIface = objServer->add_unique_interface( 976833cb5SWludzik, Jozef triggerManagerPath, triggerManagerIfaceName, [this](auto& iface) { 1076833cb5SWludzik, Jozef iface.register_method( 1176833cb5SWludzik, Jozef "AddTrigger", 1276833cb5SWludzik, Jozef [this]( 13*1477fe6aSWludzik, Jozef boost::asio::yield_context& yield, const std::string& name, 14*1477fe6aSWludzik, Jozef bool isDiscrete, bool logToJournal, bool logToRedfish, 15*1477fe6aSWludzik, Jozef bool updateReport, 1676833cb5SWludzik, Jozef const std::vector<std::pair<sdbusplus::message::object_path, 1776833cb5SWludzik, Jozef std::string>>& sensors, 1876833cb5SWludzik, Jozef const std::vector<std::string>& reportNames, 1976833cb5SWludzik, Jozef const TriggerThresholdParams& thresholds) { 20*1477fe6aSWludzik, Jozef if (isDiscrete) 21*1477fe6aSWludzik, Jozef { 22*1477fe6aSWludzik, Jozef throw sdbusplus::exception::SdBusError( 23*1477fe6aSWludzik, Jozef static_cast<int>(std::errc::not_supported), 24*1477fe6aSWludzik, Jozef "Only numeric threshold is supported"); 25*1477fe6aSWludzik, Jozef } 26*1477fe6aSWludzik, Jozef 2776833cb5SWludzik, Jozef if (triggers.size() >= maxTriggers) 2876833cb5SWludzik, Jozef { 2976833cb5SWludzik, Jozef throw sdbusplus::exception::SdBusError( 3076833cb5SWludzik, Jozef static_cast<int>(std::errc::too_many_files_open), 3176833cb5SWludzik, Jozef "Reached maximal trigger count"); 3276833cb5SWludzik, Jozef } 3376833cb5SWludzik, Jozef 3476833cb5SWludzik, Jozef for (const auto& trigger : triggers) 3576833cb5SWludzik, Jozef { 3676833cb5SWludzik, Jozef if (trigger->getName() == name) 3776833cb5SWludzik, Jozef { 3876833cb5SWludzik, Jozef throw sdbusplus::exception::SdBusError( 3976833cb5SWludzik, Jozef static_cast<int>(std::errc::file_exists), 4076833cb5SWludzik, Jozef "Duplicate trigger"); 4176833cb5SWludzik, Jozef } 4276833cb5SWludzik, Jozef } 4376833cb5SWludzik, Jozef 4476833cb5SWludzik, Jozef triggers.emplace_back(triggerFactory->make( 45*1477fe6aSWludzik, Jozef yield, name, isDiscrete, logToJournal, logToRedfish, 4676833cb5SWludzik, Jozef updateReport, sensors, reportNames, thresholds, *this)); 4776833cb5SWludzik, Jozef return triggers.back()->getPath(); 4876833cb5SWludzik, Jozef }); 4976833cb5SWludzik, Jozef }); 5076833cb5SWludzik, Jozef } 5176833cb5SWludzik, Jozef 5276833cb5SWludzik, Jozef void TriggerManager::removeTrigger(const interfaces::Trigger* trigger) 5376833cb5SWludzik, Jozef { 5476833cb5SWludzik, Jozef triggers.erase( 5576833cb5SWludzik, Jozef std::remove_if(triggers.begin(), triggers.end(), 5676833cb5SWludzik, Jozef [trigger](const auto& x) { return trigger == x.get(); }), 5776833cb5SWludzik, Jozef triggers.end()); 5876833cb5SWludzik, Jozef } 59