1*2973963eSXiaochao Ma #pragma once 2*2973963eSXiaochao Ma 3*2973963eSXiaochao Ma #include "app.hpp" 4*2973963eSXiaochao Ma #include "query.hpp" 5*2973963eSXiaochao Ma #include "registries/privilege_registry.hpp" 6*2973963eSXiaochao Ma #include "utils/chassis_utils.hpp" 7*2973963eSXiaochao Ma #include "utils/json_utils.hpp" 8*2973963eSXiaochao Ma 9*2973963eSXiaochao Ma namespace redfish 10*2973963eSXiaochao Ma { 11*2973963eSXiaochao Ma 12*2973963eSXiaochao Ma inline void doThermalSubsystemCollection( 13*2973963eSXiaochao Ma const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 14*2973963eSXiaochao Ma const std::string& chassisId, 15*2973963eSXiaochao Ma const std::optional<std::string>& validChassisPath) 16*2973963eSXiaochao Ma { 17*2973963eSXiaochao Ma if (!validChassisPath) 18*2973963eSXiaochao Ma { 19*2973963eSXiaochao Ma BMCWEB_LOG_ERROR << "Not a valid chassis ID" << chassisId; 20*2973963eSXiaochao Ma messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 21*2973963eSXiaochao Ma return; 22*2973963eSXiaochao Ma } 23*2973963eSXiaochao Ma asyncResp->res.jsonValue["@odata.type"] = 24*2973963eSXiaochao Ma "#ThermalSubsystem.v1_0_0.ThermalSubsystem"; 25*2973963eSXiaochao Ma asyncResp->res.jsonValue["Name"] = "Thermal Subsystem"; 26*2973963eSXiaochao Ma asyncResp->res.jsonValue["Id"] = "ThermalSubsystem"; 27*2973963eSXiaochao Ma 28*2973963eSXiaochao Ma asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces( 29*2973963eSXiaochao Ma "redfish", "v1", "Chassis", chassisId, "ThermalSubsystem"); 30*2973963eSXiaochao Ma 31*2973963eSXiaochao Ma asyncResp->res.jsonValue["Status"]["State"] = "Enabled"; 32*2973963eSXiaochao Ma asyncResp->res.jsonValue["Status"]["Health"] = "OK"; 33*2973963eSXiaochao Ma } 34*2973963eSXiaochao Ma 35*2973963eSXiaochao Ma inline void handleThermalSubsystemCollectionGet( 36*2973963eSXiaochao Ma App& app, const crow::Request& req, 37*2973963eSXiaochao Ma const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 38*2973963eSXiaochao Ma const std::string& param) 39*2973963eSXiaochao Ma { 40*2973963eSXiaochao Ma if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 41*2973963eSXiaochao Ma { 42*2973963eSXiaochao Ma return; 43*2973963eSXiaochao Ma } 44*2973963eSXiaochao Ma const std::string& chassisId = param; 45*2973963eSXiaochao Ma 46*2973963eSXiaochao Ma redfish::chassis_utils::getValidChassisPath( 47*2973963eSXiaochao Ma asyncResp, chassisId, 48*2973963eSXiaochao Ma std::bind_front(doThermalSubsystemCollection, asyncResp, chassisId)); 49*2973963eSXiaochao Ma } 50*2973963eSXiaochao Ma 51*2973963eSXiaochao Ma inline void requestRoutesThermalSubsystem(App& app) 52*2973963eSXiaochao Ma { 53*2973963eSXiaochao Ma BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/ThermalSubsystem/") 54*2973963eSXiaochao Ma .privileges(redfish::privileges::getThermalSubsystem) 55*2973963eSXiaochao Ma .methods(boost::beast::http::verb::get)(std::bind_front( 56*2973963eSXiaochao Ma handleThermalSubsystemCollectionGet, std::ref(app))); 57*2973963eSXiaochao Ma } 58*2973963eSXiaochao Ma 59*2973963eSXiaochao Ma } // namespace redfish 60