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