xref: /openbmc/telemetry/src/utils/dbus_mapper.hpp (revision 1477fe6a2c2d4e4d49c773fe6b54ae558b06e706)
1*1477fe6aSWludzik, Jozef #pragma once
2*1477fe6aSWludzik, Jozef 
3*1477fe6aSWludzik, Jozef #include <boost/asio/spawn.hpp>
4*1477fe6aSWludzik, Jozef #include <sdbusplus/asio/object_server.hpp>
5*1477fe6aSWludzik, Jozef 
6*1477fe6aSWludzik, Jozef #include <array>
7*1477fe6aSWludzik, Jozef #include <string>
8*1477fe6aSWludzik, Jozef #include <utility>
9*1477fe6aSWludzik, Jozef #include <vector>
10*1477fe6aSWludzik, Jozef 
11*1477fe6aSWludzik, Jozef namespace utils
12*1477fe6aSWludzik, Jozef {
13*1477fe6aSWludzik, Jozef 
14*1477fe6aSWludzik, Jozef using SensorPath = std::string;
15*1477fe6aSWludzik, Jozef using ServiceName = std::string;
16*1477fe6aSWludzik, Jozef using Ifaces = std::vector<std::string>;
17*1477fe6aSWludzik, Jozef using SensorIfaces = std::vector<std::pair<ServiceName, Ifaces>>;
18*1477fe6aSWludzik, Jozef using SensorTree = std::pair<SensorPath, SensorIfaces>;
19*1477fe6aSWludzik, Jozef 
20*1477fe6aSWludzik, Jozef inline std::vector<SensorTree>
21*1477fe6aSWludzik, Jozef     getSubTreeSensors(boost::asio::yield_context& yield,
22*1477fe6aSWludzik, Jozef                       const std::shared_ptr<sdbusplus::asio::connection>& bus)
23*1477fe6aSWludzik, Jozef {
24*1477fe6aSWludzik, Jozef     std::array<const char*, 1> interfaces = {
25*1477fe6aSWludzik, Jozef         "xyz.openbmc_project.Sensor.Value"};
26*1477fe6aSWludzik, Jozef     boost::system::error_code ec;
27*1477fe6aSWludzik, Jozef 
28*1477fe6aSWludzik, Jozef     auto tree = bus->yield_method_call<std::vector<SensorTree>>(
29*1477fe6aSWludzik, Jozef         yield, ec, "xyz.openbmc_project.ObjectMapper",
30*1477fe6aSWludzik, Jozef         "/xyz/openbmc_project/object_mapper",
31*1477fe6aSWludzik, Jozef         "xyz.openbmc_project.ObjectMapper", "GetSubTree",
32*1477fe6aSWludzik, Jozef         "/xyz/openbmc_project/sensors", 2, interfaces);
33*1477fe6aSWludzik, Jozef     if (ec)
34*1477fe6aSWludzik, Jozef     {
35*1477fe6aSWludzik, Jozef         throw std::runtime_error("Failed to query ObjectMapper!");
36*1477fe6aSWludzik, Jozef     }
37*1477fe6aSWludzik, Jozef     return tree;
38*1477fe6aSWludzik, Jozef }
39*1477fe6aSWludzik, Jozef 
40*1477fe6aSWludzik, Jozef } // namespace utils
41