| #ifndef THIRD_PARTY_GBMCWEB_REDFISH_CORE_LIB_POWER_SUBSYSTEM_H_ | |
| #define THIRD_PARTY_GBMCWEB_REDFISH_CORE_LIB_POWER_SUBSYSTEM_H_ | |
| #include <memory> | |
| #include <optional> | |
| #include <string> | |
| #include <utility> | |
| #include <functional> | |
| #include "app.hpp" | |
| #include "async_resp.hpp" | |
| #include "query.hpp" | |
| #include "error_messages.hpp" | |
| #include "registries/privilege_registry.hpp" | |
| #include "chassis_utils.hpp" | |
| #include "utility.hpp" | |
| #include "http_request.hpp" | |
| namespace redfish { | |
| inline void doPowerSubsystemCollection( | |
| const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, | |
| const std::string& chassisId, | |
| const std::optional<std::string>& validChassisPath) { | |
| if (!validChassisPath) { | |
| messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); | |
| return; | |
| } | |
| asyncResp->res.addHeader(boost::beast::http::field::link, | |
| "</redfish/v1/JsonSchemas/PowerSubsystem/" | |
| "PowerSubsystem.json>; rel=describedby"); | |
| asyncResp->res.jsonValue["@odata.type"] = | |
| "#PowerSubsystem.v1_1_0.PowerSubsystem"; | |
| asyncResp->res.jsonValue["Name"] = "Power Subsystem"; | |
| asyncResp->res.jsonValue["Id"] = "PowerSubsystem"; | |
| asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces( | |
| "redfish", "v1", "Chassis", chassisId, "PowerSubsystem"); | |
| asyncResp->res.jsonValue["Status"]["State"] = "Enabled"; | |
| asyncResp->res.jsonValue["Status"]["Health"] = "OK"; | |
| asyncResp->res.jsonValue["PowerSupplies"]["@odata.id"] = | |
| crow::utility::urlFromPieces("redfish", "v1", "Chassis", chassisId, | |
| "PowerSubsystem", "PowerSupplies"); | |
| } | |
| inline void handlePowerSubsystemCollectionHead( | |
| App& app, const crow::Request& req, | |
| const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, | |
| const std::string& chassisId) { | |
| if (!redfish::setUpRedfishRoute(app, req, asyncResp)) { | |
| return; | |
| } | |
| auto respHandler = [asyncResp, chassisId]( | |
| const std::optional<std::string>& validChassisPath) { | |
| if (!validChassisPath) { | |
| messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); | |
| return; | |
| } | |
| asyncResp->res.addHeader(boost::beast::http::field::link, | |
| "</redfish/v1/JsonSchemas/PowerSubsystem/" | |
| "PowerSubsystem.json>; rel=describedby"); | |
| }; | |
| redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId, | |
| std::move(respHandler)); | |
| } | |
| inline void handlePowerSubsystemCollectionGet( | |
| App& app, const crow::Request& req, | |
| const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, | |
| const std::string& chassisId) { | |
| if (!redfish::setUpRedfishRoute(app, req, asyncResp)) { | |
| return; | |
| } | |
| redfish::chassis_utils::getValidChassisPath( | |
| asyncResp, chassisId, | |
| std::bind_front(doPowerSubsystemCollection, asyncResp, chassisId)); | |
| } | |
| inline void requestRoutesPowerSubsystem(App& app) { | |
| BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/PowerSubsystem/") | |
| .privileges(redfish::privileges::headPowerSubsystem) | |
| .methods(boost::beast::http::verb::head)( | |
| std::bind_front(handlePowerSubsystemCollectionHead, std::ref(app))); | |
| BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/PowerSubsystem/") | |
| .privileges(redfish::privileges::getPowerSubsystem) | |
| .methods(boost::beast::http::verb::get)( | |
| std::bind_front(handlePowerSubsystemCollectionGet, std::ref(app))); | |
| } | |
| } // namespace redfish | |
| #endif // THIRD_PARTY_GBMCWEB_REDFISH_CORE_LIB_POWER_SUBSYSTEM_H_ |