diff options
-rw-r--r-- | include/dbus_utility.hpp | 6 | ||||
-rw-r--r-- | include/google/google_service_root.hpp | 8 | ||||
-rw-r--r-- | include/openbmc_dbus_rest.hpp | 12 | ||||
-rw-r--r-- | redfish-core/include/utils/chassis_utils.hpp | 23 | ||||
-rw-r--r-- | redfish-core/include/utils/collection.hpp | 17 | ||||
-rw-r--r-- | redfish-core/lib/cable.hpp | 13 | ||||
-rw-r--r-- | redfish-core/lib/certificate_service.hpp | 18 | ||||
-rw-r--r-- | redfish-core/lib/chassis.hpp | 27 | ||||
-rw-r--r-- | redfish-core/lib/ethernet.hpp | 17 | ||||
-rw-r--r-- | redfish-core/lib/health.hpp | 18 | ||||
-rw-r--r-- | redfish-core/lib/hypervisor_system.hpp | 17 | ||||
-rw-r--r-- | redfish-core/lib/log_services.hpp | 63 | ||||
-rw-r--r-- | redfish-core/lib/memory.hpp | 7 | ||||
-rw-r--r-- | redfish-core/lib/metric_report.hpp | 6 | ||||
-rw-r--r-- | redfish-core/lib/metric_report_definition.hpp | 5 | ||||
-rw-r--r-- | redfish-core/lib/pcie.hpp | 13 | ||||
-rw-r--r-- | redfish-core/lib/power.hpp | 31 | ||||
-rw-r--r-- | redfish-core/lib/processor.hpp | 31 | ||||
-rw-r--r-- | redfish-core/lib/sensors.hpp | 21 | ||||
-rw-r--r-- | redfish-core/lib/storage.hpp | 19 | ||||
-rw-r--r-- | redfish-core/lib/systems.hpp | 17 | ||||
-rw-r--r-- | redfish-core/lib/trigger.hpp | 5 |
22 files changed, 202 insertions, 192 deletions
diff --git a/include/dbus_utility.hpp b/include/dbus_utility.hpp index 393ffe3a52..c7fda6d33b 100644 --- a/include/dbus_utility.hpp +++ b/include/dbus_utility.hpp @@ -29,6 +29,7 @@ #include <span> #include <sstream> #include <string> +#include <string_view> #include <tuple> #include <utility> #include <variant> @@ -157,7 +158,8 @@ inline void } inline void getSubTreePaths( - const std::string& path, std::span<std::string> interfaces, + const std::string& path, int32_t depth, + std::span<const std::string_view> interfaces, std::function<void(const boost::system::error_code&, const MapperGetSubTreePathsResponse&)>&& callback) { @@ -169,7 +171,7 @@ inline void getSubTreePaths( }, "xyz.openbmc_project.ObjectMapper", "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", path, 0, + "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", path, depth, interfaces); } diff --git a/include/google/google_service_root.hpp b/include/google/google_service_root.hpp index d802d00b1f..f14cffe20b 100644 --- a/include/google/google_service_root.hpp +++ b/include/google/google_service_root.hpp @@ -9,6 +9,8 @@ #include <utils/hex_utils.hpp> #include <utils/json_utils.hpp> +#include <array> +#include <string_view> #include <vector> namespace crow @@ -37,9 +39,11 @@ inline void handleRootOfTrustCollectionGet( asyncResp->res.jsonValue["@odata.id"] = "/google/v1/RootOfTrustCollection"; asyncResp->res.jsonValue["@odata.type"] = "#RootOfTrustCollection.RootOfTrustCollection"; + const std::array<std::string_view, 1> interfaces{ + "xyz.openbmc_project.Control.Hoth"}; redfish::collection_util::getCollectionMembers( asyncResp, boost::urls::url("/google/v1/RootOfTrustCollection"), - {"xyz.openbmc_project.Control.Hoth"}, "/xyz/openbmc_project"); + interfaces, "/xyz/openbmc_project"); } // Helper struct to identify a resolved D-Bus object interface @@ -94,7 +98,7 @@ inline void resolveRoT(const std::string& command, ResolvedEntityHandler&& entityHandler) { - std::array<std::string, 1> hothIfaces = { + constexpr std::array<std::string_view, 1> hothIfaces = { "xyz.openbmc_project.Control.Hoth"}; crow::connections::systemBus->async_method_call( [command, asyncResp, rotId, diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp index 2cb2bc335e..c7dbb27c4e 100644 --- a/include/openbmc_dbus_rest.hpp +++ b/include/openbmc_dbus_rest.hpp @@ -13,6 +13,7 @@ // limitations under the License. #pragma once +#include "dbus_utility.hpp" #include "http_request.hpp" #include "http_response.hpp" #include "logging.hpp" @@ -1640,9 +1641,10 @@ inline void handleDelete(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, inline void handleList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, const std::string& objectPath, int32_t depth = 0) { - crow::connections::systemBus->async_method_call( + dbus::utility::getSubTreePaths( + objectPath, depth, {}, [asyncResp]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& objectPaths) { if (ec) { @@ -1656,11 +1658,7 @@ inline void handleList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, asyncResp->res.jsonValue["message"] = "200 OK"; asyncResp->res.jsonValue["data"] = objectPaths; } - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", objectPath, - depth, std::array<std::string, 0>()); + }); } inline void handleEnumerate(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, diff --git a/redfish-core/include/utils/chassis_utils.hpp b/redfish-core/include/utils/chassis_utils.hpp index b7f16d83d0..33e8bb7070 100644 --- a/redfish-core/include/utils/chassis_utils.hpp +++ b/redfish-core/include/utils/chassis_utils.hpp @@ -1,6 +1,12 @@ #pragma once + +#include "dbus_utility.hpp" + #include <async_resp.hpp> +#include <array> +#include <string_view> + namespace redfish { @@ -16,13 +22,15 @@ void getValidChassisPath(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, const std::string& chassisId, Callback&& callback) { BMCWEB_LOG_DEBUG << "checkChassisId enter"; - const std::array<const char*, 2> interfaces = { + constexpr std::array<std::string_view, 2> interfaces = { "xyz.openbmc_project.Inventory.Item.Board", "xyz.openbmc_project.Inventory.Item.Chassis"}; - auto respHandler = + // Get the Chassis Collection + dbus::utility::getSubTreePaths( + "/xyz/openbmc_project/inventory", 0, interfaces, [callback{std::forward<Callback>(callback)}, asyncResp, - chassisId](const boost::system::error_code ec, + chassisId](const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& chassisPaths) mutable { BMCWEB_LOG_DEBUG << "getValidChassisPath respHandler enter"; @@ -51,14 +59,7 @@ void getValidChassisPath(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, } } callback(chassisPath); - }; - - // Get the Chassis Collection - crow::connections::systemBus->async_method_call( - respHandler, "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/inventory", 0, interfaces); + }); BMCWEB_LOG_DEBUG << "checkChassisId exit"; } diff --git a/redfish-core/include/utils/collection.hpp b/redfish-core/include/utils/collection.hpp index f11730279d..b66ab5d05c 100644 --- a/redfish-core/include/utils/collection.hpp +++ b/redfish-core/include/utils/collection.hpp @@ -1,8 +1,12 @@ #pragma once +#include "dbus_utility.hpp" + #include <human_sort.hpp> +#include <span> #include <string> +#include <string_view> #include <vector> namespace redfish @@ -25,14 +29,15 @@ namespace collection_util inline void getCollectionMembers(std::shared_ptr<bmcweb::AsyncResp> aResp, const boost::urls::url& collectionPath, - const std::vector<const char*>& interfaces, + std::span<const std::string_view> interfaces, const char* subtree = "/xyz/openbmc_project/inventory") { BMCWEB_LOG_DEBUG << "Get collection members for: " << collectionPath.buffer(); - crow::connections::systemBus->async_method_call( + dbus::utility::getSubTreePaths( + subtree, 0, interfaces, [collectionPath, aResp{std::move(aResp)}]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& objects) { if (ec == boost::system::errc::io_error) { @@ -73,11 +78,7 @@ inline void members.push_back(std::move(member)); } aResp->res.jsonValue["Members@odata.count"] = members.size(); - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", subtree, 0, - interfaces); + }); } } // namespace collection_util diff --git a/redfish-core/lib/cable.hpp b/redfish-core/lib/cable.hpp index 6bc7fbaed7..3cb8c1d3f5 100644 --- a/redfish-core/lib/cable.hpp +++ b/redfish-core/lib/cable.hpp @@ -1,11 +1,16 @@ #pragma once -#include <dbus_utility.hpp> + +#include "dbus_utility.hpp" + #include <query.hpp> #include <sdbusplus/asio/property.hpp> #include <sdbusplus/unpack_properties.hpp> #include <utils/dbus_utils.hpp> #include <utils/json_utils.hpp> +#include <array> +#include <string_view> + namespace redfish { /** @@ -179,10 +184,10 @@ inline void requestRoutesCableCollection(App& app) asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/Cables"; asyncResp->res.jsonValue["Name"] = "Cable Collection"; asyncResp->res.jsonValue["Description"] = "Collection of Cable Entries"; - + constexpr std::array<std::string_view, 1> interfaces{ + "xyz.openbmc_project.Inventory.Item.Cable"}; collection_util::getCollectionMembers( - asyncResp, boost::urls::url("/redfish/v1/Cables"), - {"xyz.openbmc_project.Inventory.Item.Cable"}); + asyncResp, boost::urls::url("/redfish/v1/Cables"), interfaces); }); } diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp index 8a469649b1..a65f33cd0a 100644 --- a/redfish-core/lib/certificate_service.hpp +++ b/redfish-core/lib/certificate_service.hpp @@ -1,17 +1,20 @@ #pragma once +#include "dbus_utility.hpp" #include "utils/dbus_utils.hpp" #include <app.hpp> #include <async_resp.hpp> #include <boost/system/linux_error.hpp> -#include <dbus_utility.hpp> #include <http_response.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> #include <sdbusplus/unpack_properties.hpp> +#include <array> +#include <string_view> + namespace redfish { namespace certs @@ -212,9 +215,12 @@ static void const nlohmann::json::json_pointer& listPtr, const nlohmann::json::json_pointer& countPtr) { - crow::connections::systemBus->async_method_call( + constexpr std::array<std::string_view, 1> interfaces = { + certs::certPropIntf}; + dbus::utility::getSubTreePaths( + basePath, 0, interfaces, [asyncResp, listPtr, countPtr]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& certPaths) { if (ec) { @@ -265,11 +271,7 @@ static void } asyncResp->res.jsonValue[countPtr] = links.size(); - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", basePath, 0, - std::array<const char*, 1>{certs::certPropIntf}); + }); } /** diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp index c6016cbe12..f08a3f32b0 100644 --- a/redfish-core/lib/chassis.hpp +++ b/redfish-core/lib/chassis.hpp @@ -15,12 +15,12 @@ */ #pragma once +#include "dbus_utility.hpp" #include "health.hpp" #include "led.hpp" #include "utils/json_utils.hpp" #include <app.hpp> -#include <dbus_utility.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> @@ -28,6 +28,9 @@ #include <utils/collection.hpp> #include <utils/dbus_utils.hpp> +#include <array> +#include <string_view> + namespace redfish { @@ -147,10 +150,11 @@ inline void handleChassisCollectionGet( asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/Chassis"; asyncResp->res.jsonValue["Name"] = "Chassis Collection"; + constexpr std::array<std::string_view, 2> interfaces{ + "xyz.openbmc_project.Inventory.Item.Board", + "xyz.openbmc_project.Inventory.Item.Chassis"}; collection_util::getCollectionMembers( - asyncResp, boost::urls::url("/redfish/v1/Chassis"), - {"xyz.openbmc_project.Inventory.Item.Board", - "xyz.openbmc_project.Inventory.Item.Chassis"}); + asyncResp, boost::urls::url("/redfish/v1/Chassis"), interfaces); } /** @@ -604,18 +608,14 @@ inline void requestRoutesChassis(App& app) inline void doChassisPowerCycle(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) { - const char* busName = "xyz.openbmc_project.ObjectMapper"; - const char* path = "/xyz/openbmc_project/object_mapper"; - const char* interface = "xyz.openbmc_project.ObjectMapper"; - const char* method = "GetSubTreePaths"; - - const std::array<const char*, 1> interfaces = { + constexpr std::array<std::string_view, 1> interfaces = { "xyz.openbmc_project.State.Chassis"}; // Use mapper to get subtree paths. - crow::connections::systemBus->async_method_call( + dbus::utility::getSubTreePaths( + "/", 0, interfaces, [asyncResp]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& chassisList) { if (ec) { @@ -656,8 +656,7 @@ inline void processName, objectPath, "org.freedesktop.DBus.Properties", "Set", interfaceName, destProperty, dbus::utility::DbusVariantType{propertyValue}); - }, - busName, path, interface, method, "/", 0, interfaces); + }); } inline void handleChassisResetActionInfoPost( diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp index d957ad8461..cccae8bff3 100644 --- a/redfish-core/lib/ethernet.hpp +++ b/redfish-core/lib/ethernet.hpp @@ -15,6 +15,7 @@ */ #pragma once +#include "dbus_utility.hpp" #include "utils/ip_utils.hpp" #include <app.hpp> @@ -22,14 +23,15 @@ #include <boost/algorithm/string/split.hpp> #include <boost/container/flat_set.hpp> #include <dbus_singleton.hpp> -#include <dbus_utility.hpp> #include <error_messages.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> #include <utils/json_utils.hpp> +#include <array> #include <optional> #include <regex> +#include <string_view> namespace redfish { @@ -1588,7 +1590,7 @@ inline void parseInterfaceData( const boost::container::flat_set<IPv4AddressData>& ipv4Data, const boost::container::flat_set<IPv6AddressData>& ipv6Data) { - constexpr const std::array<const char*, 1> inventoryForEthernet = { + constexpr std::array<std::string_view, 1> inventoryForEthernet = { "xyz.openbmc_project.Inventory.Item.Ethernet"}; nlohmann::json& jsonResponse = asyncResp->res.jsonValue; @@ -1599,8 +1601,9 @@ inline void parseInterfaceData( auto health = std::make_shared<HealthPopulate>(asyncResp); - crow::connections::systemBus->async_method_call( - [health](const boost::system::error_code ec, + dbus::utility::getSubTreePaths( + "/", 0, inventoryForEthernet, + [health](const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& resp) { if (ec) { @@ -1608,11 +1611,7 @@ inline void parseInterfaceData( } health->inventory = resp; - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", "/", int32_t(0), - inventoryForEthernet); + }); health->populate(); diff --git a/redfish-core/lib/health.hpp b/redfish-core/lib/health.hpp index 7955fc0d4b..6805a2d400 100644 --- a/redfish-core/lib/health.hpp +++ b/redfish-core/lib/health.hpp @@ -16,12 +16,14 @@ #pragma once #include "async_resp.hpp" +#include "dbus_utility.hpp" #include <app.hpp> #include <dbus_singleton.hpp> -#include <dbus_utility.hpp> #include <nlohmann/json.hpp> +#include <array> +#include <string_view> #include <variant> namespace redfish @@ -192,9 +194,12 @@ struct HealthPopulate : std::enable_shared_from_this<HealthPopulate> void getGlobalPath() { + constexpr std::array<std::string_view, 1> interfaces = { + "xyz.openbmc_project.Inventory.Item.Global"}; std::shared_ptr<HealthPopulate> self = shared_from_this(); - crow::connections::systemBus->async_method_call( - [self](const boost::system::error_code ec, + dbus::utility::getSubTreePaths( + "/", 0, interfaces, + [self](const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& resp) { if (ec || resp.size() != 1) { @@ -202,12 +207,7 @@ struct HealthPopulate : std::enable_shared_from_this<HealthPopulate> return; } self->globalInventoryPath = resp[0]; - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", "/", 0, - std::array<const char*, 1>{ - "xyz.openbmc_project.Inventory.Item.Global"}); + }); } void getAllStatusAssociations() diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp index 2b27fb4824..27d0c35dad 100644 --- a/redfish-core/lib/hypervisor_system.hpp +++ b/redfish-core/lib/hypervisor_system.hpp @@ -1,18 +1,20 @@ #pragma once +#include "dbus_utility.hpp" #include "utils/ip_utils.hpp" #include <app.hpp> #include <boost/container/flat_set.hpp> #include <dbus_singleton.hpp> -#include <dbus_utility.hpp> #include <error_messages.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> #include <utils/json_utils.hpp> +#include <array> #include <optional> +#include <string_view> #include <utility> // TODO(ed) requestRoutesHypervisorSystems seems to have copy-pasted a @@ -786,12 +788,13 @@ inline void requestRoutesHypervisorSystems(App& app) { return; } - const std::array<const char*, 1> interfaces = { + constexpr std::array<std::string_view, 1> interfaces = { "xyz.openbmc_project.Network.EthernetInterface"}; - crow::connections::systemBus->async_method_call( + dbus::utility::getSubTreePaths( + "/xyz/openbmc_project/network/hypervisor", 0, interfaces, [asyncResp]( - const boost::system::error_code error, + const boost::system::error_code& error, const dbus::utility::MapperGetSubTreePathsResponse& ifaceList) { if (error) { @@ -826,11 +829,7 @@ inline void requestRoutesHypervisorSystems(App& app) ifaceArray.push_back(std::move(ethIface)); } asyncResp->res.jsonValue["Members@odata.count"] = ifaceArray.size(); - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/network/hypervisor", 0, interfaces); + }); }); BMCWEB_ROUTE(app, diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp index 307f2e2caf..e5beb32bd7 100644 --- a/redfish-core/lib/log_services.hpp +++ b/redfish-core/lib/log_services.hpp @@ -15,6 +15,7 @@ */ #pragma once +#include "dbus_utility.hpp" #include "gzfile.hpp" #include "http_utility.hpp" #include "human_sort.hpp" @@ -35,7 +36,6 @@ #include <boost/beast/http/verb.hpp> #include <boost/container/flat_map.hpp> #include <boost/system/linux_error.hpp> -#include <dbus_utility.hpp> #include <error_messages.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> @@ -44,6 +44,7 @@ #include <utils/dbus_utils.hpp> #include <utils/time_utils.hpp> +#include <array> #include <charconv> #include <filesystem> #include <optional> @@ -973,10 +974,13 @@ inline void clearDump(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, { std::string dumpTypeLowerCopy = std::string(boost::algorithm::to_lower_copy(dumpType)); + std::string interface = "xyz.openbmc_project.Dump.Entry." + dumpType; + const std::array<const std::string_view, 1> interfaces{interface}; - crow::connections::systemBus->async_method_call( + dbus::utility::getSubTreePaths( + "/xyz/openbmc_project/dump/" + dumpTypeLowerCopy, 0, interfaces, [asyncResp, dumpType]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& subTreePaths) { if (ec) { @@ -995,13 +999,7 @@ inline void clearDump(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, } deleteDumpEntry(asyncResp, logID, dumpType); } - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/dump/" + dumpTypeLowerCopy, 0, - std::array<std::string, 1>{"xyz.openbmc_project.Dump.Entry." + - dumpType}); + }); } inline static void @@ -1038,7 +1036,6 @@ inline static void } } -constexpr char const* postCodeIface = "xyz.openbmc_project.State.Boot.PostCode"; inline void requestRoutesSystemLogServiceCollection(App& app) { /** @@ -1098,8 +1095,11 @@ inline void requestRoutesSystemLogServiceCollection(App& app) asyncResp->res.jsonValue["Members@odata.count"] = logServiceArray.size(); - crow::connections::systemBus->async_method_call( - [asyncResp](const boost::system::error_code ec, + constexpr std::array<std::string_view, 1> interfaces = { + "xyz.openbmc_project.State.Boot.PostCode"}; + dbus::utility::getSubTreePaths( + "/", 0, interfaces, + [asyncResp](const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& subtreePath) { if (ec) @@ -1125,11 +1125,7 @@ inline void requestRoutesSystemLogServiceCollection(App& app) return; } } - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", "/", 0, - std::array<const char*, 1>{postCodeIface}); + }); }); } @@ -2257,8 +2253,6 @@ inline void requestRoutesSystemHostLoggerLogEntry(App& app) }); } -constexpr char const* dumpManagerIface = - "xyz.openbmc_project.Collection.DeleteAll"; inline void handleBMCLogServicesCollectionGet( crow::App& app, const crow::Request& req, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) @@ -2288,9 +2282,12 @@ inline void handleBMCLogServicesCollectionGet( asyncResp->res.jsonValue["Members@odata.count"] = logServiceArray.size(); #ifdef BMCWEB_ENABLE_REDFISH_DUMP_LOG - auto respHandler = + const std::array<const char*, 1> interfaces = { + "xyz.openbmc_project.Collection.DeleteAll"}; + dbus::utility::getSubTreePaths( + "/xyz/openbmc_project/dump", 0, interfaces, [asyncResp]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& subTreePaths) { if (ec) { @@ -2325,14 +2322,7 @@ inline void handleBMCLogServicesCollectionGet( asyncResp->res.jsonValue["Members@odata.count"] = logServiceArrayLocal.size(); - }; - - crow::connections::systemBus->async_method_call( - respHandler, "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/dump", 0, - std::array<const char*, 1>{dumpManagerIface}); + }); #endif } @@ -3155,8 +3145,11 @@ inline void requestRoutesCrashdumpEntryCollection(App& app) return; } - crow::connections::systemBus->async_method_call( - [asyncResp](const boost::system::error_code ec, + constexpr std::array<std::string_view, 1> interfaces = { + crashdumpInterface}; + dbus::utility::getSubTreePaths( + "/", 0, interfaces, + [asyncResp](const boost::system::error_code& ec, const std::vector<std::string>& resp) { if (ec) { @@ -3192,11 +3185,7 @@ inline void requestRoutesCrashdumpEntryCollection(App& app) logCrashdumpEntry(asyncResp, logID, asyncResp->res.jsonValue["Members"]); } - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", "", 0, - std::array<const char*, 1>{crashdumpInterface}); + }); }); } diff --git a/redfish-core/lib/memory.hpp b/redfish-core/lib/memory.hpp index f8af707cd1..395d6a0743 100644 --- a/redfish-core/lib/memory.hpp +++ b/redfish-core/lib/memory.hpp @@ -28,6 +28,9 @@ #include <utils/hex_utils.hpp> #include <utils/json_utils.hpp> +#include <array> +#include <string_view> + namespace redfish { @@ -792,9 +795,11 @@ inline void requestRoutesMemoryCollection(App& app) asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/Systems/system/Memory"; + constexpr std::array<std::string_view, 1> interfaces{ + "xyz.openbmc_project.Inventory.Item.Dimm"}; collection_util::getCollectionMembers( asyncResp, boost::urls::url("/redfish/v1/Systems/system/Memory"), - {"xyz.openbmc_project.Inventory.Item.Dimm"}); + interfaces); }); } diff --git a/redfish-core/lib/metric_report.hpp b/redfish-core/lib/metric_report.hpp index 0fb3a68e5c..48fc9346d8 100644 --- a/redfish-core/lib/metric_report.hpp +++ b/redfish-core/lib/metric_report.hpp @@ -10,6 +10,9 @@ #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> +#include <array> +#include <string_view> + namespace redfish { @@ -73,7 +76,8 @@ inline void requestRoutesMetricReportCollection(App& app) asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/TelemetryService/MetricReports"; asyncResp->res.jsonValue["Name"] = "Metric Report Collection"; - const std::vector<const char*> interfaces{telemetry::reportInterface}; + constexpr std::array<std::string_view, 1> interfaces{ + telemetry::reportInterface}; collection_util::getCollectionMembers( asyncResp, boost::urls::url("/redfish/v1/TelemetryService/MetricReports"), diff --git a/redfish-core/lib/metric_report_definition.hpp b/redfish-core/lib/metric_report_definition.hpp index e6308eb404..7a7b5aaaf1 100644 --- a/redfish-core/lib/metric_report_definition.hpp +++ b/redfish-core/lib/metric_report_definition.hpp @@ -13,7 +13,9 @@ #include <sdbusplus/unpack_properties.hpp> #include <utils/dbus_utils.hpp> +#include <array> #include <map> +#include <string_view> #include <tuple> #include <variant> @@ -359,7 +361,8 @@ inline void requestRoutesMetricReportDefinitionCollection(App& app) asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/TelemetryService/MetricReportDefinitions"; asyncResp->res.jsonValue["Name"] = "Metric Definition Collection"; - const std::vector<const char*> interfaces{telemetry::reportInterface}; + constexpr std::array<std::string_view, 1> interfaces{ + telemetry::reportInterface}; collection_util::getCollectionMembers( asyncResp, boost::urls::url( diff --git a/redfish-core/lib/pcie.hpp b/redfish-core/lib/pcie.hpp index 8af9580609..1e196632ab 100644 --- a/redfish-core/lib/pcie.hpp +++ b/redfish-core/lib/pcie.hpp @@ -16,6 +16,7 @@ #pragma once +#include "dbus_utility.hpp" #include "generated/enums/pcie_device.hpp" #include <app.hpp> @@ -39,8 +40,9 @@ static inline void getPCIeDeviceList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, const std::string& name) { - auto getPCIeMapCallback = - [asyncResp, name](const boost::system::error_code ec, + dbus::utility::getSubTreePaths( + pciePath, 1, {}, + [asyncResp, name](const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& pcieDevicePaths) { if (ec) @@ -71,12 +73,7 @@ static inline void pcieDeviceList.push_back(std::move(pcieDevice)); } asyncResp->res.jsonValue[name + "@odata.count"] = pcieDeviceList.size(); - }; - crow::connections::systemBus->async_method_call( - std::move(getPCIeMapCallback), "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - std::string(pciePath) + "/", 1, std::array<std::string, 0>()); + }); } inline void requestRoutesSystemPCIeDeviceCollection(App& app) diff --git a/redfish-core/lib/power.hpp b/redfish-core/lib/power.hpp index 33aefa3978..88f6a0ca69 100644 --- a/redfish-core/lib/power.hpp +++ b/redfish-core/lib/power.hpp @@ -16,15 +16,18 @@ */ #pragma once +#include "dbus_utility.hpp" #include "sensors.hpp" #include "utils/chassis_utils.hpp" #include <app.hpp> -#include <dbus_utility.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> +#include <array> +#include <string_view> + namespace redfish { inline void setPowerCapOverride( @@ -144,7 +147,7 @@ inline void requestRoutesPower(App& app) using Mapper = dbus::utility::MapperGetSubTreePathsResponse; auto chassisHandler = - [sensorAsyncResp](const boost::system::error_code e, + [sensorAsyncResp](const boost::system::error_code& e, const Mapper& chassisPaths) { if (e) { @@ -273,6 +276,9 @@ inline void requestRoutesPower(App& app) } } + nlohmann::json& value = + sensorJson["PowerLimit"]["LimitInWatts"]; + // LimitException is Mandatory attribute as per OCP // Baseline Profile – v1.0.0, so currently making it // "NoAction" as default value to make it OCP Compliant. @@ -282,12 +288,7 @@ inline void requestRoutesPower(App& app) { // Redfish specification indicates PowerLimit should // be null if the limit is not enabled. - sensorJson["PowerLimit"]["LimitInWatts"] = - powerCap * std::pow(10, scale); - } - else - { - sensorJson["PowerLimit"]["LimitInWatts"] = nullptr; + value = powerCap * std::pow(10, scale); } }; @@ -298,14 +299,12 @@ inline void requestRoutesPower(App& app) std::move(valueHandler)); }; - crow::connections::systemBus->async_method_call( - std::move(chassisHandler), "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/inventory", 0, - std::array<const char*, 2>{ - "xyz.openbmc_project.Inventory.Item.Board", - "xyz.openbmc_project.Inventory.Item.Chassis"}); + constexpr std::array<std::string_view, 2> interfaces = { + "xyz.openbmc_project.Inventory.Item.Board", + "xyz.openbmc_project.Inventory.Item.Chassis"}; + + dbus::utility::getSubTreePaths("/xyz/openbmc_project/inventory", 0, + interfaces, std::move(chassisHandler)); }); BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Power/") diff --git a/redfish-core/lib/processor.hpp b/redfish-core/lib/processor.hpp index d9c26f3d86..f5203a92ea 100644 --- a/redfish-core/lib/processor.hpp +++ b/redfish-core/lib/processor.hpp @@ -16,12 +16,12 @@ #pragma once #include "dbus_singleton.hpp" +#include "dbus_utility.hpp" #include "error_messages.hpp" #include "health.hpp" #include <app.hpp> #include <boost/container/flat_map.hpp> -#include <dbus_utility.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> @@ -32,11 +32,14 @@ #include <utils/dbus_utils.hpp> #include <utils/json_utils.hpp> +#include <array> +#include <string_view> + namespace redfish { // Interfaces which imply a D-Bus object represents a Processor -constexpr std::array<const char*, 2> processorInterfaces = { +constexpr std::array<std::string_view, 2> processorInterfaces = { "xyz.openbmc_project.Inventory.Item.Cpu", "xyz.openbmc_project.Inventory.Item.Accelerator"}; @@ -1075,9 +1078,12 @@ inline void requestRoutesOperatingConfigCollection(App& app) // First find the matching CPU object so we know how to // constrain our search for related Config objects. - crow::connections::systemBus->async_method_call( + const std::array<std::string_view, 1> interfaces = { + "xyz.openbmc_project.Control.Processor.CurrentOperatingConfig"}; + dbus::utility::getSubTreePaths( + "/xyz/openbmc_project/inventory", 0, interfaces, [asyncResp, cpuName]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& objects) { if (ec) { @@ -1100,22 +1106,18 @@ inline void requestRoutesOperatingConfigCollection(App& app) // Use the common search routine to construct the // Collection of all Config objects under this CPU. + constexpr std::array<std::string_view, 1> interface { + "xyz.openbmc_project.Inventory.Item.Cpu.OperatingConfig" + }; collection_util::getCollectionMembers( asyncResp, crow::utility::urlFromPieces("redfish", "v1", "Systems", "system", "Processors", cpuName, "OperatingConfigs"), - {"xyz.openbmc_project.Inventory.Item.Cpu.OperatingConfig"}, - object.c_str()); + interface, object.c_str()); return; } - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/inventory", 0, - std::array<const char*, 1>{ - "xyz.openbmc_project.Control.Processor.CurrentOperatingConfig"}); + }); }); } @@ -1221,8 +1223,7 @@ inline void requestRoutesProcessorCollection(App& app) collection_util::getCollectionMembers( asyncResp, boost::urls::url("/redfish/v1/Systems/system/Processors"), - std::vector<const char*>(processorInterfaces.begin(), - processorInterfaces.end())); + processorInterfaces); }); } diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp index e53a7d2809..00b2ba61f6 100644 --- a/redfish-core/lib/sensors.hpp +++ b/redfish-core/lib/sensors.hpp @@ -15,6 +15,7 @@ */ #pragma once +#include "dbus_utility.hpp" #include "generated/enums/sensor.hpp" #include <app.hpp> @@ -34,10 +35,12 @@ #include <utils/json_utils.hpp> #include <utils/query_param.hpp> +#include <array> #include <cmath> #include <iterator> #include <map> #include <set> +#include <string_view> #include <utility> #include <variant> @@ -515,14 +518,17 @@ void getChassis(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, std::span<std::string_view> sensorTypes, Callback&& callback) { BMCWEB_LOG_DEBUG << "getChassis enter"; - const std::array<const char*, 2> interfaces = { + constexpr std::array<std::string_view, 2> interfaces = { "xyz.openbmc_project.Inventory.Item.Board", "xyz.openbmc_project.Inventory.Item.Chassis"}; - auto respHandler = + + // Get the Chassis Collection + dbus::utility::getSubTreePaths( + "/xyz/openbmc_project/inventory", 0, interfaces, [callback{std::forward<Callback>(callback)}, asyncResp, chassisIdStr{std::string(chassisId)}, chassisSubNode{std::string(chassisSubNode)}, sensorTypes]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& chassisPaths) { BMCWEB_LOG_DEBUG << "getChassis respHandler enter"; if (ec) @@ -581,14 +587,7 @@ void getChassis(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, BMCWEB_LOG_DEBUG << "Finishing with " << culledSensorList->size(); callback(culledSensorList); }); - }; - - // Get the Chassis Collection - crow::connections::systemBus->async_method_call( - respHandler, "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/inventory", 0, interfaces); + }); BMCWEB_LOG_DEBUG << "getChassis exit"; } diff --git a/redfish-core/lib/storage.hpp b/redfish-core/lib/storage.hpp index f4a66041b6..44ed7ff93c 100644 --- a/redfish-core/lib/storage.hpp +++ b/redfish-core/lib/storage.hpp @@ -15,17 +15,20 @@ */ #pragma once +#include "dbus_utility.hpp" #include "health.hpp" #include "openbmc_dbus_rest.hpp" #include <app.hpp> -#include <dbus_utility.hpp> #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> #include <sdbusplus/unpack_properties.hpp> #include <utils/dbus_utils.hpp> +#include <array> +#include <string_view> + namespace redfish { inline void requestRoutesStorageCollection(App& app) @@ -64,9 +67,12 @@ inline void requestRoutesStorageCollection(App& app) inline void getDrives(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, const std::shared_ptr<HealthPopulate>& health) { - crow::connections::systemBus->async_method_call( + const std::array<std::string_view, 1> interfaces = { + "xyz.openbmc_project.Inventory.Item.Drive"}; + dbus::utility::getSubTreePaths( + "/xyz/openbmc_project/inventory", 0, interfaces, [asyncResp, health]( - const boost::system::error_code ec, + const boost::system::error_code& ec, const dbus::utility::MapperGetSubTreePathsResponse& driveList) { if (ec) { @@ -100,12 +106,7 @@ inline void getDrives(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, } count = driveArray.size(); - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/inventory", int32_t(0), - std::array<const char*, 1>{"xyz.openbmc_project.Inventory.Item.Drive"}); + }); } inline void diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp index caf6a292ca..e476592c27 100644 --- a/redfish-core/lib/systems.hpp +++ b/redfish-core/lib/systems.hpp @@ -16,6 +16,7 @@ #pragma once #include "dbus_singleton.hpp" +#include "dbus_utility.hpp" #include "health.hpp" #include "led.hpp" #include "pcie.hpp" @@ -25,7 +26,6 @@ #include <app.hpp> #include <boost/container/flat_map.hpp> -#include <dbus_utility.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> #include <sdbusplus/unpack_properties.hpp> @@ -33,6 +33,8 @@ #include <utils/json_utils.hpp> #include <utils/sw_utils.hpp> +#include <array> +#include <string_view> #include <variant> namespace redfish @@ -2984,15 +2986,16 @@ inline void requestRoutesSystems(App& app) nlohmann::json::array_t({"KVMIP"}); #endif // BMCWEB_ENABLE_KVM - constexpr const std::array<const char*, 4> inventoryForSystems = { + constexpr std::array<std::string_view, 4> inventoryForSystems{ "xyz.openbmc_project.Inventory.Item.Dimm", "xyz.openbmc_project.Inventory.Item.Cpu", "xyz.openbmc_project.Inventory.Item.Drive", "xyz.openbmc_project.Inventory.Item.StorageController"}; auto health = std::make_shared<HealthPopulate>(asyncResp); - crow::connections::systemBus->async_method_call( - [health](const boost::system::error_code ec, + dbus::utility::getSubTreePaths( + "/", 0, inventoryForSystems, + [health](const boost::system::error_code& ec, const std::vector<std::string>& resp) { if (ec) { @@ -3001,11 +3004,7 @@ inline void requestRoutesSystems(App& app) } health->inventory = resp; - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", "/", - int32_t(0), inventoryForSystems); + }); health->populate(); diff --git a/redfish-core/lib/trigger.hpp b/redfish-core/lib/trigger.hpp index ad3855621b..4da1ed5fdb 100644 --- a/redfish-core/lib/trigger.hpp +++ b/redfish-core/lib/trigger.hpp @@ -10,6 +10,8 @@ #include <sdbusplus/unpack_properties.hpp> #include <utils/dbus_utils.hpp> +#include <array> +#include <string_view> #include <tuple> #include <variant> #include <vector> @@ -304,7 +306,8 @@ inline void requestRoutesTriggerCollection(App& app) asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/TelemetryService/Triggers"; asyncResp->res.jsonValue["Name"] = "Triggers Collection"; - const std::vector<const char*> interfaces{telemetry::triggerInterface}; + constexpr std::array<std::string_view, 1> interfaces{ + telemetry::triggerInterface}; collection_util::getCollectionMembers( asyncResp, boost::urls::url("/redfish/v1/TelemetryService/Triggers"), |