blob: 31d5da10096e95ad2f15736cb99c4ee7342470f7 [file] [log] [blame]
#pragma once
#include <boost/container/flat_map.hpp>
#include <string>
#include <vector>
namespace redfish
{
namespace collection_util
{
inline void getResourceList(std::shared_ptr<AsyncResp> aResp,
const std::string& subclass,
const std::vector<const char*>& collectionName)
{
BMCWEB_LOG_DEBUG << "Get available system cpu/mem resources.";
crow::connections::systemBus->async_method_call(
[subclass, aResp{std::move(aResp)}](
const boost::system::error_code ec,
const boost::container::flat_map<
std::string, boost::container::flat_map<
std::string, std::vector<std::string>>>&
subtree) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error";
messages::internalError(aResp->res);
return;
}
nlohmann::json& members = aResp->res.jsonValue["Members"];
members = nlohmann::json::array();
for (const auto& object : subtree)
{
auto iter = object.first.rfind("/");
if ((iter != std::string::npos) && (iter < object.first.size()))
{
members.push_back(
{{"@odata.id", "/redfish/v1/Systems/system/" +
subclass + "/" +
object.first.substr(iter + 1)}});
}
}
aResp->res.jsonValue["Members@odata.count"] = members.size();
},
"xyz.openbmc_project.ObjectMapper",
"/xyz/openbmc_project/object_mapper",
"xyz.openbmc_project.ObjectMapper", "GetSubTree",
"/xyz/openbmc_project/inventory", 0, collectionName);
}
} // namespace collection_util
} // namespace redfish