176833cb5SWludzik, Jozef #include "trigger_manager.hpp" 276833cb5SWludzik, Jozef 376833cb5SWludzik, Jozef TriggerManager::TriggerManager( 476833cb5SWludzik, Jozef std::unique_ptr<interfaces::TriggerFactory> triggerFactoryIn, 5*a4e67616SCezary Zwolak std::unique_ptr<interfaces::JsonStorage> triggerStorageIn, 676833cb5SWludzik, Jozef const std::shared_ptr<sdbusplus::asio::object_server>& objServer) : 7*a4e67616SCezary Zwolak triggerFactory(std::move(triggerFactoryIn)), 8*a4e67616SCezary Zwolak triggerStorage(std::move(triggerStorageIn)) 976833cb5SWludzik, Jozef { 1076833cb5SWludzik, Jozef managerIface = objServer->add_unique_interface( 1176833cb5SWludzik, Jozef triggerManagerPath, triggerManagerIfaceName, [this](auto& iface) { 1276833cb5SWludzik, Jozef iface.register_method( 1376833cb5SWludzik, Jozef "AddTrigger", 1476833cb5SWludzik, Jozef [this]( 151477fe6aSWludzik, Jozef boost::asio::yield_context& yield, const std::string& name, 161477fe6aSWludzik, Jozef bool isDiscrete, bool logToJournal, bool logToRedfish, 171477fe6aSWludzik, Jozef bool updateReport, 1876833cb5SWludzik, Jozef const std::vector<std::pair<sdbusplus::message::object_path, 1976833cb5SWludzik, Jozef std::string>>& sensors, 2076833cb5SWludzik, Jozef const std::vector<std::string>& reportNames, 2176833cb5SWludzik, Jozef const TriggerThresholdParams& thresholds) { 2276833cb5SWludzik, Jozef if (triggers.size() >= maxTriggers) 2376833cb5SWludzik, Jozef { 2476833cb5SWludzik, Jozef throw sdbusplus::exception::SdBusError( 2576833cb5SWludzik, Jozef static_cast<int>(std::errc::too_many_files_open), 2676833cb5SWludzik, Jozef "Reached maximal trigger count"); 2776833cb5SWludzik, Jozef } 2876833cb5SWludzik, Jozef 2976833cb5SWludzik, Jozef for (const auto& trigger : triggers) 3076833cb5SWludzik, Jozef { 3176833cb5SWludzik, Jozef if (trigger->getName() == name) 3276833cb5SWludzik, Jozef { 3376833cb5SWludzik, Jozef throw sdbusplus::exception::SdBusError( 3476833cb5SWludzik, Jozef static_cast<int>(std::errc::file_exists), 3576833cb5SWludzik, Jozef "Duplicate trigger"); 3676833cb5SWludzik, Jozef } 3776833cb5SWludzik, Jozef } 3876833cb5SWludzik, Jozef 3976833cb5SWludzik, Jozef triggers.emplace_back(triggerFactory->make( 401477fe6aSWludzik, Jozef yield, name, isDiscrete, logToJournal, logToRedfish, 41*a4e67616SCezary Zwolak updateReport, sensors, reportNames, thresholds, *this, 42*a4e67616SCezary Zwolak *triggerStorage)); 4376833cb5SWludzik, Jozef return triggers.back()->getPath(); 4476833cb5SWludzik, Jozef }); 4576833cb5SWludzik, Jozef }); 4676833cb5SWludzik, Jozef } 4776833cb5SWludzik, Jozef 4876833cb5SWludzik, Jozef void TriggerManager::removeTrigger(const interfaces::Trigger* trigger) 4976833cb5SWludzik, Jozef { 5076833cb5SWludzik, Jozef triggers.erase( 5176833cb5SWludzik, Jozef std::remove_if(triggers.begin(), triggers.end(), 5276833cb5SWludzik, Jozef [trigger](const auto& x) { return trigger == x.get(); }), 5376833cb5SWludzik, Jozef triggers.end()); 5476833cb5SWludzik, Jozef } 55