108777fb0SLewanczyk, Dawid /* 208777fb0SLewanczyk, Dawid // Copyright (c) 2018 Intel Corporation 308777fb0SLewanczyk, Dawid // 408777fb0SLewanczyk, Dawid // Licensed under the Apache License, Version 2.0 (the "License"); 508777fb0SLewanczyk, Dawid // you may not use this file except in compliance with the License. 608777fb0SLewanczyk, Dawid // You may obtain a copy of the License at 708777fb0SLewanczyk, Dawid // 808777fb0SLewanczyk, Dawid // http://www.apache.org/licenses/LICENSE-2.0 908777fb0SLewanczyk, Dawid // 1008777fb0SLewanczyk, Dawid // Unless required by applicable law or agreed to in writing, software 1108777fb0SLewanczyk, Dawid // distributed under the License is distributed on an "AS IS" BASIS, 1208777fb0SLewanczyk, Dawid // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1308777fb0SLewanczyk, Dawid // See the License for the specific language governing permissions and 1408777fb0SLewanczyk, Dawid // limitations under the License. 1508777fb0SLewanczyk, Dawid */ 1608777fb0SLewanczyk, Dawid #pragma once 1708777fb0SLewanczyk, Dawid 1808777fb0SLewanczyk, Dawid #include "sensors.hpp" 1908777fb0SLewanczyk, Dawid 207e860f15SJohn Edward Broadbent #include <app.hpp> 2145ca1b86SEd Tanous #include <query.hpp> 22ed398213SEd Tanous #include <registries/privilege_registry.hpp> 237e860f15SJohn Edward Broadbent 241abe55efSEd Tanous namespace redfish 251abe55efSEd Tanous { 2608777fb0SLewanczyk, Dawid 277e860f15SJohn Edward Broadbent inline void requestRoutesThermal(App& app) 281abe55efSEd Tanous { 297e860f15SJohn Edward Broadbent BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Thermal/") 30ed398213SEd Tanous .privileges(redfish::privileges::getThermal) 317e860f15SJohn Edward Broadbent .methods(boost::beast::http::verb::get)( 3245ca1b86SEd Tanous [&app](const crow::Request& req, 337e860f15SJohn Edward Broadbent const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 347e860f15SJohn Edward Broadbent const std::string& chassisName) { 3545ca1b86SEd Tanous if (!redfish::setUpRedfishRoute(app, req, asyncResp->res)) 3645ca1b86SEd Tanous { 3745ca1b86SEd Tanous return; 3845ca1b86SEd Tanous } 3945ca1b86SEd Tanous 402474adfaSEd Tanous auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>( 41*02da7c5aSEd Tanous asyncResp, chassisName, sensors::dbus::thermalPaths, 42a0ec28b6SAdrian Ambrożewicz sensors::node::thermal); 432474adfaSEd Tanous 442474adfaSEd Tanous // TODO Need to get Chassis Redundancy information. 452474adfaSEd Tanous getChassisData(sensorAsyncResp); 467e860f15SJohn Edward Broadbent }); 478d1b46d7Szhanghch05 487e860f15SJohn Edward Broadbent BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Thermal/") 49ed398213SEd Tanous .privileges(redfish::privileges::patchThermal) 507e860f15SJohn Edward Broadbent .methods(boost::beast::http::verb::patch)( 5145ca1b86SEd Tanous [&app](const crow::Request& req, 527e860f15SJohn Edward Broadbent const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 537e860f15SJohn Edward Broadbent const std::string& chassisName) { 5445ca1b86SEd Tanous if (!redfish::setUpRedfishRoute(app, req, asyncResp->res)) 5545ca1b86SEd Tanous { 5645ca1b86SEd Tanous return; 5745ca1b86SEd Tanous } 5845ca1b86SEd Tanous 597e860f15SJohn Edward Broadbent std::optional<std::vector<nlohmann::json>> 607e860f15SJohn Edward Broadbent temperatureCollections; 614bb3dc34SCarol Wang std::optional<std::vector<nlohmann::json>> fanCollections; 624bb3dc34SCarol Wang std::unordered_map<std::string, std::vector<nlohmann::json>> 634bb3dc34SCarol Wang allCollections; 644bb3dc34SCarol Wang 658d1b46d7Szhanghch05 auto sensorsAsyncResp = std::make_shared<SensorsAsyncResp>( 66*02da7c5aSEd Tanous asyncResp, chassisName, sensors::dbus::thermalPaths, 67a0ec28b6SAdrian Ambrożewicz sensors::node::thermal); 684bb3dc34SCarol Wang 6915ed6780SWilly Tu if (!json_util::readJsonPatch( 7015ed6780SWilly Tu req, sensorsAsyncResp->asyncResp->res, "Temperatures", 7115ed6780SWilly Tu temperatureCollections, "Fans", fanCollections)) 724bb3dc34SCarol Wang { 734bb3dc34SCarol Wang return; 744bb3dc34SCarol Wang } 754bb3dc34SCarol Wang if (!temperatureCollections && !fanCollections) 764bb3dc34SCarol Wang { 778d1b46d7Szhanghch05 messages::resourceNotFound(sensorsAsyncResp->asyncResp->res, 787e860f15SJohn Edward Broadbent "Thermal", 797e860f15SJohn Edward Broadbent "Temperatures / Voltages"); 804bb3dc34SCarol Wang return; 814bb3dc34SCarol Wang } 824bb3dc34SCarol Wang if (temperatureCollections) 834bb3dc34SCarol Wang { 844bb3dc34SCarol Wang allCollections.emplace("Temperatures", 854bb3dc34SCarol Wang *std::move(temperatureCollections)); 864bb3dc34SCarol Wang } 874bb3dc34SCarol Wang if (fanCollections) 884bb3dc34SCarol Wang { 894bb3dc34SCarol Wang allCollections.emplace("Fans", *std::move(fanCollections)); 904bb3dc34SCarol Wang } 9180ac4024SBruce Lee setSensorsOverride(sensorsAsyncResp, allCollections); 927e860f15SJohn Edward Broadbent }); 93413961deSRichard Marian Thomaiyar } 9408777fb0SLewanczyk, Dawid 9508777fb0SLewanczyk, Dawid } // namespace redfish 96