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