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