diff options
author | Krzysztof Grobelny <krzysztof.grobelny@intel.com> | 2022-08-29 15:49:20 +0300 |
---|---|---|
committer | Krzysztof Grobelny <krzysztof.grobelny@intel.com> | 2022-08-29 16:01:38 +0300 |
commit | 86d89ed7ad605b0f7dbe2c11200363fd34c6364c (patch) | |
tree | f4389b3a6ec1343ee6fc552efb1fbf70260e1a2b | |
parent | 9b12d1f9b0cfe4f7f5cf62a3439bbd24a2c08587 (diff) | |
download | bmcweb-86d89ed7ad605b0f7dbe2c11200363fd34c6364c.tar.xz |
used sdbusplus::unpackPropertiesNoThrow part 5
used sdbusplus::unpackPropertiesNoThrow in chassis.hpp and sensors.hpp,
also replaced all usages of "GetAll" with
sdbusplus::asio::getAllProperties
bmcweb size: 2701720 -> 2697624 (-4096)
compressed size: 1131481 -> 1129725 (-1756)
Tested:
Performed get on:
- /redfish/v1/Chassis/chassis
- /redfish/v1/Chassis/chassis/Thermal
Get result before and after the change was in same format.
Change-Id: I76377710cd037f7c54cb0639c011b64c73a719ab
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
-rw-r--r-- | redfish-core/lib/chassis.hpp | 87 | ||||
-rw-r--r-- | redfish-core/lib/sensors.hpp | 42 |
2 files changed, 69 insertions, 60 deletions
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp index d6f9321ec1..11ef6c4a10 100644 --- a/redfish-core/lib/chassis.hpp +++ b/redfish-core/lib/chassis.hpp @@ -24,7 +24,9 @@ #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> +#include <sdbusplus/unpack_properties.hpp> #include <utils/collection.hpp> +#include <utils/dbus_utils.hpp> namespace redfish { @@ -336,45 +338,58 @@ inline void } } - crow::connections::systemBus->async_method_call( + sdbusplus::asio::getAllProperties( + *crow::connections::systemBus, connectionName, path, + "xyz.openbmc_project.Inventory.Decorator.Asset", [asyncResp, chassisId(std::string(chassisId))]( const boost::system::error_code /*ec2*/, const dbus::utility::DBusPropertiesMap& propertiesList) { - for (const std::pair<std::string, - dbus::utility::DbusVariantType>& property : - propertiesList) + const std::string* partNumber = nullptr; + const std::string* serialNumber = nullptr; + const std::string* manufacturer = nullptr; + const std::string* model = nullptr; + const std::string* sparePartNumber = nullptr; + + const bool success = sdbusplus::unpackPropertiesNoThrow( + dbus_utils::UnpackErrorPrinter(), propertiesList, + "PartNumber", partNumber, "SerialNumber", serialNumber, + "Manufacturer", manufacturer, "Model", model, + "SparePartNumber", sparePartNumber); + + if (!success) { - // Store DBus properties that are also - // Redfish properties with same name and a - // string value - const std::string& propertyName = property.first; - if ((propertyName == "PartNumber") || - (propertyName == "SerialNumber") || - (propertyName == "Manufacturer") || - (propertyName == "Model") || - (propertyName == "SparePartNumber")) - { - const std::string* value = - std::get_if<std::string>(&property.second); - if (value == nullptr) - { - BMCWEB_LOG_ERROR << "Null value returned for " - << propertyName; - messages::internalError(asyncResp->res); - return; - } - // SparePartNumber is optional on D-Bus - // so skip if it is empty - if (propertyName == "SparePartNumber") - { - if (value->empty()) - { - continue; - } - } - asyncResp->res.jsonValue[propertyName] = *value; - } + messages::internalError(asyncResp->res); + return; + } + + if (partNumber != nullptr) + { + asyncResp->res.jsonValue["PartNumber"] = *partNumber; } + + if (serialNumber != nullptr) + { + asyncResp->res.jsonValue["SerialNumber"] = *serialNumber; + } + + if (manufacturer != nullptr) + { + asyncResp->res.jsonValue["Manufacturer"] = *manufacturer; + } + + if (model != nullptr) + { + asyncResp->res.jsonValue["Model"] = *model; + } + + // SparePartNumber is optional on D-Bus + // so skip if it is empty + if (sparePartNumber != nullptr && !sparePartNumber->empty()) + { + asyncResp->res.jsonValue["SparePartNumber"] = + *sparePartNumber; + } + asyncResp->res.jsonValue["Name"] = chassisId; asyncResp->res.jsonValue["Id"] = chassisId; #ifdef BMCWEB_ALLOW_DEPRECATED_POWER_THERMAL @@ -408,9 +423,7 @@ inline void asyncResp->res.jsonValue["Links"]["ManagedBy"] = std::move(managedBy); getChassisState(asyncResp); - }, - connectionName, path, "org.freedesktop.DBus.Properties", - "GetAll", "xyz.openbmc_project.Inventory.Decorator.Asset"); + }); for (const auto& interface : interfaces2) { diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp index aa48e0d735..2b1a3c8fba 100644 --- a/redfish-core/lib/sensors.hpp +++ b/redfish-core/lib/sensors.hpp @@ -24,6 +24,8 @@ #include <query.hpp> #include <registries/privilege_registry.hpp> #include <sdbusplus/asio/property.hpp> +#include <sdbusplus/unpack_properties.hpp> +#include <utils/dbus_utils.hpp> #include <utils/json_utils.hpp> #include <utils/query_param.hpp> @@ -1122,47 +1124,43 @@ inline void populateFanRedundancy( { return; } - crow::connections::systemBus->async_method_call( + sdbusplus::asio::getAllProperties( + *crow::connections::systemBus, owner, path, + "xyz.openbmc_project.Control.FanRedundancy", [path, sensorsAsyncResp]( const boost::system::error_code& err, - const std::map<std::string, - dbus::utility::DbusVariantType>& ret) { + const dbus::utility::DBusPropertiesMap& ret) { if (err) { return; // don't have to have this // interface } - auto findFailures = ret.find("AllowedFailures"); - auto findCollection = ret.find("Collection"); - auto findStatus = ret.find("Status"); - if (findFailures == ret.end() || - findCollection == ret.end() || findStatus == ret.end()) + const uint8_t* allowedFailures = nullptr; + const std::vector<std::string>* collection = nullptr; + const std::string* status = nullptr; + + const bool success = sdbusplus::unpackPropertiesNoThrow( + dbus_utils::UnpackErrorPrinter(), ret, + "AllowedFailures", allowedFailures, "Collection", + collection, "Status", status); + + if (!success) { - BMCWEB_LOG_ERROR << "Invalid redundancy interface"; messages::internalError( sensorsAsyncResp->asyncResp->res); return; } - const uint8_t* allowedFailures = - std::get_if<uint8_t>(&(findFailures->second)); - const std::vector<std::string>* collection = - std::get_if<std::vector<std::string>>( - &(findCollection->second)); - const std::string* status = - std::get_if<std::string>(&(findStatus->second)); - if (allowedFailures == nullptr || collection == nullptr || status == nullptr) { - - BMCWEB_LOG_ERROR - << "Invalid redundancy interface types"; + BMCWEB_LOG_ERROR << "Invalid redundancy interface"; messages::internalError( sensorsAsyncResp->asyncResp->res); return; } + sdbusplus::message::object_path objectPath(path); std::string name = objectPath.filename(); if (name.empty()) @@ -1247,9 +1245,7 @@ inline void populateFanRedundancy( redundancy["Status"]["State"] = "Enabled"; jResp.push_back(std::move(redundancy)); - }, - owner, path, "org.freedesktop.DBus.Properties", "GetAll", - "xyz.openbmc_project.Control.FanRedundancy"); + }); }); } }, |