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