14ca3ec3cSAlbert Zhang #pragma once 24ca3ec3cSAlbert Zhang 34ca3ec3cSAlbert Zhang #include "app.hpp" 4*3ccb3adbSEd Tanous #include "query.hpp" 5*3ccb3adbSEd Tanous #include "registries/privilege_registry.hpp" 64ca3ec3cSAlbert Zhang #include "utils/chassis_utils.hpp" 74ca3ec3cSAlbert Zhang 84ca3ec3cSAlbert Zhang #include <memory> 94ca3ec3cSAlbert Zhang #include <optional> 104ca3ec3cSAlbert Zhang #include <string> 114ca3ec3cSAlbert Zhang 124ca3ec3cSAlbert Zhang namespace redfish 134ca3ec3cSAlbert Zhang { 144ca3ec3cSAlbert Zhang 154ca3ec3cSAlbert Zhang inline void handleEnvironmentMetricsHead( 164ca3ec3cSAlbert Zhang App& app, const crow::Request& req, 174ca3ec3cSAlbert Zhang const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 184ca3ec3cSAlbert Zhang const std::string& chassisId) 194ca3ec3cSAlbert Zhang { 204ca3ec3cSAlbert Zhang if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 214ca3ec3cSAlbert Zhang { 224ca3ec3cSAlbert Zhang return; 234ca3ec3cSAlbert Zhang } 244ca3ec3cSAlbert Zhang 254ca3ec3cSAlbert Zhang auto respHandler = [asyncResp, chassisId]( 264ca3ec3cSAlbert Zhang const std::optional<std::string>& validChassisPath) { 274ca3ec3cSAlbert Zhang if (!validChassisPath) 284ca3ec3cSAlbert Zhang { 294ca3ec3cSAlbert Zhang messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 304ca3ec3cSAlbert Zhang return; 314ca3ec3cSAlbert Zhang } 324ca3ec3cSAlbert Zhang 334ca3ec3cSAlbert Zhang asyncResp->res.addHeader( 344ca3ec3cSAlbert Zhang boost::beast::http::field::link, 354ca3ec3cSAlbert Zhang "</redfish/v1/JsonSchemas/EnvironmentMetrics/EnvironmentMetrics.json>; rel=describedby"); 364ca3ec3cSAlbert Zhang }; 374ca3ec3cSAlbert Zhang 384ca3ec3cSAlbert Zhang redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId, 394ca3ec3cSAlbert Zhang std::move(respHandler)); 404ca3ec3cSAlbert Zhang } 414ca3ec3cSAlbert Zhang 424ca3ec3cSAlbert Zhang inline void handleEnvironmentMetricsGet( 434ca3ec3cSAlbert Zhang App& app, const crow::Request& req, 444ca3ec3cSAlbert Zhang const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 454ca3ec3cSAlbert Zhang const std::string& chassisId) 464ca3ec3cSAlbert Zhang { 474ca3ec3cSAlbert Zhang if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 484ca3ec3cSAlbert Zhang { 494ca3ec3cSAlbert Zhang return; 504ca3ec3cSAlbert Zhang } 514ca3ec3cSAlbert Zhang 524ca3ec3cSAlbert Zhang auto respHandler = [asyncResp, chassisId]( 534ca3ec3cSAlbert Zhang const std::optional<std::string>& validChassisPath) { 544ca3ec3cSAlbert Zhang if (!validChassisPath) 554ca3ec3cSAlbert Zhang { 564ca3ec3cSAlbert Zhang messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 574ca3ec3cSAlbert Zhang return; 584ca3ec3cSAlbert Zhang } 594ca3ec3cSAlbert Zhang 604ca3ec3cSAlbert Zhang asyncResp->res.addHeader( 614ca3ec3cSAlbert Zhang boost::beast::http::field::link, 624ca3ec3cSAlbert Zhang "</redfish/v1/JsonSchemas/EnvironmentMetrics/EnvironmentMetrics.json>; rel=describedby"); 634ca3ec3cSAlbert Zhang asyncResp->res.jsonValue["@odata.type"] = 644ca3ec3cSAlbert Zhang "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics"; 654ca3ec3cSAlbert Zhang asyncResp->res.jsonValue["Name"] = "Chassis Environment Metrics"; 664ca3ec3cSAlbert Zhang asyncResp->res.jsonValue["Id"] = "EnvironmentMetrics"; 674ca3ec3cSAlbert Zhang asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces( 684ca3ec3cSAlbert Zhang "redfish", "v1", "Chassis", chassisId, "EnvironmentMetrics"); 694ca3ec3cSAlbert Zhang }; 704ca3ec3cSAlbert Zhang 714ca3ec3cSAlbert Zhang redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId, 724ca3ec3cSAlbert Zhang std::move(respHandler)); 734ca3ec3cSAlbert Zhang } 744ca3ec3cSAlbert Zhang 754ca3ec3cSAlbert Zhang inline void requestRoutesEnvironmentMetrics(App& app) 764ca3ec3cSAlbert Zhang { 774ca3ec3cSAlbert Zhang BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/EnvironmentMetrics/") 784ca3ec3cSAlbert Zhang .privileges(redfish::privileges::headEnvironmentMetrics) 794ca3ec3cSAlbert Zhang .methods(boost::beast::http::verb::head)( 804ca3ec3cSAlbert Zhang std::bind_front(handleEnvironmentMetricsHead, std::ref(app))); 814ca3ec3cSAlbert Zhang 824ca3ec3cSAlbert Zhang BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/EnvironmentMetrics/") 834ca3ec3cSAlbert Zhang .privileges(redfish::privileges::getEnvironmentMetrics) 844ca3ec3cSAlbert Zhang .methods(boost::beast::http::verb::get)( 854ca3ec3cSAlbert Zhang std::bind_front(handleEnvironmentMetricsGet, std::ref(app))); 864ca3ec3cSAlbert Zhang } 874ca3ec3cSAlbert Zhang 884ca3ec3cSAlbert Zhang } // namespace redfish 89