blob: 646529ae9a51bc7016fcf9a6861d11c1d14ec50d [file] [log] [blame]
Jayanth Othayothc4831812021-06-08 01:33:40 -05001#include "util.hpp"
2
3#include <fmt/format.h>
4
5#include <phosphor-logging/elog.hpp>
6
7#include <vector>
8
9namespace openpower
10{
11namespace util
12{
13using namespace phosphor::logging;
14
15std::string getService(sdbusplus::bus::bus& bus, const std::string& objectPath,
16 const std::string& interface)
17{
18 constexpr auto mapperBusBame = "xyz.openbmc_project.ObjectMapper";
19 constexpr auto mapperObjectPath = "/xyz/openbmc_project/object_mapper";
20 constexpr auto mapperInterface = "xyz.openbmc_project.ObjectMapper";
21 std::vector<std::pair<std::string, std::vector<std::string>>> response;
22 auto method = bus.new_method_call(mapperBusBame, mapperObjectPath,
23 mapperInterface, "GetObject");
24 method.append(objectPath, std::vector<std::string>({interface}));
25 try
26 {
27 auto reply = bus.call(method);
28 reply.read(response);
29 }
30 catch (const sdbusplus::exception::SdBusError& e)
31 {
32 log<level::ERR>(fmt::format("D-Bus call exception OBJPATH={}"
33 "INTERFACE={} EXCEPTION={}",
34 mapperObjectPath, mapperInterface, e.what())
35 .c_str());
36
37 throw std::runtime_error("Service name is not found");
38 }
39
40 if (response.empty())
41 {
42 throw std::runtime_error("Service name response is empty");
43 }
44 return response.begin()->first;
45}
46} // namespace util
47} // namespace openpower