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