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