Added openpower util file support
Created common file to keep all the common util functions.
In this commit
- added getService function to get d-bus service for given
interface.
- updated create_pel.cpp to start using common util interface.
- Moved formatting library to common build dependency for
both meson and automake.
Tested: Manually verified.
Signed-off-by: Jayanth Othayoth <ojayanth@in.ibm.com>
Change-Id: I39a642710c0476e81fae020eb3b4216ca8ce9ad5
diff --git a/util.cpp b/util.cpp
new file mode 100644
index 0000000..646529a
--- /dev/null
+++ b/util.cpp
@@ -0,0 +1,47 @@
+#include "util.hpp"
+
+#include <fmt/format.h>
+
+#include <phosphor-logging/elog.hpp>
+
+#include <vector>
+
+namespace openpower
+{
+namespace util
+{
+using namespace phosphor::logging;
+
+std::string getService(sdbusplus::bus::bus& bus, const std::string& objectPath,
+ const std::string& interface)
+{
+ constexpr auto mapperBusBame = "xyz.openbmc_project.ObjectMapper";
+ constexpr auto mapperObjectPath = "/xyz/openbmc_project/object_mapper";
+ constexpr auto mapperInterface = "xyz.openbmc_project.ObjectMapper";
+ std::vector<std::pair<std::string, std::vector<std::string>>> response;
+ auto method = bus.new_method_call(mapperBusBame, mapperObjectPath,
+ mapperInterface, "GetObject");
+ method.append(objectPath, std::vector<std::string>({interface}));
+ try
+ {
+ auto reply = bus.call(method);
+ reply.read(response);
+ }
+ catch (const sdbusplus::exception::SdBusError& e)
+ {
+ log<level::ERR>(fmt::format("D-Bus call exception OBJPATH={}"
+ "INTERFACE={} EXCEPTION={}",
+ mapperObjectPath, mapperInterface, e.what())
+ .c_str());
+
+ throw std::runtime_error("Service name is not found");
+ }
+
+ if (response.empty())
+ {
+ throw std::runtime_error("Service name response is empty");
+ }
+ return response.begin()->first;
+}
+} // namespace util
+} // namespace openpower