1*081ebf06SWludzik, Jozef #pragma once 2*081ebf06SWludzik, Jozef 3*081ebf06SWludzik, Jozef namespace redfish 4*081ebf06SWludzik, Jozef { 5*081ebf06SWludzik, Jozef 6*081ebf06SWludzik, Jozef namespace telemetry 7*081ebf06SWludzik, Jozef { 8*081ebf06SWludzik, Jozef 9*081ebf06SWludzik, Jozef constexpr const char* service = "xyz.openbmc_project.Telemetry"; 10*081ebf06SWludzik, Jozef constexpr const char* reportInterface = "xyz.openbmc_project.Telemetry.Report"; 11*081ebf06SWludzik, Jozef constexpr const char* metricReportDefinitionUri = 12*081ebf06SWludzik, Jozef "/redfish/v1/TelemetryService/MetricReportDefinitions/"; 13*081ebf06SWludzik, Jozef constexpr const char* metricReportUri = 14*081ebf06SWludzik, Jozef "/redfish/v1/TelemetryService/MetricReports/"; 15*081ebf06SWludzik, Jozef 16*081ebf06SWludzik, Jozef inline void getReportCollection(const std::shared_ptr<AsyncResp>& asyncResp, 17*081ebf06SWludzik, Jozef const std::string& uri) 18*081ebf06SWludzik, Jozef { 19*081ebf06SWludzik, Jozef const std::array<const char*, 1> interfaces = {reportInterface}; 20*081ebf06SWludzik, Jozef 21*081ebf06SWludzik, Jozef crow::connections::systemBus->async_method_call( 22*081ebf06SWludzik, Jozef [asyncResp, uri](const boost::system::error_code ec, 23*081ebf06SWludzik, Jozef const std::vector<std::string>& reports) { 24*081ebf06SWludzik, Jozef if (ec == boost::system::errc::io_error) 25*081ebf06SWludzik, Jozef { 26*081ebf06SWludzik, Jozef asyncResp->res.jsonValue["Members"] = nlohmann::json::array(); 27*081ebf06SWludzik, Jozef asyncResp->res.jsonValue["Members@odata.count"] = 0; 28*081ebf06SWludzik, Jozef return; 29*081ebf06SWludzik, Jozef } 30*081ebf06SWludzik, Jozef if (ec) 31*081ebf06SWludzik, Jozef { 32*081ebf06SWludzik, Jozef BMCWEB_LOG_ERROR << "Dbus method call failed: " << ec; 33*081ebf06SWludzik, Jozef messages::internalError(asyncResp->res); 34*081ebf06SWludzik, Jozef return; 35*081ebf06SWludzik, Jozef } 36*081ebf06SWludzik, Jozef 37*081ebf06SWludzik, Jozef nlohmann::json& members = asyncResp->res.jsonValue["Members"]; 38*081ebf06SWludzik, Jozef members = nlohmann::json::array(); 39*081ebf06SWludzik, Jozef 40*081ebf06SWludzik, Jozef for (const std::string& report : reports) 41*081ebf06SWludzik, Jozef { 42*081ebf06SWludzik, Jozef sdbusplus::message::object_path path(report); 43*081ebf06SWludzik, Jozef std::string name = path.filename(); 44*081ebf06SWludzik, Jozef if (name.empty()) 45*081ebf06SWludzik, Jozef { 46*081ebf06SWludzik, Jozef BMCWEB_LOG_ERROR << "Received invalid path: " << report; 47*081ebf06SWludzik, Jozef messages::internalError(asyncResp->res); 48*081ebf06SWludzik, Jozef return; 49*081ebf06SWludzik, Jozef } 50*081ebf06SWludzik, Jozef members.push_back({{"@odata.id", uri + name}}); 51*081ebf06SWludzik, Jozef } 52*081ebf06SWludzik, Jozef 53*081ebf06SWludzik, Jozef asyncResp->res.jsonValue["Members@odata.count"] = members.size(); 54*081ebf06SWludzik, Jozef }, 55*081ebf06SWludzik, Jozef "xyz.openbmc_project.ObjectMapper", 56*081ebf06SWludzik, Jozef "/xyz/openbmc_project/object_mapper", 57*081ebf06SWludzik, Jozef "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", 58*081ebf06SWludzik, Jozef "/xyz/openbmc_project/Telemetry/Reports/TelemetryService", 1, 59*081ebf06SWludzik, Jozef interfaces); 60*081ebf06SWludzik, Jozef } 61*081ebf06SWludzik, Jozef 62*081ebf06SWludzik, Jozef inline std::string getDbusReportPath(const std::string& id) 63*081ebf06SWludzik, Jozef { 64*081ebf06SWludzik, Jozef std::string path = 65*081ebf06SWludzik, Jozef "/xyz/openbmc_project/Telemetry/Reports/TelemetryService/" + id; 66*081ebf06SWludzik, Jozef dbus::utility::escapePathForDbus(path); 67*081ebf06SWludzik, Jozef return path; 68*081ebf06SWludzik, Jozef } 69*081ebf06SWludzik, Jozef 70*081ebf06SWludzik, Jozef } // namespace telemetry 71*081ebf06SWludzik, Jozef } // namespace redfish 72