blob: 90a7b85b1ba814d6b63871463cbc64d02f10aa66 [file] [log] [blame]
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +01001/*
2// Copyright (c) 2018 Intel Corporation
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15*/
16#pragma once
17
Ed Tanous3ccb3ad2023-01-13 17:40:03 -080018#include "app.hpp"
19#include "query.hpp"
20#include "registries/privilege_registry.hpp"
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +010021#include "sensors.hpp"
Ed Tanous5b904292024-04-16 11:10:17 -070022#include "utils/json_utils.hpp"
Janet Adkinsc9563602024-08-28 11:37:46 -050023#include "utils/sensor_utils.hpp"
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +010024
Ed Tanous1abe55e2018-09-05 08:30:59 -070025namespace redfish
26{
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +010027
John Edward Broadbent7e860f12021-04-08 15:57:16 -070028inline void requestRoutesThermal(App& app)
Ed Tanous1abe55e2018-09-05 08:30:59 -070029{
John Edward Broadbent7e860f12021-04-08 15:57:16 -070030 BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Thermal/")
Ed Tanoused398212021-06-09 17:05:54 -070031 .privileges(redfish::privileges::getThermal)
John Edward Broadbent7e860f12021-04-08 15:57:16 -070032 .methods(boost::beast::http::verb::get)(
Ed Tanous45ca1b82022-03-25 13:07:27 -070033 [&app](const crow::Request& req,
34 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
35 const std::string& chassisName) {
Patrick Williamsbd79bce2024-08-16 15:22:20 -040036 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
37 {
38 return;
39 }
Ed Tanous45ca1b82022-03-25 13:07:27 -070040
Patrick Williamsbd79bce2024-08-16 15:22:20 -040041 auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
42 asyncResp, chassisName, sensors::dbus::thermalPaths,
Janet Adkinsc9563602024-08-28 11:37:46 -050043 sensor_utils::thermalNode);
zhanghch058d1b46d2021-04-01 11:18:24 +080044
Patrick Williamsbd79bce2024-08-16 15:22:20 -040045 // TODO Need to get Chassis Redundancy information.
46 getChassisData(sensorAsyncResp);
47 });
Krzysztof Grobelny1b1be672021-05-07 10:13:15 +000048
John Edward Broadbent7e860f12021-04-08 15:57:16 -070049 BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Thermal/")
Ed Tanoused398212021-06-09 17:05:54 -070050 .privileges(redfish::privileges::patchThermal)
John Edward Broadbent7e860f12021-04-08 15:57:16 -070051 .methods(boost::beast::http::verb::patch)(
Ed Tanous45ca1b82022-03-25 13:07:27 -070052 [&app](const crow::Request& req,
53 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
54 const std::string& chassisName) {
Patrick Williamsbd79bce2024-08-16 15:22:20 -040055 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
56 {
57 return;
58 }
Ed Tanous45ca1b82022-03-25 13:07:27 -070059
Patrick Williamsbd79bce2024-08-16 15:22:20 -040060 std::optional<std::vector<nlohmann::json::object_t>>
61 temperatureCollections;
62 std::optional<std::vector<nlohmann::json::object_t>>
63 fanCollections;
64 std::unordered_map<std::string,
65 std::vector<nlohmann::json::object_t>>
66 allCollections;
Ed Tanous2474adf2018-09-05 16:31:16 -070067
Patrick Williamsbd79bce2024-08-16 15:22:20 -040068 auto sensorsAsyncResp = std::make_shared<SensorsAsyncResp>(
69 asyncResp, chassisName, sensors::dbus::thermalPaths,
Janet Adkinsc9563602024-08-28 11:37:46 -050070 sensor_utils::thermalNode);
zhanghch058d1b46d2021-04-01 11:18:24 +080071
Patrick Williamsbd79bce2024-08-16 15:22:20 -040072 if (!json_util::readJsonPatch(
73 req, sensorsAsyncResp->asyncResp->res, "Temperatures",
74 temperatureCollections, "Fans", fanCollections))
75 {
76 return;
77 }
78 if (!temperatureCollections && !fanCollections)
79 {
80 messages::resourceNotFound(sensorsAsyncResp->asyncResp->res,
81 "Thermal",
82 "Temperatures / Voltages");
83 return;
84 }
85 if (temperatureCollections)
86 {
87 allCollections.emplace("Temperatures",
88 *std::move(temperatureCollections));
89 }
90 if (fanCollections)
91 {
92 allCollections.emplace("Fans", *std::move(fanCollections));
93 }
94 setSensorsOverride(sensorsAsyncResp, allCollections);
95 });
John Edward Broadbent7e860f12021-04-08 15:57:16 -070096}
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +010097
Ed Tanous1abe55e2018-09-05 08:30:59 -070098} // namespace redfish