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