15ae1f7f3Szhanghch05 #pragma once 25ae1f7f3Szhanghch05 35ae1f7f3Szhanghch05 #include "app.hpp" 45ae1f7f3Szhanghch05 #include "query.hpp" 55ae1f7f3Szhanghch05 #include "registries/privilege_registry.hpp" 65ae1f7f3Szhanghch05 #include "utils/chassis_utils.hpp" 75ae1f7f3Szhanghch05 85ae1f7f3Szhanghch05 #include <functional> 95ae1f7f3Szhanghch05 #include <memory> 105ae1f7f3Szhanghch05 #include <optional> 115ae1f7f3Szhanghch05 #include <string> 125ae1f7f3Szhanghch05 135ae1f7f3Szhanghch05 namespace redfish 145ae1f7f3Szhanghch05 { 155ae1f7f3Szhanghch05 inline void 165ae1f7f3Szhanghch05 doThermalMetrics(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 175ae1f7f3Szhanghch05 const std::string& chassisId, 185ae1f7f3Szhanghch05 const std::optional<std::string>& validChassisPath) 195ae1f7f3Szhanghch05 { 205ae1f7f3Szhanghch05 if (!validChassisPath) 215ae1f7f3Szhanghch05 { 225ae1f7f3Szhanghch05 messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 235ae1f7f3Szhanghch05 return; 245ae1f7f3Szhanghch05 } 255ae1f7f3Szhanghch05 265ae1f7f3Szhanghch05 asyncResp->res.addHeader( 275ae1f7f3Szhanghch05 boost::beast::http::field::link, 285ae1f7f3Szhanghch05 "</redfish/v1/JsonSchemas/ThermalMetrics/ThermalMetrics.json>; rel=describedby"); 295ae1f7f3Szhanghch05 asyncResp->res.jsonValue["@odata.type"] = 305ae1f7f3Szhanghch05 "#ThermalMetrics.v1_0_1.ThermalMetrics"; 315ae1f7f3Szhanghch05 asyncResp->res.jsonValue["@odata.id"] = boost::urls::format( 325ae1f7f3Szhanghch05 "/redfish/v1/Chassis/{}/ThermalSubsystem/ThermalMetrics", chassisId); 335ae1f7f3Szhanghch05 asyncResp->res.jsonValue["Id"] = "ThermalMetrics"; 345ae1f7f3Szhanghch05 asyncResp->res.jsonValue["Name"] = "Thermal Metrics"; 355ae1f7f3Szhanghch05 } 365ae1f7f3Szhanghch05 375ae1f7f3Szhanghch05 inline void handleThermalMetricsHead( 385ae1f7f3Szhanghch05 App& app, const crow::Request& req, 395ae1f7f3Szhanghch05 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 405ae1f7f3Szhanghch05 const std::string& chassisId) 415ae1f7f3Szhanghch05 { 425ae1f7f3Szhanghch05 if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 435ae1f7f3Szhanghch05 { 445ae1f7f3Szhanghch05 return; 455ae1f7f3Szhanghch05 } 465ae1f7f3Szhanghch05 475ae1f7f3Szhanghch05 redfish::chassis_utils::getValidChassisPath( 485ae1f7f3Szhanghch05 asyncResp, chassisId, 495ae1f7f3Szhanghch05 [asyncResp, 505ae1f7f3Szhanghch05 chassisId](const std::optional<std::string>& validChassisPath) { 515ae1f7f3Szhanghch05 if (!validChassisPath) 525ae1f7f3Szhanghch05 { 53*bd79bce8SPatrick Williams messages::resourceNotFound(asyncResp->res, "Chassis", 54*bd79bce8SPatrick Williams chassisId); 555ae1f7f3Szhanghch05 return; 565ae1f7f3Szhanghch05 } 575ae1f7f3Szhanghch05 asyncResp->res.addHeader( 585ae1f7f3Szhanghch05 boost::beast::http::field::link, 595ae1f7f3Szhanghch05 "</redfish/v1/JsonSchemas/ThermalMetrics/ThermalMetrics.json>; rel=describedby"); 605ae1f7f3Szhanghch05 }); 615ae1f7f3Szhanghch05 } 625ae1f7f3Szhanghch05 635ae1f7f3Szhanghch05 inline void 645ae1f7f3Szhanghch05 handleThermalMetricsGet(App& app, const crow::Request& req, 655ae1f7f3Szhanghch05 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 665ae1f7f3Szhanghch05 const std::string& chassisId) 675ae1f7f3Szhanghch05 { 685ae1f7f3Szhanghch05 if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 695ae1f7f3Szhanghch05 { 705ae1f7f3Szhanghch05 return; 715ae1f7f3Szhanghch05 } 725ae1f7f3Szhanghch05 735ae1f7f3Szhanghch05 redfish::chassis_utils::getValidChassisPath( 745ae1f7f3Szhanghch05 asyncResp, chassisId, 755ae1f7f3Szhanghch05 std::bind_front(doThermalMetrics, asyncResp, chassisId)); 765ae1f7f3Szhanghch05 } 775ae1f7f3Szhanghch05 785ae1f7f3Szhanghch05 inline void requestRoutesThermalMetrics(App& app) 795ae1f7f3Szhanghch05 { 805ae1f7f3Szhanghch05 BMCWEB_ROUTE(app, 815ae1f7f3Szhanghch05 "/redfish/v1/Chassis/<str>/ThermalSubsystem/ThermalMetrics/") 825ae1f7f3Szhanghch05 .privileges(redfish::privileges::headThermalMetrics) 835ae1f7f3Szhanghch05 .methods(boost::beast::http::verb::head)( 845ae1f7f3Szhanghch05 std::bind_front(handleThermalMetricsHead, std::ref(app))); 855ae1f7f3Szhanghch05 865ae1f7f3Szhanghch05 BMCWEB_ROUTE(app, 875ae1f7f3Szhanghch05 "/redfish/v1/Chassis/<str>/ThermalSubsystem/ThermalMetrics/") 885ae1f7f3Szhanghch05 .privileges(redfish::privileges::getThermalMetrics) 895ae1f7f3Szhanghch05 .methods(boost::beast::http::verb::get)( 905ae1f7f3Szhanghch05 std::bind_front(handleThermalMetricsGet, std::ref(app))); 915ae1f7f3Szhanghch05 } 925ae1f7f3Szhanghch05 } // namespace redfish 93