xref: /openbmc/bmcweb/features/redfish/lib/environment_metrics.hpp (revision 3ccb3adb9a14783f6bef601506de9f8bcae22d51)
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