#pragma once #include "app.hpp" #include "generated/enums/resource.hpp" #include "logging.hpp" #include "query.hpp" #include "registries/privilege_registry.hpp" #include "utils/chassis_utils.hpp" #include "utils/json_utils.hpp" #include #include #include namespace redfish { inline void doThermalSubsystemCollection( const std::shared_ptr& asyncResp, const std::string& chassisId, const std::optional& validChassisPath) { if (!validChassisPath) { BMCWEB_LOG_WARNING("Not a valid chassis ID{}", chassisId); messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); return; } asyncResp->res.addHeader( boost::beast::http::field::link, "; rel=describedby"); asyncResp->res.jsonValue["@odata.type"] = "#ThermalSubsystem.v1_0_0.ThermalSubsystem"; asyncResp->res.jsonValue["Name"] = "Thermal Subsystem"; asyncResp->res.jsonValue["Id"] = "ThermalSubsystem"; asyncResp->res.jsonValue["@odata.id"] = boost::urls::format( "/redfish/v1/Chassis/{}/ThermalSubsystem", chassisId); asyncResp->res.jsonValue["Fans"]["@odata.id"] = boost::urls::format( "/redfish/v1/Chassis/{}/ThermalSubsystem/Fans", chassisId); asyncResp->res.jsonValue["ThermalMetrics"]["@odata.id"] = boost::urls::format( "/redfish/v1/Chassis/{}/ThermalSubsystem/ThermalMetrics", chassisId); asyncResp->res.jsonValue["Status"]["State"] = resource::State::Enabled; asyncResp->res.jsonValue["Status"]["Health"] = resource::Health::OK; } inline void handleThermalSubsystemCollectionHead( App& app, const crow::Request& req, const std::shared_ptr& asyncResp, const std::string& chassisId) { if (!redfish::setUpRedfishRoute(app, req, asyncResp)) { return; } auto respHandler = [asyncResp, chassisId]( const std::optional& validChassisPath) { if (!validChassisPath) { messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); return; } asyncResp->res.addHeader( boost::beast::http::field::link, "; rel=describedby"); }; redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId, std::bind_front(respHandler)); } inline void handleThermalSubsystemCollectionGet( App& app, const crow::Request& req, const std::shared_ptr& asyncResp, const std::string& chassisId) { if (!redfish::setUpRedfishRoute(app, req, asyncResp)) { return; } redfish::chassis_utils::getValidChassisPath( asyncResp, chassisId, std::bind_front(doThermalSubsystemCollection, asyncResp, chassisId)); } inline void requestRoutesThermalSubsystem(App& app) { BMCWEB_ROUTE(app, "/redfish/v1/Chassis//ThermalSubsystem/") .privileges(redfish::privileges::headThermalSubsystem) .methods(boost::beast::http::verb::head)(std::bind_front( handleThermalSubsystemCollectionHead, std::ref(app))); BMCWEB_ROUTE(app, "/redfish/v1/Chassis//ThermalSubsystem/") .privileges(redfish::privileges::getThermalSubsystem) .methods(boost::beast::http::verb::get)(std::bind_front( handleThermalSubsystemCollectionGet, std::ref(app))); } } // namespace redfish