xref: /openbmc/bmcweb/features/redfish/lib/thermal.hpp (revision afc474aef028555fc0a6deb425bdad86f0a34db6)
108777fb0SLewanczyk, Dawid /*
26be832e2SEd Tanous Copyright (c) 2018 Intel Corporation
36be832e2SEd Tanous 
46be832e2SEd Tanous Licensed under the Apache License, Version 2.0 (the "License");
56be832e2SEd Tanous you may not use this file except in compliance with the License.
66be832e2SEd Tanous You may obtain a copy of the License at
76be832e2SEd Tanous 
86be832e2SEd Tanous       http://www.apache.org/licenses/LICENSE-2.0
96be832e2SEd Tanous 
106be832e2SEd Tanous Unless required by applicable law or agreed to in writing, software
116be832e2SEd Tanous distributed under the License is distributed on an "AS IS" BASIS,
126be832e2SEd Tanous WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136be832e2SEd Tanous See the License for the specific language governing permissions and
146be832e2SEd Tanous limitations under the License.
1508777fb0SLewanczyk, Dawid */
1608777fb0SLewanczyk, Dawid #pragma once
1708777fb0SLewanczyk, Dawid 
183ccb3adbSEd Tanous #include "app.hpp"
193ccb3adbSEd Tanous #include "query.hpp"
203ccb3adbSEd Tanous #include "registries/privilege_registry.hpp"
2108777fb0SLewanczyk, Dawid #include "sensors.hpp"
225b90429aSEd Tanous #include "utils/json_utils.hpp"
23c9563608SJanet Adkins #include "utils/sensor_utils.hpp"
2408777fb0SLewanczyk, Dawid 
251abe55efSEd Tanous namespace redfish
261abe55efSEd Tanous {
2708777fb0SLewanczyk, Dawid 
287e860f15SJohn Edward Broadbent inline void requestRoutesThermal(App& app)
291abe55efSEd Tanous {
307e860f15SJohn Edward Broadbent     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Thermal/")
31ed398213SEd Tanous         .privileges(redfish::privileges::getThermal)
327e860f15SJohn Edward Broadbent         .methods(boost::beast::http::verb::get)(
3345ca1b86SEd Tanous             [&app](const crow::Request& req,
347e860f15SJohn Edward Broadbent                    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
357e860f15SJohn Edward Broadbent                    const std::string& chassisName) {
363ba00073SCarson Labrado                 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
3745ca1b86SEd Tanous                 {
3845ca1b86SEd Tanous                     return;
3945ca1b86SEd Tanous                 }
4045ca1b86SEd Tanous 
412474adfaSEd Tanous                 auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
4202da7c5aSEd Tanous                     asyncResp, chassisName, sensors::dbus::thermalPaths,
430c728b42SJanet Adkins                     sensor_utils::chassisSubNodeToString(
440c728b42SJanet Adkins                         sensor_utils::ChassisSubNode::thermalNode));
452474adfaSEd Tanous 
462474adfaSEd Tanous                 // TODO Need to get Chassis Redundancy information.
472474adfaSEd Tanous                 getChassisData(sensorAsyncResp);
487e860f15SJohn Edward Broadbent             });
498d1b46d7Szhanghch05 
507e860f15SJohn Edward Broadbent     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Thermal/")
51ed398213SEd Tanous         .privileges(redfish::privileges::patchThermal)
527e860f15SJohn Edward Broadbent         .methods(boost::beast::http::verb::patch)(
5345ca1b86SEd Tanous             [&app](const crow::Request& req,
547e860f15SJohn Edward Broadbent                    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
557e860f15SJohn Edward Broadbent                    const std::string& chassisName) {
563ba00073SCarson Labrado                 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
5745ca1b86SEd Tanous                 {
5845ca1b86SEd Tanous                     return;
5945ca1b86SEd Tanous                 }
6045ca1b86SEd Tanous 
610885057cSEd Tanous                 std::optional<std::vector<nlohmann::json::object_t>>
620885057cSEd Tanous                     temperatureCollections;
63bd79bce8SPatrick Williams                 std::optional<std::vector<nlohmann::json::object_t>>
64bd79bce8SPatrick Williams                     fanCollections;
65bd79bce8SPatrick Williams                 std::unordered_map<std::string,
66bd79bce8SPatrick Williams                                    std::vector<nlohmann::json::object_t>>
674bb3dc34SCarol Wang                     allCollections;
684bb3dc34SCarol Wang 
698d1b46d7Szhanghch05                 auto sensorsAsyncResp = std::make_shared<SensorsAsyncResp>(
7002da7c5aSEd Tanous                     asyncResp, chassisName, sensors::dbus::thermalPaths,
710c728b42SJanet Adkins                     sensor_utils::chassisSubNodeToString(
720c728b42SJanet Adkins                         sensor_utils::ChassisSubNode::thermalNode));
734bb3dc34SCarol Wang 
74*afc474aeSMyung Bae                 if (!json_util::readJsonPatch( //
75*afc474aeSMyung Bae                         req, sensorsAsyncResp->asyncResp->res, //
76*afc474aeSMyung Bae                         "Fans", fanCollections, //
77*afc474aeSMyung Bae                         "Temperatures", temperatureCollections //
78*afc474aeSMyung Bae                         ))
794bb3dc34SCarol Wang                 {
804bb3dc34SCarol Wang                     return;
814bb3dc34SCarol Wang                 }
824bb3dc34SCarol Wang                 if (!temperatureCollections && !fanCollections)
834bb3dc34SCarol Wang                 {
848d1b46d7Szhanghch05                     messages::resourceNotFound(sensorsAsyncResp->asyncResp->res,
85bd79bce8SPatrick Williams                                                "Thermal",
86bd79bce8SPatrick Williams                                                "Temperatures / Voltages");
874bb3dc34SCarol Wang                     return;
884bb3dc34SCarol Wang                 }
894bb3dc34SCarol Wang                 if (temperatureCollections)
904bb3dc34SCarol Wang                 {
914bb3dc34SCarol Wang                     allCollections.emplace("Temperatures",
924bb3dc34SCarol Wang                                            *std::move(temperatureCollections));
934bb3dc34SCarol Wang                 }
944bb3dc34SCarol Wang                 if (fanCollections)
954bb3dc34SCarol Wang                 {
964bb3dc34SCarol Wang                     allCollections.emplace("Fans", *std::move(fanCollections));
974bb3dc34SCarol Wang                 }
9880ac4024SBruce Lee                 setSensorsOverride(sensorsAsyncResp, allCollections);
997e860f15SJohn Edward Broadbent             });
100413961deSRichard Marian Thomaiyar }
10108777fb0SLewanczyk, Dawid 
10208777fb0SLewanczyk, Dawid } // namespace redfish
103