summaryrefslogtreecommitdiffstats
path: root/src/functor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/functor.cpp')
-rw-r--r--src/functor.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/functor.cpp b/src/functor.cpp
new file mode 100644
index 0000000..f4d2574
--- /dev/null
+++ b/src/functor.cpp
@@ -0,0 +1,63 @@
+#include "functor.hpp"
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/message.hpp>
+
+namespace phosphor
+{
+namespace dbus
+{
+namespace monitoring
+{
+
+bool PropertyConditionBase::operator()(sdbusplus::bus::bus& bus,
+ sdbusplus::message::message&,
+ Monitor& mon) const
+{
+ std::string host;
+
+ if (_service)
+ {
+ host.assign(_service);
+ }
+ else
+ {
+ auto mapperCall = bus.new_method_call(
+ "xyz.openbmc_project.ObjectMapper",
+ "/xyz/openbmc_project/object_mapper",
+ "xyz.openbmc_project.ObjectMapper",
+ "GetObject");
+ mapperCall.append(_path);
+ mapperCall.append(std::vector<std::string>({_iface}));
+ auto mapperResponseMsg = bus.call(mapperCall);
+ if (mapperResponseMsg.is_method_error())
+ {
+ return false;
+ }
+
+ std::map<std::string, std::vector<std::string>> mapperResponse;
+ mapperResponseMsg.read(mapperResponse);
+ if (mapperResponse.empty())
+ {
+ return false;
+ }
+
+ host = mapperResponse.begin()->first;
+ }
+ auto hostCall = bus.new_method_call(host.c_str(),
+ _path.c_str(),
+ "org.freedesktop.DBus.Properties",
+ "Get");
+ hostCall.append(_iface);
+ hostCall.append(_property);
+ auto hostResponseMsg = bus.call(hostCall);
+ if (hostResponseMsg.is_method_error())
+ {
+ return false;
+ }
+
+ return eval(hostResponseMsg);
+}
+
+} // namespace monitoring
+} // namespace dbus
+} // namespace phosphor
OpenPOWER on IntegriCloud