xref: /openbmc/bmcweb/features/redfish/lib/environment_metrics.hpp (revision 4ca3ec3c54d1d74fcd2b76c594be08fbba3774f1)
1*4ca3ec3cSAlbert Zhang #pragma once
2*4ca3ec3cSAlbert Zhang 
3*4ca3ec3cSAlbert Zhang #include "app.hpp"
4*4ca3ec3cSAlbert Zhang #include "utils/chassis_utils.hpp"
5*4ca3ec3cSAlbert Zhang 
6*4ca3ec3cSAlbert Zhang #include <memory>
7*4ca3ec3cSAlbert Zhang #include <optional>
8*4ca3ec3cSAlbert Zhang #include <string>
9*4ca3ec3cSAlbert Zhang 
10*4ca3ec3cSAlbert Zhang namespace redfish
11*4ca3ec3cSAlbert Zhang {
12*4ca3ec3cSAlbert Zhang 
13*4ca3ec3cSAlbert Zhang inline void handleEnvironmentMetricsHead(
14*4ca3ec3cSAlbert Zhang     App& app, const crow::Request& req,
15*4ca3ec3cSAlbert Zhang     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
16*4ca3ec3cSAlbert Zhang     const std::string& chassisId)
17*4ca3ec3cSAlbert Zhang {
18*4ca3ec3cSAlbert Zhang     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
19*4ca3ec3cSAlbert Zhang     {
20*4ca3ec3cSAlbert Zhang         return;
21*4ca3ec3cSAlbert Zhang     }
22*4ca3ec3cSAlbert Zhang 
23*4ca3ec3cSAlbert Zhang     auto respHandler = [asyncResp, chassisId](
24*4ca3ec3cSAlbert Zhang                            const std::optional<std::string>& validChassisPath) {
25*4ca3ec3cSAlbert Zhang         if (!validChassisPath)
26*4ca3ec3cSAlbert Zhang         {
27*4ca3ec3cSAlbert Zhang             messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
28*4ca3ec3cSAlbert Zhang             return;
29*4ca3ec3cSAlbert Zhang         }
30*4ca3ec3cSAlbert Zhang 
31*4ca3ec3cSAlbert Zhang         asyncResp->res.addHeader(
32*4ca3ec3cSAlbert Zhang             boost::beast::http::field::link,
33*4ca3ec3cSAlbert Zhang             "</redfish/v1/JsonSchemas/EnvironmentMetrics/EnvironmentMetrics.json>; rel=describedby");
34*4ca3ec3cSAlbert Zhang     };
35*4ca3ec3cSAlbert Zhang 
36*4ca3ec3cSAlbert Zhang     redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId,
37*4ca3ec3cSAlbert Zhang                                                 std::move(respHandler));
38*4ca3ec3cSAlbert Zhang }
39*4ca3ec3cSAlbert Zhang 
40*4ca3ec3cSAlbert Zhang inline void handleEnvironmentMetricsGet(
41*4ca3ec3cSAlbert Zhang     App& app, const crow::Request& req,
42*4ca3ec3cSAlbert Zhang     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
43*4ca3ec3cSAlbert Zhang     const std::string& chassisId)
44*4ca3ec3cSAlbert Zhang {
45*4ca3ec3cSAlbert Zhang     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
46*4ca3ec3cSAlbert Zhang     {
47*4ca3ec3cSAlbert Zhang         return;
48*4ca3ec3cSAlbert Zhang     }
49*4ca3ec3cSAlbert Zhang 
50*4ca3ec3cSAlbert Zhang     auto respHandler = [asyncResp, chassisId](
51*4ca3ec3cSAlbert Zhang                            const std::optional<std::string>& validChassisPath) {
52*4ca3ec3cSAlbert Zhang         if (!validChassisPath)
53*4ca3ec3cSAlbert Zhang         {
54*4ca3ec3cSAlbert Zhang             messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
55*4ca3ec3cSAlbert Zhang             return;
56*4ca3ec3cSAlbert Zhang         }
57*4ca3ec3cSAlbert Zhang 
58*4ca3ec3cSAlbert Zhang         asyncResp->res.addHeader(
59*4ca3ec3cSAlbert Zhang             boost::beast::http::field::link,
60*4ca3ec3cSAlbert Zhang             "</redfish/v1/JsonSchemas/EnvironmentMetrics/EnvironmentMetrics.json>; rel=describedby");
61*4ca3ec3cSAlbert Zhang         asyncResp->res.jsonValue["@odata.type"] =
62*4ca3ec3cSAlbert Zhang             "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics";
63*4ca3ec3cSAlbert Zhang         asyncResp->res.jsonValue["Name"] = "Chassis Environment Metrics";
64*4ca3ec3cSAlbert Zhang         asyncResp->res.jsonValue["Id"] = "EnvironmentMetrics";
65*4ca3ec3cSAlbert Zhang         asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
66*4ca3ec3cSAlbert Zhang             "redfish", "v1", "Chassis", chassisId, "EnvironmentMetrics");
67*4ca3ec3cSAlbert Zhang     };
68*4ca3ec3cSAlbert Zhang 
69*4ca3ec3cSAlbert Zhang     redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId,
70*4ca3ec3cSAlbert Zhang                                                 std::move(respHandler));
71*4ca3ec3cSAlbert Zhang }
72*4ca3ec3cSAlbert Zhang 
73*4ca3ec3cSAlbert Zhang inline void requestRoutesEnvironmentMetrics(App& app)
74*4ca3ec3cSAlbert Zhang {
75*4ca3ec3cSAlbert Zhang     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/EnvironmentMetrics/")
76*4ca3ec3cSAlbert Zhang         .privileges(redfish::privileges::headEnvironmentMetrics)
77*4ca3ec3cSAlbert Zhang         .methods(boost::beast::http::verb::head)(
78*4ca3ec3cSAlbert Zhang             std::bind_front(handleEnvironmentMetricsHead, std::ref(app)));
79*4ca3ec3cSAlbert Zhang 
80*4ca3ec3cSAlbert Zhang     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/EnvironmentMetrics/")
81*4ca3ec3cSAlbert Zhang         .privileges(redfish::privileges::getEnvironmentMetrics)
82*4ca3ec3cSAlbert Zhang         .methods(boost::beast::http::verb::get)(
83*4ca3ec3cSAlbert Zhang             std::bind_front(handleEnvironmentMetricsGet, std::ref(app)));
84*4ca3ec3cSAlbert Zhang }
85*4ca3ec3cSAlbert Zhang 
86*4ca3ec3cSAlbert Zhang } // namespace redfish
87