xref: /openbmc/bmcweb/features/redfish/include/utils/telemetry_utils.hpp (revision 4dbb8aea7651dc61a4dc384625567b34393742a2)
1081ebf06SWludzik, Jozef #pragma once
2081ebf06SWludzik, Jozef 
3*4dbb8aeaSWludzik, Jozef #include "dbus_utility.hpp"
4*4dbb8aeaSWludzik, Jozef 
5081ebf06SWludzik, Jozef namespace redfish
6081ebf06SWludzik, Jozef {
7081ebf06SWludzik, Jozef 
8081ebf06SWludzik, Jozef namespace telemetry
9081ebf06SWludzik, Jozef {
10081ebf06SWludzik, Jozef 
11081ebf06SWludzik, Jozef constexpr const char* service = "xyz.openbmc_project.Telemetry";
12081ebf06SWludzik, Jozef constexpr const char* reportInterface = "xyz.openbmc_project.Telemetry.Report";
13081ebf06SWludzik, Jozef constexpr const char* metricReportDefinitionUri =
14081ebf06SWludzik, Jozef     "/redfish/v1/TelemetryService/MetricReportDefinitions/";
15081ebf06SWludzik, Jozef constexpr const char* metricReportUri =
16081ebf06SWludzik, Jozef     "/redfish/v1/TelemetryService/MetricReports/";
17081ebf06SWludzik, Jozef 
18081ebf06SWludzik, Jozef inline void getReportCollection(const std::shared_ptr<AsyncResp>& asyncResp,
19081ebf06SWludzik, Jozef                                 const std::string& uri)
20081ebf06SWludzik, Jozef {
21081ebf06SWludzik, Jozef     const std::array<const char*, 1> interfaces = {reportInterface};
22081ebf06SWludzik, Jozef 
23081ebf06SWludzik, Jozef     crow::connections::systemBus->async_method_call(
24081ebf06SWludzik, Jozef         [asyncResp, uri](const boost::system::error_code ec,
25081ebf06SWludzik, Jozef                          const std::vector<std::string>& reports) {
26081ebf06SWludzik, Jozef             if (ec == boost::system::errc::io_error)
27081ebf06SWludzik, Jozef             {
28081ebf06SWludzik, Jozef                 asyncResp->res.jsonValue["Members"] = nlohmann::json::array();
29081ebf06SWludzik, Jozef                 asyncResp->res.jsonValue["Members@odata.count"] = 0;
30081ebf06SWludzik, Jozef                 return;
31081ebf06SWludzik, Jozef             }
32081ebf06SWludzik, Jozef             if (ec)
33081ebf06SWludzik, Jozef             {
34081ebf06SWludzik, Jozef                 BMCWEB_LOG_ERROR << "Dbus method call failed: " << ec;
35081ebf06SWludzik, Jozef                 messages::internalError(asyncResp->res);
36081ebf06SWludzik, Jozef                 return;
37081ebf06SWludzik, Jozef             }
38081ebf06SWludzik, Jozef 
39081ebf06SWludzik, Jozef             nlohmann::json& members = asyncResp->res.jsonValue["Members"];
40081ebf06SWludzik, Jozef             members = nlohmann::json::array();
41081ebf06SWludzik, Jozef 
42081ebf06SWludzik, Jozef             for (const std::string& report : reports)
43081ebf06SWludzik, Jozef             {
44081ebf06SWludzik, Jozef                 sdbusplus::message::object_path path(report);
45081ebf06SWludzik, Jozef                 std::string name = path.filename();
46081ebf06SWludzik, Jozef                 if (name.empty())
47081ebf06SWludzik, Jozef                 {
48081ebf06SWludzik, Jozef                     BMCWEB_LOG_ERROR << "Received invalid path: " << report;
49081ebf06SWludzik, Jozef                     messages::internalError(asyncResp->res);
50081ebf06SWludzik, Jozef                     return;
51081ebf06SWludzik, Jozef                 }
52081ebf06SWludzik, Jozef                 members.push_back({{"@odata.id", uri + name}});
53081ebf06SWludzik, Jozef             }
54081ebf06SWludzik, Jozef 
55081ebf06SWludzik, Jozef             asyncResp->res.jsonValue["Members@odata.count"] = members.size();
56081ebf06SWludzik, Jozef         },
57081ebf06SWludzik, Jozef         "xyz.openbmc_project.ObjectMapper",
58081ebf06SWludzik, Jozef         "/xyz/openbmc_project/object_mapper",
59081ebf06SWludzik, Jozef         "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths",
60081ebf06SWludzik, Jozef         "/xyz/openbmc_project/Telemetry/Reports/TelemetryService", 1,
61081ebf06SWludzik, Jozef         interfaces);
62081ebf06SWludzik, Jozef }
63081ebf06SWludzik, Jozef 
64081ebf06SWludzik, Jozef inline std::string getDbusReportPath(const std::string& id)
65081ebf06SWludzik, Jozef {
66081ebf06SWludzik, Jozef     std::string path =
67081ebf06SWludzik, Jozef         "/xyz/openbmc_project/Telemetry/Reports/TelemetryService/" + id;
68081ebf06SWludzik, Jozef     dbus::utility::escapePathForDbus(path);
69081ebf06SWludzik, Jozef     return path;
70081ebf06SWludzik, Jozef }
71081ebf06SWludzik, Jozef 
72081ebf06SWludzik, Jozef } // namespace telemetry
73081ebf06SWludzik, Jozef } // namespace redfish
74