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