summaryrefslogtreecommitdiffstats
path: root/src/monitor.cpp
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-04-12 13:48:29 -0500
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2017-05-15 16:58:09 -0400
commit240bf332d20c31be5abe066945012542d94f5333 (patch)
tree64d28e1df3c88b9e170214674a000807126bb509 /src/monitor.cpp
parente6af23313890b82c4fca4d61ec1d2d9ff4817870 (diff)
downloadphosphor-dbus-monitor-240bf332d20c31be5abe066945012542d94f5333.tar.gz
phosphor-dbus-monitor-240bf332d20c31be5abe066945012542d94f5333.zip
Add support for processing signal event triggers
Process signal event triggers' list of conditions on a group and perform the defined actions. This re-uses the following struct directly from phosphor-inventory-manager: --struct PropertyChangedCondition Change-Id: I98552f3d168cfcd9f0c1c357289b7000374ae60e Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'src/monitor.cpp')
-rw-r--r--src/monitor.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/monitor.cpp b/src/monitor.cpp
index 2864924..aeb1fe5 100644
--- a/src/monitor.cpp
+++ b/src/monitor.cpp
@@ -16,7 +16,26 @@ const std::vector<std::tuple<std::vector<std::shared_ptr<Event>>,
Monitor::Monitor(sdbusplus::bus::bus& bus) :
bus(bus)
{
+ // Process thru given events that are type 'signal'
+ for (auto& event : events)
+ {
+ for (auto& pEvent : std::get<std::vector<std::shared_ptr<Event>>>(event))
+ {
+ if (pEvent->trigger != Event::Trigger::SIGNAL)
+ {
+ continue;
+ }
+ auto signalEvent = static_cast<SignalEvent*>(pEvent.get());
+ eventArgs.emplace_back(std::make_unique<eventArg>(this,
+ signalEvent,
+ &event));
+ matches.emplace_back(bus,
+ signalEvent->signature,
+ handleSignal,
+ eventArgs.back().get());
+ }
+ }
}
void Monitor::processStart() noexcept
@@ -36,6 +55,19 @@ void Monitor::processStart() noexcept
}
}
+int Monitor::handleSignal(sd_bus_message* msg,
+ void* data,
+ sd_bus_error* err)
+{
+ auto sdbpMsg = sdbusplus::message::message(msg);
+ auto& eventArg = *static_cast<Monitor::eventArg*>(data);
+ std::get<0>(eventArg)->handleEvent(
+ sdbpMsg,
+ static_cast<const SignalEvent&>(*std::get<1>(eventArg)),
+ *std::get<2>(eventArg));
+ return 0;
+}
+
void Monitor::handleEvent(sdbusplus::message::message& msg,
const Event& event,
const std::tuple<std::vector<std::shared_ptr<Event>>,
OpenPOWER on IntegriCloud