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