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