blob: 3ab9e441ad048c971594b0df9dfe70b30a7363e4 [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
18#include "node.hpp"
19#include "sensors.hpp"
20
Ed Tanous1abe55e2018-09-05 08:30:59 -070021namespace redfish
22{
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +010023
Ed Tanous1abe55e2018-09-05 08:30:59 -070024class Thermal : public Node
25{
26 public:
27 Thermal(CrowApp& app) :
28 Node((app), "/redfish/v1/Chassis/<str>/Thermal/", std::string())
29 {
Ed Tanous1abe55e2018-09-05 08:30:59 -070030 entityPrivileges = {
31 {boost::beast::http::verb::get, {{"Login"}}},
32 {boost::beast::http::verb::head, {{"Login"}}},
Richard Marian Thomaiyar6f4fd472019-02-13 10:10:59 +053033 {boost::beast::http::verb::patch, {{"ConfigureComponents"}}},
Ed Tanous1abe55e2018-09-05 08:30:59 -070034 {boost::beast::http::verb::put, {{"ConfigureManager"}}},
35 {boost::beast::http::verb::delete_, {{"ConfigureManager"}}},
36 {boost::beast::http::verb::post, {{"ConfigureManager"}}}};
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +010037 }
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +010038
Ed Tanous1abe55e2018-09-05 08:30:59 -070039 private:
Ed Tanous85e14242019-06-27 15:04:09 -070040 std::vector<const char*> typeList = {
Richard Marian Thomaiyar8afa1b92019-02-13 06:02:39 +053041 "/xyz/openbmc_project/sensors/fan_tach",
Richard Marian Thomaiyar413961d2019-02-01 00:43:39 +053042 "/xyz/openbmc_project/sensors/temperature",
43 "/xyz/openbmc_project/sensors/fan_pwm"};
Ed Tanous1abe55e2018-09-05 08:30:59 -070044 void doGet(crow::Response& res, const crow::Request& req,
45 const std::vector<std::string>& params) override
46 {
47 if (params.size() != 1)
48 {
Jason M. Billsf12894f2018-10-09 12:45:45 -070049 messages::internalError(res);
Ed Tanous1abe55e2018-09-05 08:30:59 -070050 res.end();
51 return;
52 }
53 const std::string& chassisName = params[0];
Ed Tanous2474adf2018-09-05 16:31:16 -070054 auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
Richard Marian Thomaiyar413961d2019-02-01 00:43:39 +053055 res, chassisName, typeList, "Thermal");
Ed Tanous2474adf2018-09-05 16:31:16 -070056
57 // TODO Need to get Chassis Redundancy information.
58 getChassisData(sensorAsyncResp);
Ed Tanous1abe55e2018-09-05 08:30:59 -070059 }
Richard Marian Thomaiyar413961d2019-02-01 00:43:39 +053060 void doPatch(crow::Response& res, const crow::Request& req,
61 const std::vector<std::string>& params) override
62 {
Carol Wang4bb3dc32019-10-17 18:15:02 +080063 if (params.size() != 1)
64 {
65 res.end();
66 messages::internalError(res);
67 return;
68 }
69
70 const std::string& chassisName = params[0];
71 std::optional<std::vector<nlohmann::json>> temperatureCollections;
72 std::optional<std::vector<nlohmann::json>> fanCollections;
73 std::unordered_map<std::string, std::vector<nlohmann::json>>
74 allCollections;
75
76 auto asyncResp = std::make_shared<SensorsAsyncResp>(
77 res, chassisName, typeList, "Thermal");
78
79 if (!json_util::readJson(req, asyncResp->res, "Temperatures",
80 temperatureCollections, "Fans",
81 fanCollections))
82 {
83 return;
84 }
85 if (!temperatureCollections && !fanCollections)
86 {
87 messages::resourceNotFound(asyncResp->res, "Thermal",
88 "Temperatures / Voltages");
89 return;
90 }
91 if (temperatureCollections)
92 {
93 allCollections.emplace("Temperatures",
94 *std::move(temperatureCollections));
95 }
96 if (fanCollections)
97 {
98 allCollections.emplace("Fans", *std::move(fanCollections));
99 }
100
101 setSensorOverride(asyncResp, allCollections, chassisName, typeList);
Richard Marian Thomaiyar413961d2019-02-01 00:43:39 +0530102 }
Lewanczyk, Dawid08777fb2018-03-22 23:33:49 +0100103};
104
Ed Tanous1abe55e2018-09-05 08:30:59 -0700105} // namespace redfish