blob: 92e623eaa708ff01b25a7313c406e9501d13fda7 [file] [log] [blame]
Xiaochao Ma29739632021-03-02 15:53:13 +08001#pragma once
2
3#include "app.hpp"
Nan Zhouce05f6c2022-11-09 21:41:18 +00004#include "logging.hpp"
Xiaochao Ma29739632021-03-02 15:53:13 +08005#include "query.hpp"
6#include "registries/privilege_registry.hpp"
7#include "utils/chassis_utils.hpp"
8#include "utils/json_utils.hpp"
9
Ed Tanousef4c65b2023-04-24 15:28:50 -070010#include <boost/url/format.hpp>
11
Nan Zhouce05f6c2022-11-09 21:41:18 +000012#include <optional>
13#include <string>
14
Xiaochao Ma29739632021-03-02 15:53:13 +080015namespace redfish
16{
17
18inline void doThermalSubsystemCollection(
19 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
20 const std::string& chassisId,
21 const std::optional<std::string>& validChassisPath)
22{
23 if (!validChassisPath)
24 {
Ed Tanous62598e32023-07-17 17:06:25 -070025 BMCWEB_LOG_WARNING("Not a valid chassis ID{}", chassisId);
Xiaochao Ma29739632021-03-02 15:53:13 +080026 messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
27 return;
28 }
George Liu1aee7512022-11-16 11:12:21 +080029
30 asyncResp->res.addHeader(
31 boost::beast::http::field::link,
32 "</redfish/v1/JsonSchemas/ThermalSubsystem/ThermalSubsystem.json>; rel=describedby");
Xiaochao Ma29739632021-03-02 15:53:13 +080033 asyncResp->res.jsonValue["@odata.type"] =
34 "#ThermalSubsystem.v1_0_0.ThermalSubsystem";
35 asyncResp->res.jsonValue["Name"] = "Thermal Subsystem";
36 asyncResp->res.jsonValue["Id"] = "ThermalSubsystem";
37
Ed Tanousef4c65b2023-04-24 15:28:50 -070038 asyncResp->res.jsonValue["@odata.id"] = boost::urls::format(
39 "/redfish/v1/Chassis/{}/ThermalSubsystem", chassisId);
Xiaochao Ma29739632021-03-02 15:53:13 +080040
George Liu9516f412022-09-29 17:21:41 +080041 asyncResp->res.jsonValue["Fans"]["@odata.id"] = boost::urls::format(
42 "/redfish/v1/Chassis/{}/ThermalSubsystem/Fans", chassisId);
43
Xiaochao Ma29739632021-03-02 15:53:13 +080044 asyncResp->res.jsonValue["Status"]["State"] = "Enabled";
45 asyncResp->res.jsonValue["Status"]["Health"] = "OK";
46}
47
George Liu1aee7512022-11-16 11:12:21 +080048inline void handleThermalSubsystemCollectionHead(
Xiaochao Ma29739632021-03-02 15:53:13 +080049 App& app, const crow::Request& req,
50 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
George Liu1aee7512022-11-16 11:12:21 +080051 const std::string& chassisId)
Xiaochao Ma29739632021-03-02 15:53:13 +080052{
53 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
54 {
55 return;
56 }
George Liu1aee7512022-11-16 11:12:21 +080057
58 auto respHandler = [asyncResp, chassisId](
59 const std::optional<std::string>& validChassisPath) {
60 if (!validChassisPath)
61 {
62 messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
63 return;
64 }
65 asyncResp->res.addHeader(
66 boost::beast::http::field::link,
67 "</redfish/v1/JsonSchemas/ThermalSubsystem/ThermalSubsystem.json>; rel=describedby");
68 };
69 redfish::chassis_utils::getValidChassisPath(asyncResp, chassisId,
70 std::bind_front(respHandler));
71}
72
73inline void handleThermalSubsystemCollectionGet(
74 App& app, const crow::Request& req,
75 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
76 const std::string& chassisId)
77{
78 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
79 {
80 return;
81 }
Xiaochao Ma29739632021-03-02 15:53:13 +080082
83 redfish::chassis_utils::getValidChassisPath(
84 asyncResp, chassisId,
85 std::bind_front(doThermalSubsystemCollection, asyncResp, chassisId));
86}
87
88inline void requestRoutesThermalSubsystem(App& app)
89{
90 BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/ThermalSubsystem/")
George Liu1aee7512022-11-16 11:12:21 +080091 .privileges(redfish::privileges::headThermalSubsystem)
92 .methods(boost::beast::http::verb::head)(std::bind_front(
93 handleThermalSubsystemCollectionHead, std::ref(app)));
94
95 BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/ThermalSubsystem/")
Xiaochao Ma29739632021-03-02 15:53:13 +080096 .privileges(redfish::privileges::getThermalSubsystem)
97 .methods(boost::beast::http::verb::get)(std::bind_front(
98 handleThermalSubsystemCollectionGet, std::ref(app)));
99}
100
101} // namespace redfish