trigger.cpp (94f71c5190b64bb47aa34cdce4eb4cca71d36faa) | trigger.cpp (b4ef22e4d365bde35a7fce7950033c9271c68ce7) |
---|---|
1#include "trigger.hpp" 2 3#include "trigger_manager.hpp" 4#include "types/report_types.hpp" 5#include "types/trigger_types.hpp" 6#include "utils/conversion_trigger.hpp" 7#include "utils/transform.hpp" 8 9#include <phosphor-logging/log.hpp> 10 11Trigger::Trigger( 12 boost::asio::io_context& ioc, 13 const std::shared_ptr<sdbusplus::asio::object_server>& objServer, 14 const std::string& idIn, const std::string& nameIn, 15 const std::vector<TriggerAction>& triggerActionsIn, 16 const std::shared_ptr<std::vector<std::string>> reportIdsIn, 17 std::vector<std::shared_ptr<interfaces::Threshold>>&& thresholdsIn, 18 interfaces::TriggerManager& triggerManager, 19 interfaces::JsonStorage& triggerStorageIn, | 1#include "trigger.hpp" 2 3#include "trigger_manager.hpp" 4#include "types/report_types.hpp" 5#include "types/trigger_types.hpp" 6#include "utils/conversion_trigger.hpp" 7#include "utils/transform.hpp" 8 9#include <phosphor-logging/log.hpp> 10 11Trigger::Trigger( 12 boost::asio::io_context& ioc, 13 const std::shared_ptr<sdbusplus::asio::object_server>& objServer, 14 const std::string& idIn, const std::string& nameIn, 15 const std::vector<TriggerAction>& triggerActionsIn, 16 const std::shared_ptr<std::vector<std::string>> reportIdsIn, 17 std::vector<std::shared_ptr<interfaces::Threshold>>&& thresholdsIn, 18 interfaces::TriggerManager& triggerManager, 19 interfaces::JsonStorage& triggerStorageIn, |
20 const interfaces::TriggerFactory& triggerFactory, Sensors sensorsIn) : | 20 const interfaces::TriggerFactory& triggerFactory, Sensors sensorsIn, 21 interfaces::ReportManager& reportManagerIn) : |
21 id(idIn), 22 name(nameIn), triggerActions(std::move(triggerActionsIn)), 23 path(triggerDir + id), reportIds(std::move(reportIdsIn)), 24 thresholds(std::move(thresholdsIn)), 25 fileName(std::to_string(std::hash<std::string>{}(id))), | 22 id(idIn), 23 name(nameIn), triggerActions(std::move(triggerActionsIn)), 24 path(triggerDir + id), reportIds(std::move(reportIdsIn)), 25 thresholds(std::move(thresholdsIn)), 26 fileName(std::to_string(std::hash<std::string>{}(id))), |
26 triggerStorage(triggerStorageIn), sensors(std::move(sensorsIn)) | 27 triggerStorage(triggerStorageIn), sensors(std::move(sensorsIn)), 28 reportManager(reportManagerIn) |
27{ 28 deleteIface = objServer->add_unique_interface( 29 path, deleteIfaceName, [this, &ioc, &triggerManager](auto& dbusIface) { 30 dbusIface.register_method("Delete", [this, &ioc, &triggerManager] { 31 if (persistent) 32 { 33 triggerStorage.remove(fileName); 34 } | 29{ 30 deleteIface = objServer->add_unique_interface( 31 path, deleteIfaceName, [this, &ioc, &triggerManager](auto& dbusIface) { 32 dbusIface.register_method("Delete", [this, &ioc, &triggerManager] { 33 if (persistent) 34 { 35 triggerStorage.remove(fileName); 36 } |
37 for (const auto& reportId : *reportIds) 38 { 39 reportManager.updateTriggerIds(reportId, id, 40 TriggerIdUpdate::Remove); 41 } |
|
35 boost::asio::post(ioc, [this, &triggerManager] { 36 triggerManager.removeTrigger(this); 37 }); 38 }); 39 }); 40 41 triggerIface = objServer->add_unique_interface( 42 path, triggerIfaceName, [this, &triggerFactory](auto& dbusIface) { --- 58 unchanged lines hidden (view full) --- 101 return sensor->getLabeledSensorInfo(); 102 })); 103 }); 104 105 dbusIface.register_property_rw( 106 "ReportNames", std::vector<std::string>{}, 107 sdbusplus::vtable::property_::emits_change, 108 [this](auto newVal, auto& oldVal) { | 42 boost::asio::post(ioc, [this, &triggerManager] { 43 triggerManager.removeTrigger(this); 44 }); 45 }); 46 }); 47 48 triggerIface = objServer->add_unique_interface( 49 path, triggerIfaceName, [this, &triggerFactory](auto& dbusIface) { --- 58 unchanged lines hidden (view full) --- 108 return sensor->getLabeledSensorInfo(); 109 })); 110 }); 111 112 dbusIface.register_property_rw( 113 "ReportNames", std::vector<std::string>{}, 114 sdbusplus::vtable::property_::emits_change, 115 [this](auto newVal, auto& oldVal) { |
116 TriggerManager::verifyReportIds(newVal); 117 updateTriggerIdsInReports(newVal); |
|
109 reportIds->clear(); 110 std::copy(newVal.begin(), newVal.end(), 111 std::back_inserter(*reportIds)); 112 oldVal = std::move(newVal); 113 return 1; 114 }, 115 [this](const auto&) { return *reportIds; }); 116 --- 23 unchanged lines hidden (view full) --- 140 }); 141 }); 142 }); 143 144 for (const auto& threshold : thresholds) 145 { 146 threshold->initialize(); 147 } | 118 reportIds->clear(); 119 std::copy(newVal.begin(), newVal.end(), 120 std::back_inserter(*reportIds)); 121 oldVal = std::move(newVal); 122 return 1; 123 }, 124 [this](const auto&) { return *reportIds; }); 125 --- 23 unchanged lines hidden (view full) --- 149 }); 150 }); 151 }); 152 153 for (const auto& threshold : thresholds) 154 { 155 threshold->initialize(); 156 } |
157 158 for (const auto& reportId : *reportIds) 159 { 160 reportManager.updateTriggerIds(reportId, id, TriggerIdUpdate::Add); 161 } |
|
148} 149 150bool Trigger::storeConfiguration() const 151{ 152 try 153 { 154 nlohmann::json data; 155 --- 25 unchanged lines hidden (view full) --- 181 { 182 phosphor::logging::log<phosphor::logging::level::ERR>( 183 "Failed to store a trigger in storage", 184 phosphor::logging::entry("EXCEPTION_MSG=%s", e.what())); 185 return false; 186 } 187 return true; 188} | 162} 163 164bool Trigger::storeConfiguration() const 165{ 166 try 167 { 168 nlohmann::json data; 169 --- 25 unchanged lines hidden (view full) --- 195 { 196 phosphor::logging::log<phosphor::logging::level::ERR>( 197 "Failed to store a trigger in storage", 198 phosphor::logging::entry("EXCEPTION_MSG=%s", e.what())); 199 return false; 200 } 201 return true; 202} |
203 204void Trigger::updateTriggerIdsInReports( 205 const std::vector<std::string>& newReportIds) 206{ 207 std::vector<std::string> toBeRemoved, toBeAdded; 208 size_t maxSize = std::max(reportIds->size(), newReportIds.size()); 209 toBeRemoved.reserve(maxSize); 210 toBeAdded.reserve(maxSize); 211 std::set_difference(reportIds->begin(), reportIds->end(), 212 newReportIds.begin(), newReportIds.end(), 213 std::back_inserter(toBeRemoved)); 214 std::set_difference(newReportIds.begin(), newReportIds.end(), 215 reportIds->begin(), reportIds->end(), 216 std::back_inserter(toBeAdded)); 217 for (auto& reportId : toBeRemoved) 218 { 219 reportManager.updateTriggerIds(reportId, id, TriggerIdUpdate::Remove); 220 } 221 for (auto& reportId : toBeAdded) 222 { 223 reportManager.updateTriggerIds(reportId, id, TriggerIdUpdate::Add); 224 } 225} |
|