1*5ae1f7f3Szhanghch05 #pragma once 2*5ae1f7f3Szhanghch05 3*5ae1f7f3Szhanghch05 #include "app.hpp" 4*5ae1f7f3Szhanghch05 #include "query.hpp" 5*5ae1f7f3Szhanghch05 #include "registries/privilege_registry.hpp" 6*5ae1f7f3Szhanghch05 #include "utils/chassis_utils.hpp" 7*5ae1f7f3Szhanghch05 8*5ae1f7f3Szhanghch05 #include <functional> 9*5ae1f7f3Szhanghch05 #include <memory> 10*5ae1f7f3Szhanghch05 #include <optional> 11*5ae1f7f3Szhanghch05 #include <string> 12*5ae1f7f3Szhanghch05 13*5ae1f7f3Szhanghch05 namespace redfish 14*5ae1f7f3Szhanghch05 { 15*5ae1f7f3Szhanghch05 inline void 16*5ae1f7f3Szhanghch05 doThermalMetrics(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 17*5ae1f7f3Szhanghch05 const std::string& chassisId, 18*5ae1f7f3Szhanghch05 const std::optional<std::string>& validChassisPath) 19*5ae1f7f3Szhanghch05 { 20*5ae1f7f3Szhanghch05 if (!validChassisPath) 21*5ae1f7f3Szhanghch05 { 22*5ae1f7f3Szhanghch05 messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 23*5ae1f7f3Szhanghch05 return; 24*5ae1f7f3Szhanghch05 } 25*5ae1f7f3Szhanghch05 26*5ae1f7f3Szhanghch05 asyncResp->res.addHeader( 27*5ae1f7f3Szhanghch05 boost::beast::http::field::link, 28*5ae1f7f3Szhanghch05 "</redfish/v1/JsonSchemas/ThermalMetrics/ThermalMetrics.json>; rel=describedby"); 29*5ae1f7f3Szhanghch05 asyncResp->res.jsonValue["@odata.type"] = 30*5ae1f7f3Szhanghch05 "#ThermalMetrics.v1_0_1.ThermalMetrics"; 31*5ae1f7f3Szhanghch05 asyncResp->res.jsonValue["@odata.id"] = boost::urls::format( 32*5ae1f7f3Szhanghch05 "/redfish/v1/Chassis/{}/ThermalSubsystem/ThermalMetrics", chassisId); 33*5ae1f7f3Szhanghch05 asyncResp->res.jsonValue["Id"] = "ThermalMetrics"; 34*5ae1f7f3Szhanghch05 asyncResp->res.jsonValue["Name"] = "Thermal Metrics"; 35*5ae1f7f3Szhanghch05 } 36*5ae1f7f3Szhanghch05 37*5ae1f7f3Szhanghch05 inline void handleThermalMetricsHead( 38*5ae1f7f3Szhanghch05 App& app, const crow::Request& req, 39*5ae1f7f3Szhanghch05 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 40*5ae1f7f3Szhanghch05 const std::string& chassisId) 41*5ae1f7f3Szhanghch05 { 42*5ae1f7f3Szhanghch05 if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 43*5ae1f7f3Szhanghch05 { 44*5ae1f7f3Szhanghch05 return; 45*5ae1f7f3Szhanghch05 } 46*5ae1f7f3Szhanghch05 47*5ae1f7f3Szhanghch05 redfish::chassis_utils::getValidChassisPath( 48*5ae1f7f3Szhanghch05 asyncResp, chassisId, 49*5ae1f7f3Szhanghch05 [asyncResp, 50*5ae1f7f3Szhanghch05 chassisId](const std::optional<std::string>& validChassisPath) { 51*5ae1f7f3Szhanghch05 if (!validChassisPath) 52*5ae1f7f3Szhanghch05 { 53*5ae1f7f3Szhanghch05 messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 54*5ae1f7f3Szhanghch05 return; 55*5ae1f7f3Szhanghch05 } 56*5ae1f7f3Szhanghch05 asyncResp->res.addHeader( 57*5ae1f7f3Szhanghch05 boost::beast::http::field::link, 58*5ae1f7f3Szhanghch05 "</redfish/v1/JsonSchemas/ThermalMetrics/ThermalMetrics.json>; rel=describedby"); 59*5ae1f7f3Szhanghch05 }); 60*5ae1f7f3Szhanghch05 } 61*5ae1f7f3Szhanghch05 62*5ae1f7f3Szhanghch05 inline void 63*5ae1f7f3Szhanghch05 handleThermalMetricsGet(App& app, const crow::Request& req, 64*5ae1f7f3Szhanghch05 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 65*5ae1f7f3Szhanghch05 const std::string& chassisId) 66*5ae1f7f3Szhanghch05 { 67*5ae1f7f3Szhanghch05 if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 68*5ae1f7f3Szhanghch05 { 69*5ae1f7f3Szhanghch05 return; 70*5ae1f7f3Szhanghch05 } 71*5ae1f7f3Szhanghch05 72*5ae1f7f3Szhanghch05 redfish::chassis_utils::getValidChassisPath( 73*5ae1f7f3Szhanghch05 asyncResp, chassisId, 74*5ae1f7f3Szhanghch05 std::bind_front(doThermalMetrics, asyncResp, chassisId)); 75*5ae1f7f3Szhanghch05 } 76*5ae1f7f3Szhanghch05 77*5ae1f7f3Szhanghch05 inline void requestRoutesThermalMetrics(App& app) 78*5ae1f7f3Szhanghch05 { 79*5ae1f7f3Szhanghch05 BMCWEB_ROUTE(app, 80*5ae1f7f3Szhanghch05 "/redfish/v1/Chassis/<str>/ThermalSubsystem/ThermalMetrics/") 81*5ae1f7f3Szhanghch05 .privileges(redfish::privileges::headThermalMetrics) 82*5ae1f7f3Szhanghch05 .methods(boost::beast::http::verb::head)( 83*5ae1f7f3Szhanghch05 std::bind_front(handleThermalMetricsHead, std::ref(app))); 84*5ae1f7f3Szhanghch05 85*5ae1f7f3Szhanghch05 BMCWEB_ROUTE(app, 86*5ae1f7f3Szhanghch05 "/redfish/v1/Chassis/<str>/ThermalSubsystem/ThermalMetrics/") 87*5ae1f7f3Szhanghch05 .privileges(redfish::privileges::getThermalMetrics) 88*5ae1f7f3Szhanghch05 .methods(boost::beast::http::verb::get)( 89*5ae1f7f3Szhanghch05 std::bind_front(handleThermalMetricsGet, std::ref(app))); 90*5ae1f7f3Szhanghch05 } 91*5ae1f7f3Szhanghch05 } // namespace redfish 92