140e9b92eSEd Tanous // SPDX-License-Identifier: Apache-2.0 240e9b92eSEd Tanous // SPDX-FileCopyrightText: Copyright OpenBMC Authors 34ca3ec3cSAlbert Zhang #pragma once 44ca3ec3cSAlbert Zhang 54ca3ec3cSAlbert Zhang #include "app.hpp" 6*d7857201SEd Tanous #include "async_resp.hpp" 7*d7857201SEd Tanous #include "error_messages.hpp" 8*d7857201SEd Tanous #include "http_request.hpp" 93ccb3adbSEd Tanous #include "query.hpp" 103ccb3adbSEd Tanous #include "registries/privilege_registry.hpp" 114ca3ec3cSAlbert Zhang #include "utils/chassis_utils.hpp" 124ca3ec3cSAlbert Zhang 13*d7857201SEd Tanous #include <boost/beast/http/field.hpp> 14*d7857201SEd Tanous #include <boost/beast/http/verb.hpp> 15ef4c65b7SEd Tanous #include <boost/url/format.hpp> 16ef4c65b7SEd Tanous 17*d7857201SEd Tanous #include <functional> 184ca3ec3cSAlbert Zhang #include <memory> 194ca3ec3cSAlbert Zhang #include <optional> 204ca3ec3cSAlbert Zhang #include <string> 21*d7857201SEd Tanous #include <utility> 224ca3ec3cSAlbert Zhang 234ca3ec3cSAlbert Zhang namespace redfish 244ca3ec3cSAlbert Zhang { 254ca3ec3cSAlbert Zhang 264ca3ec3cSAlbert Zhang inline void handleEnvironmentMetricsHead( 274ca3ec3cSAlbert Zhang App& app, const crow::Request& req, 284ca3ec3cSAlbert Zhang const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 294ca3ec3cSAlbert Zhang const std::string& chassisId) 304ca3ec3cSAlbert Zhang { 314ca3ec3cSAlbert Zhang if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 324ca3ec3cSAlbert Zhang { 334ca3ec3cSAlbert Zhang return; 344ca3ec3cSAlbert Zhang } 354ca3ec3cSAlbert Zhang 364ca3ec3cSAlbert Zhang auto respHandler = [asyncResp, chassisId]( 374ca3ec3cSAlbert Zhang const std::optional<std::string>& validChassisPath) { 384ca3ec3cSAlbert Zhang if (!validChassisPath) 394ca3ec3cSAlbert Zhang { 404ca3ec3cSAlbert Zhang messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 414ca3ec3cSAlbert Zhang return; 424ca3ec3cSAlbert Zhang } 434ca3ec3cSAlbert Zhang 444ca3ec3cSAlbert Zhang asyncResp->res.addHeader( 454ca3ec3cSAlbert Zhang boost::beast::http::field::link, 464ca3ec3cSAlbert Zhang "</redfish/v1/JsonSchemas/EnvironmentMetrics/EnvironmentMetrics.json>; rel=describedby"); 474ca3ec3cSAlbert Zhang }; 484ca3ec3cSAlbert Zhang 494ca3ec3cSAlbert Zhang redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId, 504ca3ec3cSAlbert Zhang std::move(respHandler)); 514ca3ec3cSAlbert Zhang } 524ca3ec3cSAlbert Zhang 534ca3ec3cSAlbert Zhang inline void handleEnvironmentMetricsGet( 544ca3ec3cSAlbert Zhang App& app, const crow::Request& req, 554ca3ec3cSAlbert Zhang const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 564ca3ec3cSAlbert Zhang const std::string& chassisId) 574ca3ec3cSAlbert Zhang { 584ca3ec3cSAlbert Zhang if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 594ca3ec3cSAlbert Zhang { 604ca3ec3cSAlbert Zhang return; 614ca3ec3cSAlbert Zhang } 624ca3ec3cSAlbert Zhang 634ca3ec3cSAlbert Zhang auto respHandler = [asyncResp, chassisId]( 644ca3ec3cSAlbert Zhang const std::optional<std::string>& validChassisPath) { 654ca3ec3cSAlbert Zhang if (!validChassisPath) 664ca3ec3cSAlbert Zhang { 674ca3ec3cSAlbert Zhang messages::resourceNotFound(asyncResp->res, "Chassis", chassisId); 684ca3ec3cSAlbert Zhang return; 694ca3ec3cSAlbert Zhang } 704ca3ec3cSAlbert Zhang 714ca3ec3cSAlbert Zhang asyncResp->res.addHeader( 724ca3ec3cSAlbert Zhang boost::beast::http::field::link, 734ca3ec3cSAlbert Zhang "</redfish/v1/JsonSchemas/EnvironmentMetrics/EnvironmentMetrics.json>; rel=describedby"); 744ca3ec3cSAlbert Zhang asyncResp->res.jsonValue["@odata.type"] = 754ca3ec3cSAlbert Zhang "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics"; 764ca3ec3cSAlbert Zhang asyncResp->res.jsonValue["Name"] = "Chassis Environment Metrics"; 774ca3ec3cSAlbert Zhang asyncResp->res.jsonValue["Id"] = "EnvironmentMetrics"; 78ef4c65b7SEd Tanous asyncResp->res.jsonValue["@odata.id"] = boost::urls::format( 79ef4c65b7SEd Tanous "/redfish/v1/Chassis/{}/EnvironmentMetrics", chassisId); 804ca3ec3cSAlbert Zhang }; 814ca3ec3cSAlbert Zhang 824ca3ec3cSAlbert Zhang redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId, 834ca3ec3cSAlbert Zhang std::move(respHandler)); 844ca3ec3cSAlbert Zhang } 854ca3ec3cSAlbert Zhang 864ca3ec3cSAlbert Zhang inline void requestRoutesEnvironmentMetrics(App& app) 874ca3ec3cSAlbert Zhang { 884ca3ec3cSAlbert Zhang BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/EnvironmentMetrics/") 894ca3ec3cSAlbert Zhang .privileges(redfish::privileges::headEnvironmentMetrics) 904ca3ec3cSAlbert Zhang .methods(boost::beast::http::verb::head)( 914ca3ec3cSAlbert Zhang std::bind_front(handleEnvironmentMetricsHead, std::ref(app))); 924ca3ec3cSAlbert Zhang 934ca3ec3cSAlbert Zhang BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/EnvironmentMetrics/") 944ca3ec3cSAlbert Zhang .privileges(redfish::privileges::getEnvironmentMetrics) 954ca3ec3cSAlbert Zhang .methods(boost::beast::http::verb::get)( 964ca3ec3cSAlbert Zhang std::bind_front(handleEnvironmentMetricsGet, std::ref(app))); 974ca3ec3cSAlbert Zhang } 984ca3ec3cSAlbert Zhang 994ca3ec3cSAlbert Zhang } // namespace redfish 100